2012-10-27 40 views
1

我有一個宏,當雙擊一個單元格時,表單將會打開。雙擊時避免在表單中選擇

當相關單元格位於表單將出現的範圍內時,會在表單中執行不需要的選擇。

如何避免此選擇?


從上barrowc的答案建議編輯由hammejdp:

我用這個(即BeforeDoubleClick事件)已經但如果您使用的是解決問題

Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal target As Range, cancel As Boolean) 

Call s_Click_DoubleClick(sh, target, cancel) 

End Sub 

Private Sub Workbook_SheetBeforeRightClick(ByVal sh As Object, ByVal target As Range, cancel As Boolean) 

Call s_Click_DoubleClick(sh, target, cancel) 

End Sub 

Private Sub s_Click_DoubleClick(sh, target, cancel) 

Application.ScreenUpdating = False 

If sh.Name <> "Legende" Then 
    cancel = True 
    ' Maak gebruik van een range 
    vRowCount = target.Rows.Count 
    vColumnCount = target.Columns.Count 
    f_Input.TextBox1.Value = vColumnCount 
+1

你能顯示一些代碼嗎?具體來說,您使用哪個事件來觸發表單? – psubsee2003

+2

如果您正在使用'BeforeDoubleClick'事件,請嘗試在事件處理程序中將'Cancel'設置爲True – barrowc

+0

@barrowc我只是想說。 :)如果你沒有使用BeforeDoubleClick,你在做什麼? –

回答

1

BeforeDoubleClick事件,請嘗試將事件處理程序中的Cancel設置爲True

1

設置取消= True不能解決問題。要複製該錯誤,請使用列表框創建一個用戶窗體並將列表框行源設置爲一個單元格範圍。在工作表的BeforeDoubleClick事件中,插入代碼以啓動表單(例如frmMyform.Show)。現在雙擊工作表中心的某個位置,在屏幕上將顯示該窗體的區域中。會發生什麼是您的雙擊的第二次點擊將被解釋爲試圖在表單上進行選擇。

這是複製問題的另一種方法。按照上述步驟操作,但在雙擊HOLD DOWN第二次單擊時。正如你將看到的,你的用戶表單出現之前,你甚至發佈了第二次點擊雙擊。在按住鼠標的同時,您可以拖動鼠標並看到當您放開第二次單擊時,鼠標實際上會選擇鼠標指針所在列表框中的項目。

總而言之,海報的意圖是雙擊單元格將啓動一個表單。其效果是它確實啓動了表單,但也解釋了雙擊中的第二次單擊以及該表單上的單擊。設置取消= True不能解決問題。

1

設置取消= True不起作用。以下是一些可以解決問題的代碼。這並不漂亮,但它的工作原理。首先,禁用列表框,當用戶窗體初始化:

Private Sub UserForm_Initialize() 
    Me.listMyList.Enabled = False 
End Sub 

這將防止從BeforeDoubleClick事件中的第二次點擊被解釋爲在用戶窗體上的列表框中選擇(或者更確切地說,它會阻止第二次點擊的能力被解釋爲這樣,因爲控件未啓用)。接下來,使用戶窗體的MouseDown事件列表框:

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    Me.listMyList.Enabled = True 
End Sub 

這不是很漂亮,但它的工作原理。

0

最好的解決辦法,我發現到目前爲止是把一個小的延遲形式的代碼初始化例行這樣:

私人小組UserForm_Initialize()

應用。等待(現在+#12:00:上午01點#)

結束子

的最小時間增量似乎是1秒。如果任何人有更清晰的解決方案或能夠將延遲時間縮短到1秒以內,請分享。請注意,「睡眠」功能在阻止表單單擊(Public Declare Sub Sleep Lib「kernel32」(ByVal dwMilliseconds As Long))時不起作用。

相關問題