工作表名称是一个数字,如何在vba中调用它?

时间:2018-03-26 06:05:21

标签: excel vba excel-vba

我的工作表名为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)

有什么建议吗?

2 个答案:

答案 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