无法在此VBA模块中找到将数据从一个.xls文件提取到另一个.xls文件的问题

时间:2014-03-02 17:41:29

标签: excel vba excel-vba

这是我第一次在这里发帖。我一直在研究一个VBA模块,只需点击一下按钮,就可以让用户选择一个.xls文件并导入顶部(唯一)工作表中的所有数据,以便在其他工作表中进行计算。我有两个这个模块集的精确副本,用于将数据存入同一工作簿的两个不同的工作表。其中一个工作正常;第二个,我遇到麻烦的那个,只导入1-3行,我不知道为什么(我对VBA几乎没有经验:)。这是代码 - 请帮助!

Private Sub btn_GetScrapReport_Click()

     '   Local Variables
    Dim wrkBook         As Workbook
    Dim fd              As FileDialog
    Dim strComPath      As String
    Dim strFilePath As String
    Dim vrtSelectedItem As Variant


    Debug.Print "Getting File Name"

     '   Using FileOpen Dialog box get target file
    strComPath = "N:\Users\OEECalc\ScrapReports"
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .InitialFileName = strComPath
        .AllowMultiSelect = False
        .Filters.Clear
         'Add filter to only show excel files.
        .Filters.Add "Excel files", "*.xls", 1
         ' Use the Show method to display the File Picker dialog box and return the user's action.
        If .Show = -1 Then
            strFilePath = .SelectedItems(1)
        Else
             ' The user pressed Cancel.
            MsgBox "You must select a file to import before proceeding", vbOKOnly + vbExclamation, "No file Selected, exiting"
            Set fd = Nothing
            Exit Sub
        End If
    End With

     '   Open The File and Import
    Set wrkBook = Workbooks.Open(Filename:=strFilePath, ReadOnly:=True)
    Call Import_WOData(wrkBook)
    wrkBook.Close SaveChanges:=False

    Set fd = Nothing
End Sub

Sub Import_WOData(wrkbookSource As Workbook)

     '   Local Variables


     '   Clear import data range
    ThisWorkbook.Worksheets("ScrapReport").Range("A1:A65536").EntireRow.ClearContents

     '   Assumption is that workbook only contains a single sheet and the data starts ( headers ) in A1
    With wrkbookSource.ActiveSheet
        .Range("A1", .Range("A1").End(xlDown)).EntireRow.Copy Destination:=ThisWorkbook.Worksheets("ScrapReport").Range("A1")
    End With

End Sub

另一个(工作)模块是相同的,除了“ScrapReport”的每个实例都替换为“ReleaseWO”

1 个答案:

答案 0 :(得分:0)

听起来你的问题是它没有从工作表中导入所有数据,而是在第三行停止。这可能是因为单元格A4是空白的,并且您的代码采用完整且连续的数据。

这段代码表示从第一个单元格开始,向下继续直到第一个空单元格,然后复制所有这些行。

With wrkbookSource.ActiveSheet
    .Range("A1", .Range("A1").End(xlDown)).EntireRow.Copy  Destination:=ThisWorkbook.Worksheets("ScrapReport").Range("A1")
End With

如果表格完整且连续,这很好。如果您的第一列可能为空,则可以将其切换为

wrkbookSource.ActiveSheet.UsedRange.Copy Destination:=ThisWorkbook.Worksheets("ScrapReport").Range("A1")

这应该选择工作表中所有已使用的单元格,而不管其是否为连续性。它有它自己的缺点 - 一旦一个范围被认为是“使用”它几乎总是被认为是“使用”,即使它现在是空的 - 但也许这对你来说无关紧要,如果有的话还有解决办法。 / p>