[英]excel/VBA pass a sheetname to a function
我只有幾張紙,並且一次需要特定單元格(A1)等於“ 1”,因此一旦更改其值,標簽顏色就會變為綠色。
我在ThisWorkBook中聲明以下函數:
Public Function ColorLabel(LabelName)
Set Foglio = Sheets(LabelName)
Set Target = Foglio.Range("A1")
If Target = "1" Then
Foglio.Tab.ColorIndex = 4
Else
Foglio.Tab.ColorIndex = xlNone
end if
End Function
因此,在每張紙上,我定義以下代碼
Private function Worksheet_Change(ByVal Target As Range)
ColorLabel(ActiveSheet.CodeName)
end function
但我收到以下錯誤
編譯錯誤。 預期的變量或常規而不是形式
怎么了?
誰來幫幫我?
謝謝!
您的Public Function ColorLabel(LabelName)
應該放置在Module
,而不是在Workbook
Sheets
或Workbook
。 通常,我們在此處放置僅與Sheets
事件或Workbook
事件相關的代碼。
請參見Public Function ColorLabel(LabelName)
代碼的圖像
您的Private function Worksheet_Change(ByVal Target As Range)
應該在Workbook_SheetChange
事件中(在Workbook
模塊中):
碼:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ColorLabel (Sh.Name)
End Sub
您可以通過檢查Target
是否在Range("A1")
, ColorLabel
對每個工作表中的任何單元格進行任何更改來調用ColorLabel
函數,從而改進代碼,請參見以下代碼:
改進的代碼:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' call the ColorLabel function only if value in Cell A1 was modified
If Not Intersect(Target, Range("A1")) Is Nothing Then
ColorLabel (Sh.Name)
End If
End Sub
如果該函數在ThisWorkbook
模塊中定義,則應按以下方式調用它:
ThisWorkbook.ColorLabel Me.Name
順便說一句,正如所寫,ColorLabel應該是Sub而不是函數(它不返回任何內容)。
但是,更好的設計將是:
Workbook_SheetChange
將子項重命名為事件處理程序 為什么根本需要傳遞工作表的名稱? 只需傳遞對工作表本身的引用即可:
Public Function ColorLabel(Foglio As Worksheet)
Dim Target As Range
Set Target = Foglio.Range("A1")
If Target.Value = "1" Then
Foglio.Tab.ColorIndex = 4
Else
Foglio.Tab.ColorIndex = xlNone
End If
End Function
'If this is the event handler you want...
Private Function Worksheet_Change(ByVal Target As Range)
ColorLabel Me
End Function
'Or in ThisWorkbook:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ColorLabel Sh
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.