簡體   English   中英

excel / VBA將工作表名稱傳遞給函數

[英]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 SheetsWorkbook 通常,我們在此處放置僅與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM