簡體   English   中英

對象_worksheet的excel vba方法范圍失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM