簡體   English   中英

為什么會出現此運行時錯誤?

[英]Why am I getting this runtime error?

在編碼方面非常新穎,並在此處首次發表。 我到處搜索,但是找不到我的代碼出了什么問題。 基本上,我試圖從另一本工作簿上的數據計算出一些平均值。 當我運行以下代碼“運行時錯誤1004,應用程序定義的錯誤或方法定義的錯誤”時遇到的錯誤似乎是從我引用其他工作簿以執行Match方法的那一行生成的。 看來它應該對我有用,但錯誤提示不對……謝謝您的幫助

Private Sub CommandButton1_Click()
Dim wbk As Workbook
Set wbk = Workbooks.Open("X:\Data Analysis\Process & Wall Loss Data Analysis\***** CT 12 HR AVG rev2.xlsm")
Dim nrow As Integer, conv_start As Double, conv_end As Double, avg1 As Double, avg2 As Double
nrow = Cells(9, 12)
For i = 1 To nrow
    conv_start = Application.VLookup(Cells(14 + i, 12), Range(Cells(3, 2), Cells(300, 3)), 2, True)
    conv_end = Application.VLookup(Cells(14 + i, 13), Range(Cells(3, 2), Cells(300, 3)), 2, True)
    avg1 = Application.Match(conv_start, wbk.Worksheets("PC & Wear").Range(Cells(1, 1), Cells(626, 1)), 1)
    avg2 = Application.Match(conv_end, wbk.Worksheets("PC & Wear").Range(Cells(1, 1), Cells(626, 1)), 1)
    For j = 1 To 40
        Cells(42 + j, 11 + i) = Application.Average(Range(Cells(avg1, 1 + j), Cells(avg2, 1 + j)))
    Next j
Next i

結束子

wbk.Worksheets("PC & Wear").Range(Cells(1, 1), Cells(626, 1))

在這里, Cells()將引用活動工作表,而不是其他工作簿中的工作表,因此,只要“ PC&Wear”不是活動工作表,代碼就會失敗。

您應該使用工作表對象完全限定Range()Cells()所有用法:

Dim sht As Worksheet
Set sht = wbk.Worksheets("PC & Wear")
'...
avg1 = Application.Match(conv_start, sht.Range(sht.Cells(1, 1), sht.Cells(626, 1)), 1)
'...

請注意,即使在您希望使用ActiveSheet的情況下,也最好這樣做-稍后,您可能會進一步開發代碼並最終使其他工作表處於活動狀態,並且代碼會中斷(或更糟糕的是,它仍然可以工作,但是會產生錯誤的輸出)。

進一步的改進是定義一個范圍變量,以避免重復您自己:

Dim rngLU As Range
Set rngLU  = wbk.Worksheets("PC & Wear").Range("A1:A626")
'...
avg1 = Application.Match(conv_start, rngLU, 1)
'...

暫無
暫無

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

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