我的纸张很少,并且需要一次特定的单元格(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
但是我收到以下错误
编译错误。预期的变量或例程而非形式
出了什么问题?
有人帮助我吗?
谢谢!
答案 0 :(得分:1)
您的Public Function ColorLabel(LabelName)
应放在Module
内,而不是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
模块中):
<强>代码:强>
ColorLabel
您可以通过检查Target
是否在Range("A1")
内是否在对任何工作表中的任何单元格所做的每次更改时调用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
函数来改进您的代码,请参阅下面的代码:
改进代码:
fl=name:display_name
答案 1 :(得分:0)
如果在ThisWorkbook
模块中定义了该函数,则应该这样调用它:
ThisWorkbook.ColorLabel Me.Name
顺便说一句,正如它所写的那样,ColorLabel应该是一个Sub而不是一个函数(它不返回任何东西)。
然而,更好的设计将是:
Workbook_SheetChange
答案 2 :(得分:0)
为什么需要传递工作表的名称?只需传递对工作表本身的引用:
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