选择带变量的工作表时出现Excel 2007 VBA运行时错误

时间:2013-01-21 12:03:10

标签: excel vba

我最近回到了VBA,并且已经在变量中测试了字符串添加工作表的概念。我已经能够成功添加工作表,我的代码的最后两行只是选择变量的工作表名称,然后选择单元格A +存储在另一个变量中的行号

在Sheet1,A列中,从A1开始,我有一个循环的8个不同名称的列表:

  • 鲍勃
  • 杰夫
  • Max
  • 史蒂夫
  • Rosie
  • 皮帕
  • 佩内洛普
  • 罗布

我期待宏在Sheet“Rob”上以单元格A9选中结束,但是我得到运行时1004错误

我已经逐步完成了代码并且正在使用变量正确选择工作表,但是当它尝试选择行A9时,错误显示

我的代码如下:

Sub Add_worksheets()

Dim sheetName As String
Dim rownum As Integer

rownum = 1
Range("A" & rownum).Select
sheetName = ActiveCell.Value

Do Until Range("A" & rownum).Value = ""
Range("A" & rownum).Select
sheetName = CStr(ActiveCell.Value)
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sheetName
Sheets("sheet1").Select
rownum = rownum + 1
Loop

Sheets(sheetName).Select
Range("A" & rownum).Select

End Sub

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我还建议您添加if-else以检查工作表名称是否存在。您为什么要select?我不支持选择,因为你需要它,你可以试试这个:因为当你递增rownum时它会转到第10个单元格,这意味着,Sheetname不再有一个名字但是空了..

Dim sheetName As String
Dim rownum As Integer
Dim WS as WorkSheet

rownum = 1
sheetName = Range("A" & rownum).Value '-- remove select


Do Until Range("A" & rownum).Value = ""
Range("A" & rownum).Select
sheetName = CStr(ActiveCell.Value)
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sheetName
Set WS = Sheets(sheetName)
Sheets("sheet1").Select
rownum = rownum + 1
Loop

rownum = rownum - 1 '-- here
WS.Activate
Range("A" & rownum).Value = rownum

或者您可以使用数组来创建工作表,然后 选择 一张工作表.​​...而不是来回第一张工作表......有名字..

Sub addSheets()
Dim rowNum as Integer
Dim Ws as WorkSheet
Dim vArray as Variant

'-- creates one dimensional array
vArray = WorkSheetFunction.Transpoe(Sheets(1).Range("A1:A9")) 

For rownum = Lbound(vArray) to Ubound(vArray)
   If IsEmpty(vArray(rowNum)) Then
      On Error Resume Next
      Set Ws = Sheets(vArray(rowNum))
      If Err.Number <> 0 Then '--no such sheet, so add it
         Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = vArray(rowNum)
         Set Ws = Sheets(vArray(rowNum))
      End If
   End IF
Next rownum

Ws.Activate
Ws.Range("A1").offset(rownum).value = rownum
End Sub