首页 > 解决方案 > 将数据复制到新工作表会引发“下标超出范围”

问题描述

我正在研究 VBA 中的一个模块,该模块应该:

当我运行模块时,我收到一条错误消息

'下标超出范围'

所以对话框打开了,我可以选择一个文件,打开它,但是在复制/粘贴数据时它失败了。

这是代码:

Sub Import()
    Dim WS As Worksheet
    Dim fd As Office.FileDialog
    Dim Wb As Workbook
    Dim txtFilePath As String
    Dim txtFileName As String
    Dim fso As New FileSystemObject

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    With fd
        .AllowMultiSelect = False

        'Title of dialog box.
        .Title = "Select a file"

        If .Show = True Then
            txtFilePath = .SelectedItems(1)
        End If
    End With

    txtFileName = fso.GetFileName(txtFilePath)
    Workbooks.Open Filename:=txtFilePath

    'The workbook, the data is pasted to, is called "Rapport_auto"
    Workbooks(txtFileName).Worksheets("Rapport").Copy _
        after:=Workbooks("Rapport_auto").Worksheets(1)

    'Change name of active sheet
    ActiveSheet.Name = "Data"

    'Close imported workbook
    Workbooks(txtFileName).Close
End Sub

对我做错了什么有什么建议吗?

//更新//在调试期间我解决了这个问题 - 请参阅下面的回复。

标签: excelvba

解决方案


@Vityata,“Rapport_auto”文件是我从中运行代码的文件,所以它应该是打开的。

但是,我刚刚解决了这个问题 - 我不知道为什么它工作得更好,但解决方案是将代码更改为:

Dim currentFileName As String

currentFileName = ActiveWorkbook.Name
Set Wb = Workbooks(currentFileName)

Workbooks(txtFileName).Worksheets("Rapport").Copy _
    after:=Wb.Worksheets(1)

而不仅仅是

Workbooks(txtFileName).Worksheets("Rapport").Copy _
    after:=Workbooks("Rapport_auto").Worksheets(1)

我正在拆分代码以尝试调试较小的位,但最终它只是起作用了:)


推荐阅读