引用工作表来绘制数据

时间:2015-03-02 14:59:36

标签: excel vba excel-vba

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

谢谢大家的帮助

2 个答案:

答案 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
设置范围不需要

激活