0

我在 VBA 中编写了一个简单的模块,将其保存为宏时可以正常工作,但是当我将其保存为加载项并运行时,它的行为很奇怪。它给出错误:对象“表”的方法“移动”失败,然后从文件号 1(代码中的 x=1)打开表。

谢谢大家的帮助。我还没有尝试使用另一个系统来检查我的 MS Excel 中的安全问题,但我没有锁定代码或密码表。

代码:

Sub opensheets()
    Dim openfiles
    Dim x As Integer
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    openfiles = Application.GetOpenFilename _
    (FileFilter:="Microsoft Excel Files (*.xls;*.xlsx),*.xls;*.xlsx", _
    MultiSelect:=True, Title:="Select Excel files!")

    If TypeName(openfiles) = "Boolean" Then
        MsgBox "You need to select atleast one file"
        GoTo ExitHandler
    End If

    x = 1
    While x <= UBound(openfiles)
        Workbooks.Open Filename:=openfiles(x)
        Sheets().Move After:=ThisWorkbook.Sheets _
          (ThisWorkbook.Sheets.Count)
        x = x + 1
    Wend
ExitHandler:
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub
4

2 回答 2

0

如果您的代码在加载项中运行,ThisWorkbook请参阅加载项。相反,您可能希望明确引用您刚刚打开的工作簿。也许是这样的:

Dim wkb As Workbook

While x <= UBound(openfiles)
    Set wkb = Workbooks.Open(Filename:=openfiles(x))
    Sheets().Move After:=wkb.Sheets(wkb.Sheets.Count)
    x = x + 1
Wend
于 2013-07-03T15:02:08.977 回答
0

如果您尝试从另一本书中获取所有工作表并将它们移动到当前工作簿的末尾(包含代码的那个),那么这对我有用:

...
While x <= UBound(openfiles)
    Dim wb as Workbook
    Set wb = Workbooks.Open(Filename:=openfiles(x))
    wb.Sheets().Move After:=ThisWorkbook.Sheets _
      (ThisWorkbook.Sheets.Count)
    x = x + 1
Wend
...

如果您正在寻找其他内容,请澄清您的问题。

于 2013-07-03T14:56:17.757 回答