为什么我得到这个运行时错误?

在编码和第一次在这里非常新。 我已经遍地search,但无法弄清楚我的代码有什么问题。 基本上我试图从另一个工作簿上的数据计算一些平均值。 我运行以下代码时出现的错误“运行时错误1004,应用程序定义的错误或方法定义的错误”似乎是从我参考其他工作簿以执行匹配方法的行中生成的。 它看起来应该为我工作,但错误说,否则…感谢您的帮助

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()将引用active页面,而不是其他工作簿中的表单,所以只要“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的情况下也是如此 – 稍后您可能会进一步开发您的代码,并最终导致其他表单处于活动状态,您的代码将会中断(或更糟糕的是,它仍然可以正常工作,错误的输出)。

进一步的改进是定义一个范围variables来避免重复自己:

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