这是我第一次在这里发帖。我一直在研究一个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”
答案 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>