vba - VBA - 将工作表添加到变量并移动到新工作簿
问题描述
我正在尝试编写一个可以创建最多 3 个新工作表的宏,最后会将这些工作表移动到一个新工作簿中。可能会创建一些,全部或没有这些表,我正在努力将它们全部移动。我尝试将它们的名称添加到字符串和数组中(如果我手动键入要移动的工作表的名称,可以使用和不使用引号来模拟)。
这是我目前所拥有的,但它返回运行时错误'9':下标超出范围。如果我只移动其中一张纸,这可以正常工作,但是一旦有多张纸,它就会停止工作。请问有人可以建议吗?
Dim SheetNames As String
if x is True Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "a"
SheetNames = Worksheet.Name
End if
if y is True Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "b"
If SheetNames = "" Then
SheetNames = Worksheet.Name
Else
SheetNames = sheetNames & Worksheet.Name
End if
End if
if z is True Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "c"
If SheetNames = "" Then
SheetNames = Worksheet.Name
Else
SheetNames = sheetNames & Worksheet.Name
End if
End if
Sheets(Array(SheetNames)).Move
解决方案
您不能在通话中传递string
所有工作表名称。Array()
您可以做的是创建一个array
保存要移动的工作表的名称,然后调用该move
方法:
Sub example()
Dim x As Boolean, y As Boolean, z As Boolean
Dim SheetNamesArr() As String
Dim ArrSize As Integer
x = True
y = True
z = True
ArrSize = 0
ReDim Preserve SheetNamesArr(ArrSize)
If x Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "a"
ReDim Preserve SheetNamesArr(0 To ArrSize)
SheetNamesArr(ArrSize) = ActiveSheet.Name
ArrSize = ArrSize + 1
End If
If y Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "b"
ReDim Preserve SheetNamesArr(0 To ArrSize)
SheetNamesArr(ArrSize) = ActiveSheet.Name
ArrSize = ArrSize + 1
End If
If z Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "c"
ReDim Preserve SheetNamesArr(0 To ArrSize)
SheetNamesArr(ArrSize) = ActiveSheet.Name
ArrSize = ArrSize + 1
End If
Sheets(SheetNamesArr).Move
End Sub
推荐阅读
- python - 为什么我会收到此 Python 数据库连接错误?
- c++ - 如何在 QT 中正确转义单引号和双引号?
- android - 使用 DownloadManager 从 Google 驱动器下载 Android 文件
- ruby - Hanami:从视图或模板访问当前页面 URL
- java - 如何从用 Java 编写的文件中读取 C 中的数据(二进制或文本)?
- java - 同步如何使用 objectId 或 hashcode 在对象上工作?
- reporting-services - 以下 select 语句是否排除了提到的 CustomerID
- python-3.x - 如何修复 lambda 行以使我的 if 工作?
- sms - 如何在 Twilio SMS webhook URL 中传递 from 和 body 作为参数
- arduino - Arduino esp8266 限制 IP 地址