我的工作表名为1
2
3
,等等
这些数字列在H栏的表格中。
For i = 5 To LastRow
If Range("J" & i).Value = "NOT OK" Then
Sheets(Range("H" & i).Value).Tab.Color = RGB(255, 0, 0)
End If
Next i
这会尝试将第1页中的sheet(1)调用为1。但1
实际上是(目前)第(3)页。
我尝试使用"
让Excel将其作为字符串读取,但也失败了。
Sheets(Chr(34) & Range("H" & i).Value & Chr(34)).Tab.Color = RGB(255, 0, 0)
有什么建议吗?
答案 0 :(得分:7)
尝试
Worksheets(CStr(1))
CStr将转换为字符串,因此您按名称引用而不是索引。
或使用.Text
属性
Sheets(Range("H" & i).Text)
答案 1 :(得分:3)
有关您的代码的更多说明:
首先,要解决您的问题,您可以附加空字符串以隐式将数字转换为字符串(&
强制隐式转换):
For i = 5 To LastRow
If Cells(i, 10).Value = "NOT OK" Then
Sheets(Cells(i, 8).Value & "").Tab.Color = RGB(255, 0, 0)
End If
Next i
其次,在处理多个工作表时,您最好在引用任何范围时指定工作表,例如:
Dim ws As Worksheet
Set ws = ActiveSheet 'although, it would be better to use Sheets("sheet name")
然后你的代码将成为:
For i = 5 To LastRow
If ws.Cells(i, 10).Value = "NOT OK" Then
Sheets(ws.Cells(i, 8).Value & "").Tab.Color = RGB(255, 0, 0)
End If
Next i
或者,正如coment中所建议的那样:
With ws
For i = 5 To LastRow
If .Cells(i, 10).Value = "NOT OK" Then
Sheets(.Cells(i, 8).Value & "").Tab.Color = RGB(255, 0, 0)
End If
Next i
End With