2012-04-09 70 views
1

我正在創建一個excel應用程序,當用戶轉到特定工作表時,將打開一個用戶表單。當用戶點擊該表單時,表單出現。但是,我不希望用戶能夠查看工作表中的內容。我只是希望它在沒有延遲的情況下打開或者已經在該表單中加載。有沒有辦法做到這一點?Excel VBA表格滯後

謝謝。

+1

當你說你不想讓用戶看到表中的數據,你的意思是從表單中的數據是在紙張上?如果是這樣,爲什麼不製作一個表單來打開表單? – 2012-04-09 15:33:22

+1

如果您不希望用戶看到工作表中的內容,爲什麼要求他們單擊該工作表以打開表單?你可以使用其他機制來打開表單嗎?另一張紙上的按鈕,也許? – 2012-04-09 15:57:58

+0

嗯,我無法更改工作表的數據,因爲單元格依賴於應用程序的其餘部分。由於人們習慣於使用此標籤,因此他們很高興點擊此標籤並從此處開始。長話短說......當用戶點擊表單底部的標籤時,是否有編輯行爲的方式?而不是打開表單,它打開表單? – thebiglebowski11 2012-04-09 16:25:25

回答

2

以下是儘可能接近你找到的東西。

我已經創建了一個默認名稱爲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 
2

可以通過先去隱藏工作表中的所有單元格:

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 

這樣做的好處是,在這個過程中,不會丟失行和列的高度和寬度 - 它們會恢復到原來的格式。

是這樣的: enter image description here

+0

做得很好,我把它放在我的工具箱中。 – Jesse 2012-04-09 17:14:07

+0

我喜歡你所做的,但是當我嘗試在worksheet_activate函數中實現時,出現錯誤:「無法設置Range類的隱藏屬性」......任何想法? – thebiglebowski11 2012-04-11 14:15:01

+0

如果你發佈你的確切代碼(尤其是如果它不同於上面的代碼),並留下另一條評論通知我,我會在我的機器上測試它,看看有什麼問題。如果完全按照上面所述完成,它應該可以工作請記住,某些Excel事件執行期間無法執行某些操作。這可能是您在Worksheet_Activate事件觸發之前想要做的事情,或者之後可能是通過使用「Application.OnTime Now」,「YourMethodName」 – Alain 2012-04-26 16:42:38