对象_worksheet的excel vba方法范围失败

任何人都可以帮我修复我的代码? 它说“对象_工作表的方法范围失败”,但我找不到它有什么问题。

我刚刚做了一些代码来做到这一点,它很好地工作,但现在我找不到错误。

这段代码所做的是打开文件,将其复制到第一张工作表中,并将其放在工作表“主页面”之前的工作簿中,并将所有内容粘贴到工作表底部的“BOM-DB”然后删除该工作表并closures它从中获得的工作簿。

Private Sub CommandButton23_Click() Application.DisplayAlerts = False Dim wbk1 As Workbook, wbk2 As Workbook Dim FileName As String, FileToOpen As String FileToOpen = Application.GetOpenFilename _ (Title:="Choose Excel File to Import", _ FileFilter:="Excel Files *.xl?? (*.xl??),") If FileToOpen = "False" Then MsgBox "No File Specified.", vbExclamation, "ERROR" Exit Sub Else Set wbk1 = ActiveWorkbook Set wbk2 = Workbooks.Open(FileName:=FileToOpen) wbk2.Sheets.Copy before:=Workbooks(ThisWorkbook.Name).Sheets("Main Page") Dim ws1 As Worksheet, ws2 As Worksheet Dim i As Integer, k As Integer Dim ws1LR As Long, ws2LR As Long Set ws1 = Sheets(1) Set ws2 = Sheets("BOM-DB") ws1LR = ws1.Range("AA" & Rows.Count).End(xlUp).Row + 1 ws2LR = ws2.Range("AA" & Rows.Count).End(xlUp).Row i = 2 k = ws2LR Do Until i = ws1LR With ws1 .Range(.Cells(i, 1), .Cells(i, 27)).Copy End With With ws2 .Cells(k, 1).Offset(1, 0).PasteSpecial End With k = k + 1 i = i + 1 Loop wbk2.Close ThisWorkbook.Sheets(1).Delete End If Application.DisplayAlerts = True End Sub 

excel文件总是从A到AA的范围。

我在你的代码中做了一些修改,如下所示:

编辑1:显式声明后参数

 Dim wbk1 As Workbook, wbk2 As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Dim FileToOpen As String FileToOpen = Application.GetOpenFilename _ (Title:="Choose Excel File to Import", _ FileFilter:="Excel Files *.xl?? (*.xl??),") If FileToOpen = "False" Then MsgBox "No File Specified.", vbExclamation, "ERROR" Exit Sub Else Set wbk1 = Thisworkbook: Set ws1 = wbk1.Sheets("BOM-DB") Set wbk2 = Workbooks.Open(FileName:=FileToOpen) DoEvents Set ws2 = wbk2.Sheets(1) '~~> I assume you have only 1 sheet? With ws2 .Range("A2", .Range("AA" & .Rows.Count).End(xlUp)).Copy ws1.Range("A" & ws1.Range("A:A").Find("*", ws1.Range("A1") _ , , , , xlPrevious).Row).Offset(1, 0).PasteSpecial xlPasteValues End With End If wbk2.Close False 

这是你正在尝试。 HTH。

不知道错误,但如果我没有错, PasteSpecial方法没有任何额外的参数基本上只是粘贴 。 如果这是可以接受的,那么这将节省您几行代码,并希望避免错误:

代替:

 With ws1 .Range(.Cells(i, 1), .Cells(i, 27)).Copy End With With ws2 .Cells(k, 1).Offset(1, 0).PasteSpecial End With 

做这个:

 With ws1 ws2.Cells(k+1, 1).Resize(1,27).Value = .Range(.Cells(i, 1), .Cells(i, 27)).Value End With