2015-03-02 70 views
0

我正在写一个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 

谢谢大家的帮助

回答

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调用之前的时段。您也可以使用工作表变量:

Dim ws as Worksheet 
Set ws = Sheets("Rainfall") 
Set x = ws.Range(ws.Range("C2"), ws.Range("C2").End(xlDown)) 
+0

谢谢罗里,现在有道理。 – Tree 2015-03-02 18:16:01

0

的问题是将范围内的范围:

取代:

Set x = Range(Range("C2"), Range("C2").End(xlDown)) 

有:

With Sheets("Rainfall") 
     Set x = .Range(.Range("C2"), .Range("C2").End(xlDown)) 
End With 

一个ctivate不需要设置范围。