我正在编写一个vba宏,允许我从工作表中引用数据并总结一些数据,而不是使用大量的公式来实现。
我在引用工作表方面遇到困难,并且已恢复激活工作表。我不确定我做错了什么。例如:
Sheets("Rainfall").Activate
Set x = Range(Range("C2"), Range("C2").End(xlDown))
而不是
Set x = Sheets("Rainfall").Range(Range("C2"), Range("C2").End(xlDown))
当我尝试引用
等代码时 Cells(2 + j, 3) = Application.WorksheetFunction.VLookup(Cells(2 + j, 2), Worksheets("Raw Data").Range(Range("C4"), Range("H4").End(xlDown)), 6, False)
我收到1004错误。下面是我的代码,如果有人对代码的简化有任何建议,那也很好。
Sub selectall()
Dim x, y As Range
Dim nv, rd As Long
Set Wkb = Workbooks("DWH Calculations V1.xlsm")
Sheets("Rainfall").Activate
Set x = Range(Range("C2"), Range("C2").End(xlDown))
nv = x.Rows.Count
'MsgBox (nv)
Sheets("Raw Data").Activate
Set y = Range(Range("E4"), Range("E4").End(xlDown))
rd = y.Rows.Count
'MsgBox (rd)
MinD = Round(Application.WorksheetFunction.Min(y), 0)
MaxD = Round(Application.WorksheetFunction.Max(y), 0)
Ndays = MaxD - MinD
'MsgBox (Ndays)
Sheets("Rainfall").Activate
Cells(2, 2) = MinD
For j = 1 To Ndays - 1
Cells(2 + j, 2) = Cells(1 + j, 2) + 1
Cells(2 + j, 3) = Application.WorksheetFunction.VLookup(Cells(2 + j, 2), Worksheets("Raw Data").Range(Range("C4"), Range("H4").End(xlDown)), 6, False)
Next j
End Sub
谢谢大家的帮助
答案 0 :(得分:1)
之前已经多次询问过 - 您需要使用工作表对象限定所有 Range
次调用,因此:
Set x = Sheets("Rainfall").Range(Sheets("Rainfall").Range("C2"), Sheets("Rainfall").Range("C2").End(xlDown))
或使用With...End With
块:
With Sheets("Rainfall")
Set x = .Range(.Range("C2"), .Range("C2").End(xlDown))
End With
并记下所有三次Range
次来电之前的时段。您还可以使用Worksheet变量:
Dim ws as Worksheet
Set ws = Sheets("Rainfall")
Set x = ws.Range(ws.Range("C2"), ws.Range("C2").End(xlDown))
答案 1 :(得分:0)
问题在于范围内:
取代:
Set x = Range(Range("C2"), Range("C2").End(xlDown))
使用:
With Sheets("Rainfall")
Set x = .Range(.Range("C2"), .Range("C2").End(xlDown))
End With
设置范围不需要激活。