1

我试图让程序搜索工作簿以检查是否有“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) 需要的对象

然后程序继续运行(尽管没有执行我想要的操作)。这一定是简单的语法混乱,但我无法解决这个问题。有人可以指出我正确的方向吗?如果需要,将发布剩余代码,但可能没有必要。

4

2 回答 2

1

首先,您应该使用Option Explicitwhich 是Require Variable DeclarationVBA 编辑器选项中选项设置为 true 的结果。如果你这样做了,我认为你可以自己解决一些/所有问题。

其次,您的ResultsandDataEntries被识别为空变量。如果是这样,您尝试将工作表名称更改为不允许的空字符串。因此,您需要进行以下更改(添加一些引号):

    If ws.Name = "Sheet1" Then
        Sheet1.Name = "Results"
    ElseIf ws.Name = "Sheet2" Then
        Sheet2.Name = "DataEntries"
    End If

第三,您的循环将只运行一次,因为您Exit For在第一次迭代期间执行了行 - 您应该删除它,因为我找不到将它放在那里的原因。

第四,可能还有一些问题,但没有看到所有代码,很难全部识别出来。

于 2013-06-25T20:10:34.943 回答
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”后,将其放在正确的位置将停止循环。

于 2013-06-25T20:12:49.513 回答