我正在尝试让程序搜索工作簿以检查是否存在“Sheet1”和/或“Sheet2”。如果有,我希望将它们重命名为“Results”和“DataEntries”(参见下面的代码)。如果工作表已经从先前的运行中命名)那么继续使用新名称的代码。 [用户第一次运行程序时,工作簿可能将sheet1和sheet2作为默认值。我的程序存储了上一次运行,因此如果用户以前运行过该程序,则sheet1和sheet2可能已经有了新的正确名称。
我的代码的第一行如下:
Dim ws As Excel.Worksheet
For Each ws In ActiveWorkbook.Sheets
If ws.Name = Sheet1 Then
Sheet1.Name = Results
ElseIf ws.Name = Sheet2 Then
Sheet2.Name = DataEntries
End If
Exit For
Next ws
Results.Cells.Clear
DataEntries.Cells.Clear
尝试运行程序时,我按照这个确切的顺序收到以下错误:
1)对象不支持此属性或方法
2)对象'_Worksheet'的方法'名称'失败
3)需要对象
4)需要对象
然后程序继续运行(虽然不执行我想要的操作)。它必须是简单的语法混淆,但我无法解决这个问题。有人能指出我正确的方向吗?如果需要,会发布剩余的代码,但可能没有必要。
答案 0 :(得分:1)
首先,您应该使用Option Explicit
,这是因为Require Variable Declaration
选项在VBA编辑器选项中设置为true。如果你这样做,我认为你可以自己解决一些/所有问题。
第二次,您的Results
和DataEntries
被识别为空变量。如果是这样,您尝试将工作表名称更改为空字符串,这是不允许的。因此,您需要进行以下更改(添加一些引号):
If ws.Name = "Sheet1" Then
Sheet1.Name = "Results"
ElseIf ws.Name = "Sheet2" Then
Sheet2.Name = "DataEntries"
End If
第三次,你的循环只会运行一次,因为你在第一次迭代中执行Exit For
行 - 你应该删除它,因为我找不到将它放在那里的原因。
第四,可能会有更多问题,但没有看到所有代码,很难全部识别它们。
答案 1 :(得分:1)
您的字符串周围缺少引号,Exit For
位置错误:
Dim ws As Excel.Worksheet
For Each ws In ActiveWorkbook.Sheets
If ws.Name = "Sheet1" Then
Sheet1.Name = "Results"
ElseIf ws.Name = "Sheet2" Then
Sheet2.Name = "DataEntries"
Exit For
End If
Next ws
将Exit For
放在正确的位置将在找到并重命名“Sheet2”后停止循环。