在工作簿之间移动工作表的问题

时间:2019-06-20 19:58:31

标签: excel vba

我正在处理一个宏,该宏会将工作表从选定的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

理想情况下,我想将工作表从选定的工作簿复制到我的预定义工作簿中。

3 个答案:

答案 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)

这是第二个字符的错字