0

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

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

  • 鲍勃
  • 杰夫
  • 最大限度
  • 史蒂夫
  • 罗西
  • 皮帕
  • 佩内洛普

我希望宏在选择单元格 A9 的情况下在工作表“Rob”上结束,但是我收到运行时 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

任何帮助将不胜感激

4

1 回答 1

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
于 2013-01-21T12:25:16.407 回答