Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制多张图纸时下标超出范围错误VBA_Vba_Excel - Fatal编程技术网

复制多张图纸时下标超出范围错误VBA

复制多张图纸时下标超出范围错误VBA,vba,excel,Vba,Excel,我有一个VBA函数,用于从活动工作簿复制工作表列表并保存它。我得到的下标超出范围错误。如果有任何帮助,我们将不胜感激 Private Sub exporttoexcel(excelFileName) excelFileName = 'File in my local' Dim mySheetList() As String Dim WS As Worksheets Dim WB As Workbook MsgBox excelFileName 'Dim sourceWB As Workbook

我有一个VBA函数,用于从活动工作簿复制工作表列表并保存它。我得到的下标超出范围错误。如果有任何帮助,我们将不胜感激

Private Sub exporttoexcel(excelFileName)
excelFileName = 'File in my local'
Dim mySheetList() As String
Dim WS As Worksheets
Dim WB As Workbook
MsgBox excelFileName
'Dim sourceWB As Workbook
'Dim destWB As Workbook
'
'Set sourceWB = ActiveWorkbook
'sourceWB.Sheets.Copy
'
'Set WB = Workbooks(excelFileName)
    ReDim mySheetList(0 To (ThisWorkbook.Sheets.Count) - 1)
     Dim a As Integer
      a = 0

      For Each WS In ActiveWorkbook.Worksheets
          mySheetList(a) = WS.Name
          a = a + 1
       Next

Dim Fileobj
Set Fileobj = CreateObject("Scripting.FileSystemObject")
If Fileobj.FileExists(excelFileName) Then
    Fileobj.DeleteFile excelFileName
End If

'     'actually save
     Worksheets(mySheetList).Copy '<<<<<<< RUN-TIME ERROR 9 RAISED HERE
     ActiveWorkbook.SaveAs FileName:=excelFileName
     'MsgBox excelFileName

     'ThisWorkbook.SaveAs FileName:=excelFileName, FileFormat:=xlXMLSpreadsheet
     Application.Wait (Now + TimeValue("0:00:15"))
     WB.Close

End Sub
专用子exporttoexcel(excelFileName)
excelFileName='我的本地文件'
Dim mySheetList()作为字符串
将WS设置为工作表
将WB设置为工作簿
MSGBoxExcelFileName
'将sourceWB设置为工作簿
'将WB设置为工作簿
'
'设置sourceWB=ActiveWorkbook
'sourceWB.Sheets.Copy
'
'Set WB=工作簿(Excel文件名)
ReDim mySheetList(0到(this工作簿.Sheets.Count)-1)
将a变暗为整数
a=0
对于ActiveWorkbook.Worksheets中的每个WS
mySheetList(a)=WS.Name
a=a+1
下一个
Dim Fileobj
设置Fileobj=CreateObject(“Scripting.FileSystemObject”)
如果Fileobj.FileExists(excelFileName),则
Fileobj.deleteFileExcelFileName
如果结束
“”实际保存

工作表(mySheetList)。复制“我想您已经向工作表传递了一个工作表名称列表,即“sheet1”、“sheet2”等。但是,当传递数组时,必须使用函数
sheets(array(mySheetList))

'Worksheets(mySheetList).Copy
Sheets(Array(mySheetList)).Copy

这对我来说很有效,我会尝试适应你的文件名。ws作为工作表暗显也存在问题。我将来会使用Option Explicit

Private Sub exporttoexcel()
'excelFileName = 'File in my local'
Dim mySheetList() As String
Dim WS
Dim WB As Workbook
MsgBox excelFileName
'Dim sourceWB As Workbook
'Dim destWB As Workbook
'
'Set sourceWB = ActiveWorkbook
'sourceWB.Sheets.Copy
'
'Set WB = Workbooks(excelFileName)
    ReDim mySheetList(0 To (ThisWorkbook.Sheets.count) - 1)
     Dim a As Integer
      a = 0

      For Each WS In ThisWorkbook.Worksheets
          mySheetList(a) = WS.Name
          a = a + 1
       Next

Dim Fileobj
Set Fileobj = CreateObject("Scripting.FileSystemObject")
If Fileobj.FileExists(excelFileName) Then
    Fileobj.DeleteFile excelFileName
End If

'     'actually save
     Sheets(mySheetList).Copy
     ActiveWorkbook.SaveAs Filename:=excelFileName
     'MsgBox excelFileName

     'ThisWorkbook.SaveAs FileName:=excelFileName, FileFormat:=xlXMLSpreadsheet
     Application.Wait (Now + TimeValue("0:00:15"))
     WB.Close

End Sub

错误发生在哪里?在哪一行?另请参见文档。因此,
Dim WS As Worksheet
应该是
Dim WS As Worksheet
-
Worksheet
是一个没有
名称
属性的集合类,因此,我不确定ActiveWorkbook.Worksheest
循环中的每个WS的
如何迭代一次,而不会出现运行时错误13/类型不匹配。对此,我深表歉意。错误出现在工作表(mySheetList)中。复制。
工作表
集合应优先于
工作表
集合。
工作表
集合可以包含非工作表项,例如图表。另外,OP的
mySheetList
已经是一个字符串数组,所以我不确定将它包装到另一个数组中是否会有帮助。是的,我刚刚测试了上面的代码,它可以与您的change@Lowpar-我试过了。但它仍然会出错,下标超出范围。为什么要保留一个隐式的
变量
,而不是将其声明为
工作表
?这会导致我的版本出错。当我让它隐式的工作,通常我没有这个问题可能只是因为一个打字错误。您完全可以将其声明为
工作表
——我刚刚自己测试过。OP的
作为工作表
抛出了一个类型不匹配错误。@Lowpar-我也得到了Mat的类型不匹配错误Mug@Kavinathan你用的是什么?我在2016年。