非常新的编码和第一篇文章在这里。我搜遍了所有地方,但无法弄清楚我的代码有什么问题。基本上我试图从另一个工作簿的数据计算一些平均值。运行以下代码时出现的错误"运行时错误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
End Sub
答案 0 :(得分:2)
wbk.Worksheets("PC & Wear").Range(Cells(1, 1), Cells(626, 1))
此处Cells()
将引用活动表,而不是其他工作簿中的工作表,因此无论何时“PC”和“PC”都会失败。穿"不是活动表。
您应该使用工作表对象完全限定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)
'...