2017-06-01 31 views
0

下面的代碼運行得更早,但雙擊單元格時不會執行。當單元格被雙擊時,爲什麼不執行下面的代碼?

Private Sub Worksheet_DoubleClick(ByVal Target As range, Cancel As Boolean) 
    If Target.Font.Bold = False Then 

      Target.Font.Bold = True 
      Target.Font.Color = vbRed 
    Else 
      Target.Font.Bold = False 
      Target.Font.Color = 1 

    End If 
End Sub 
+1

改爲使用'Worksheet_BeforeDoubleClick'。 –

+0

更新後的代碼顯示如下:Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.range,Cancel As Boolean),但它仍未觸發。先謝謝你。 –

+1

事件處理程序綁定到其實施的工作表。確保你在正確的工作表的代碼隱藏中實現處理程序。順便說一句,「下面的代碼運行得更早」是完全不可能的。該方法的簽名與任何'WorksheetEvents'接口都不匹配,所以它永遠不會被調用。將光標置於'If'語句上,然後按下F9創建一個斷點。然後雙擊一個單元格。這就是你會如何知道它是否被調用。 FWIW在這裏完美地工作。 –

回答

2

不是一個答案,爲什麼它不工作(@馬特杯和@Scott Craner再次擊敗我),但縮短了版本的代碼。

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

    With Target.Font 
     .Bold = Not .Bold 
     .Color = Choose(Abs(CLng(.Bold)) + 1, 1, vbRed) 
    End With 

End Sub 

好,不容易遵循原來的,但這裏是它在做什麼:

Target.Font.Bold爲TRUE或FALSE,所以Not .Bold將返回相反。
粗體= TRUE所以非粗體= FALSE

Abs(CLng(.Bold)) + 1
再次,.Bold是TRUE或FALSE。數值TRUE = -1,FALSE = 0

CLNG(.Bold)將返回-1或0。
ABS(CLNG(.Bold))將返回1或0。
Abs(CLng(.Bold)) + 1將返回1或2 - 其在CHOOSE命令用於返回vbRed1

+0

謝謝你的迴應。我已經更新了代碼,一切都很好。再次感謝。 –

2

請勿類型的任何手動將這些簽名!

使用代碼窗格的下拉列表中,而不是:

code pane dropdowns

選擇Worksheet從左邊下拉菜單,並選擇相應的事件在右上角的下拉式處理; VBE將爲您生成一個具有適當簽名的方法存根。

手工打字出來把你的頭可以頂(和做!)與最終從未被稱爲處理程序,或者更糟糕的結果,叫,但在錯誤的論點給出的參數值,例如如果UserForm_QueryClose與倒參數手動輸入了(該處理器擁有2個Integer參數,所以你需要記住的確切順序..否則,您分配Cancel和形式瞭解您分配CloseMode

如果你沒有看到Worksheet在左邊的下拉列表中,那麼你不在工作表的代碼隱藏模塊中。工作表事件只能在工作表模塊中處理。在工作簿上任何工作

Workbook模塊(即ThisWorkbook)可以處理SheetBeforeDoubleClick事件來處理雙擊:

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

End Sub 
+0

私人小組Worksheet_BeforeDoubleClick(BYVAL目標爲Excel.range,取消作爲布爾) 如果Target.Font.ColorIndex <> 1然後 Target.Cells.Font.ColorIndex = 1 Target.Font.Bold =假 否則 Target.Cells.Font.Color = vbRed Target.Font.Bold = True End If Cancel = True End Sub –

+0

我把這個Sub放在單張工作表「Sheet 1」上。它按預期啓動鼻涕。我錯過了什麼?感謝您的好評。 –

+0

確切的代碼在這裏工作。該處理程序處理雙擊事件。你有沒有嘗試在處理程序中設置斷點(F9)? –

相關問題