我正在創建一個excel應用程序,當用戶轉到特定工作表時,將打開一個用戶表單。當用戶點擊該表單時,表單出現。但是,我不希望用戶能夠查看工作表中的內容。我只是希望它在沒有延遲的情況下打開或者已經在該表單中加載。有沒有辦法做到這一點?Excel VBA表格滯後
謝謝。
我正在創建一個excel應用程序,當用戶轉到特定工作表時,將打開一個用戶表單。當用戶點擊該表單時,表單出現。但是,我不希望用戶能夠查看工作表中的內容。我只是希望它在沒有延遲的情況下打開或者已經在該表單中加載。有沒有辦法做到這一點?Excel VBA表格滯後
謝謝。
以下是儘可能接近你找到的東西。
我已經創建了一個默認名稱爲UserForm1
的表單。我在下面的代碼中包含了ThisWorkbook
。
如果用戶點擊「Sheet2」選項卡,則代碼加載UserForm1
,將其最大化並顯示出來。當表格退出時,代碼切換到「Sheet3」。
這與您的規格不完全相符,因爲您可以在窗體出現之前看到「Sheet2」幾分之一秒。我已經嘗試過預加載表單。我嘗試關閉SheetDeactivate事件例程中的屏幕更新,並在我退出SheetActivate事件例程之前再次打開它。但我沒有嘗試過阻止這種短暫的閃光。
試試這個代碼,並決定它是夠好的。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet2" Then
Load UserForm1
With UserForm1
.Width = Application.Width
.Height = Application.Height
.Show
End With
Application.EnableEvents = False ' Surpress SheetActivate event
Worksheets("Sheet3").Activate
Application.EnableEvents = True
End If
End Sub
可以通過先去隱藏工作表中的所有單元格:
Worksheets("Sheet3").Cells.EntireRow.Hidden = True
Worksheets("Sheet3").Cells.EntireColumn.Hidden = True
MyUserForm.Show 'You can show modally here if you like
當你準備好再次內容顯示給用戶,你可以使用:
MyUserForm.Hide
Worksheets("Sheet3").Cells.EntireRow.Hidden = False
Worksheets("Sheet3").Cells.EntireColumn.Hidden = False
這樣做的好處是,在這個過程中,不會丟失行和列的高度和寬度 - 它們會恢復到原來的格式。
是這樣的:
做得很好,我把它放在我的工具箱中。 – Jesse 2012-04-09 17:14:07
我喜歡你所做的,但是當我嘗試在worksheet_activate函數中實現時,出現錯誤:「無法設置Range類的隱藏屬性」......任何想法? – thebiglebowski11 2012-04-11 14:15:01
如果你發佈你的確切代碼(尤其是如果它不同於上面的代碼),並留下另一條評論通知我,我會在我的機器上測試它,看看有什麼問題。如果完全按照上面所述完成,它應該可以工作請記住,某些Excel事件執行期間無法執行某些操作。這可能是您在Worksheet_Activate事件觸發之前想要做的事情,或者之後可能是通過使用「Application.OnTime Now」,「YourMethodName」 – Alain 2012-04-26 16:42:38
當你說你不想讓用戶看到表中的數據,你的意思是從表單中的數據是在紙張上?如果是這樣,爲什麼不製作一個表單來打開表單? – 2012-04-09 15:33:22
如果您不希望用戶看到工作表中的內容,爲什麼要求他們單擊該工作表以打開表單?你可以使用其他機制來打開表單嗎?另一張紙上的按鈕,也許? – 2012-04-09 15:57:58
嗯,我無法更改工作表的數據,因爲單元格依賴於應用程序的其餘部分。由於人們習慣於使用此標籤,因此他們很高興點擊此標籤並從此處開始。長話短說......當用戶點擊表單底部的標籤時,是否有編輯行爲的方式?而不是打開表單,它打開表單? – thebiglebowski11 2012-04-09 16:25:25