簡體   English   中英

運行時錯誤'1004':保存文件后,對象'_Worksheet'的方法'Range'失敗

[英]Run-time error '1004': Method 'Range' of object '_Worksheet' failed after saving the file

我正在嘗試編寫的代碼應該只檢查我的公司系統中的不同價格手冊條目。 它應該從過去采購訂單並檢查哪個是特定最小訂單量的最便宜的價格書條目。 在此之前,代碼定義了一個Range PBRange ,然后應對其進行排序以便在之后使用'if'子句。 定義PBRange時,會發生錯誤1004。

當我保存並重新打開文件時,會彈出一條消息,指出文件中的某些內容存在問題。 在要求我恢復后,代碼不再起作用了。 奇怪的是,代碼在開始時工作得很好。

Public PBRange As Range
Public PO As Worksheet
Public PB As Worksheet

Sub CheapestPrice()


Dim LastRowPO As Long
Dim LastRowPB As Long

Dim i As Long
Dim j As Long

Set PO = Worksheets("Purchase Orders")
Set PB = Worksheets("Price Book")

'!!!Here the error occurs!!!
Set PBRange = PB.Range("A1", Range("A1").End(xlDown).End(xlToRight))

后面的代碼只是一個if else組合,有兩個for循環來處理2個工作表。 這應該是完美的。

我期望一個范圍隨后用不同的標准排序。

正確引用是防止錯誤的關鍵 即使它們沒有立即顯示,這些錯誤也會彈出並盡快處理您的代碼。

例如,正確的引用可以是:

Option Explicit

Public PBRange As Range
Public PO As Worksheet
Public PB As Worksheet

Sub CheapestPrice()
Dim LastRowPO As Long, LastRowPB As Long, i As Long, j As Long

Set PO = ThisWorkbook.Sheets("Purchase Orders")
Set PB = ThisWorkbook.Sheets("Price Book")

Set PBRange = PB.Range("A1", PB.Range("A1").End(xlDown).End(xlToRight))

End Sub

如果您未指定工作簿和工作表,例如Range("A1") ,則VBA將采用活動工作簿和工作表。 如果這些不是您打算引用的,您可能會收到錯誤。 通過使用With...End With語句可以防止大量輸入,從而使您的生活更輕松。 例如:

Sub example()
Dim LRow As Long

With ThisWorkbook.Sheets(1)
    LRow = .Cells(.Rows.Count, "D").End(xlUp).Row
    MsgBox LRow

    .Range("D1:D" & LRow).Value = "NewValue"
End With

End Sub

你可以嘗試:

Option Explicit

Public PBRange As Range
Public PO As Worksheet, PB As Worksheet

Sub test()
    Dim LastRowA As Long

    With ThisWorkbook
        Set PO = .Worksheets("Purchase Orders")
        Set PB = .Worksheets("Price Book")
    End With

    With PB
        'Find Sheet PB & Column A last row
        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
        'With out using LastRowA variable
        Set PBRange = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
        'Using LastRowA variable
        Set PBRange = .Range("A1:A" & LastRowA)
    End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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