2015-11-05 140 views
-1

我想要一個應用程序,以便當我雙擊某個單元格時,UserForm應該彈出,然後有兩個TextBoxes,我可以在其中輸入問題的標題及其描述。在輸入問題和描述並單擊SaveButton後,我想要顯示問題的標題,並在最初選擇的整個單元格中指出。更新單元格值

現在,當我雙擊單元格時,用戶窗體彈出應有的樣子。但是,當我鍵入問題的標題和說明並單擊「保存」時,UserForm將保持打開狀態,我無法關閉它。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) 

    Dim Calrange As Range 

    Dim Cell As Range 

    Set Calrange = Range("A4:G12") 

    Cancel = True 

    For Each Cell In Calrange 




      task_form.Show 



    Next 

End Sub 

而且用戶窗體爲SaveButton裏面的代碼:

Private Sub SaveButton_Click() 


    Application.ScreenUpdating = False 





       ActiveCell.Value = Me.title.Value 
       ActiveCell.Value = Me.description_problem.Value 

Unload task_form 

End Sub 

另外,我有工作表的動態數量。現在,我將下面的代碼粘貼到當前打開的工作表中。但是,我不知道最初會有多少工作表。在圖像中,我將代碼粘貼到「Sheet1」中,但是,當我執行我的代碼時,可以創建十個工作表,並且我希望這個函數能夠爲它們中的每一個工作。

enter image description here

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) 



      Dim Calrange As Range 
. 
. 
. 
. 
+0

'Application.ScreenUpdating = True'在哪裏?你需要再次打開它... –

+0

@DirkReichel對不起,我添加它不知道它是什麼。我是VBA新手。我刪除了它,因爲我認爲它根本不影響功能。 – Jack

+0

Application.ScreenUpdating設置Excel是否更新(重繪)屏幕。如果在寫入宏中的許多單元格之前將其禁用,則會顯着加速代碼,但之後需要重新啓用它,否則屏幕將以奇怪的方式表現給用戶。 –

回答

0

用戶窗體是棘手。

處理此問題的最佳方法是使用task_form.hide而不是unload task_form,然後在task_form.Show之後將其卸載。這樣做,這樣意味着你不必依靠ActiveCell,您可以使用目標從雙擊事件是這樣的:

task_form.Show 
Target.Value = Me.title.Value 
Target.Value = Me.description_problem.Value 
unload task_form 

這將意味着Target.Value被設置爲標題的值,然後是用description_problem的值覆蓋,我不認爲你想要的。

這樣可能會更好:

task_form.Show 
Target.Value = Me.title.Value & vblf & Me.description_problem.Value 
unload task_form 

vblf插入兩個語句之間carrage回報。

要回答您關於在工作表之間移動代碼的其他問題,如果您右鍵單擊工作表並將其以複製方式複製,代碼也會被複制,因此您可以設置一個模板工作表,其中包含代碼並複製當需要時。該「的ThisWorkbook」模塊中

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 

End Sub 

這就是:

或者,你可以使用一個工作簿級事件,該事件將捕獲任何DoubleClick上的任何工作。請記住,這將在工作表級代碼之後運行,因此請將代碼放在工作表模塊或工作簿模塊中,但不能同時放在兩者中。

希望這會有所幫助!

相關問題