![](/img/trans.png)
[英]Run-time error '1004': Method 'Range' of object '_worksheet' failed
[英]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.