我正在处理一个宏,该宏会将工作表从选定的Excel工作表移到已加载了宏的文档中。
我在实际移动工作表时遇到问题,我不断收到下标超出范围的错误,并且不确定为什么
到目前为止,我已经仔细研究过stackoverflow和其他一些资源。我尝试使用.sheets
/ workbook(workbookname).worksheets(1).copy
...等等。
Sub runEXCEL()
dim wb1 as workbook, wb2 as workbook
dim fd as filedialog
dim shtpath as string
dim ws as worksheet
Set fd = Application.FileDialog(msoFileDialogFilePicker)
If fd.Show = True Then
If fd.SelectedItems(1) <> vbNullString Then
shtpath = fd.SelectedItems(1)
End If
Else
End
End If
set wb1 = workbooks.open("c:\users\username\documents\yestbook.xlsm", true, false
set wb2 = workbooks.open(shtpath)
set ws = wb2.worksheets(1)
ws.name = "testname"
ws.worksheets(1).copy after:=wb1.sheets(1)
'xl.Application.Run "yestbook.xlsm!findCellAddress"
End Sub
理想情况下,我想将工作表从选定的工作簿复制到我的预定义工作簿中。
答案 0 :(得分:0)
不必创建其他Excel进程(实际上,这可能是问题的原因)。您还应该将工作簿和工作表变量用于全部工作表访问,并避免使用不合格的访问权限,例如Sheets("testname")
。
尝试以下方法:
Dim wb as workbook, ws as worksheet, wb2 as workbook, ws2 as worksheet
Set wb = Workbooks.Open(mysheetpath1)
Set ws=wb.Worksheets(1)
set wb2=Workbooks.Open(mysheetpath2)
set ws2=wb2.Worksheets(1)
ws2.Copy after:=ws
答案 1 :(得分:0)
出现下标超出范围是因为全局"yestbook.xlsm"
集合中不存在Workbooks
,在这种情况下,该集合仅限于Excel的 active 实例(即,执行此代码的实例)。您已经打开了两个工作簿,分别在Excel的 new 和单独实例中,这带来了更多的问题,因为您实际上不能在实例之间Copy
工作表这样。
这应该可行,除非出于某些特殊原因,每个文件必须在自己的实例中打开:
Dim wb1 As Workbook, wb2 as Workbook
Dim fd As FileDialog
Dim shtpath As String
Dim ws As Worksheet
Set fd = Application.FileDialog(msoFileDialogFilePicker)
If fd.Show = True Then
If fd.SelectedItems(1) <> vbNullString Then
shtpath = fd.SelectedItems(1)
End If
Else
End
End If
Set wb1 = Workbooks.Open("C:\Users\username\Desktop\yestbook.xlsm", True, False)
Set wb2 = Workbooks.Open(shtpath)
Set ws = wb2.Worksheets(1)
ws.Name = "testname"
ws.Copy after:=wb1.Sheets(1)
答案 2 :(得分:0)
第二行-您有
ws.worksheets(1).copy after:=wb1.sheets(1)
应该是
wb.worksheets(1).copy after:=wb1.sheets(1)
这是第二个字符的错字