[英]excel vba method range of object _worksheet failed
誰能幫我修復我的代碼? 它說“對象_worksheet的方法范圍失敗”,但是我找不到它的問題所在。
我之前混入了一些代碼來完成此操作,效果很好,但現在找不到錯誤。
這段代碼的作用是打開要復制第一張紙的文件,將其放在我正在使用的工作簿中,然后插入工作表“ Main Page”,然后將所有內容粘貼到工作表“ BOM-DB”的底部然后刪除該工作表並關閉從中獲取工作表的工作簿。
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。
我對您的代碼進行了一些更改,如下所示:
Edit1:明確聲明后爭論
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.