Excel VBA宏中使用查找方法和匹配函数的错误

时间:2017-05-15 15:57:01

标签: excel vba excel-vba

我正在编写一个宏来为大量数据创建大量散点图。每个图表的数据集都在其自己的选项卡上。自变量始终在列J中,但因变量的位置可以更改。我将因变量的名称放在单元格K1中,告诉宏哪个列是此图表的因变量。我需要编写逻辑,在标题行中查找变量的名称,以便我可以设置Chart.SeriesCollection.NewSeries.Values的范围。

这是我的数据集的样子(由于专有信息,我无法展示真实的东西):

Sample Data Table

我尝试了find方法,但是它返回了一个错误,表明它无法找到它正在寻找的内容:

For Each ws in ThisWorkbook.Sheets
    Set oChart = ws.ChartObjects.Add (Left:=0, Width:=375, Top:=0, Height:=225)
    Set rXVal = ws.Range("J3")
    Set rXVal = Range(rXVal, rXVal.End(xlDown))
    sLookup = ws.Range("K1").Value
    Set rHeader = Range(ws.Range("J2"), ws.Range("J2").End(xlToRight))
    Set rCell = rHeader.Find(What:=sLookup, LookIn:=xlValues, LookAt:=xlPart, After:=Cells(1, 1), SearchOrder:=xlByColumns)
    Set rYVal = Range(rCell.Offset(1, 0), rCell.Offset(1, 0).End(xlDown))
    With oChart.Chart.SeriesCollection.NewSeries
        .XValues = rXVal
        .Values = rYVal
    End With
Next

然后我尝试了Match,但是我仍然收到一个错误,表明它找不到查找值:

For Each ws in ThisWorkbook.Sheets
    Set oChart = ws.ChartObjects.Add (Left:=0, Width:=375, Top:=0, Height:=225)
    Set rXVal = ws.Range("J3")
    Set rXVal = Range(rXVal, rXVal.End(xlDown))
    sLookup = ws.Range("K1").Value
    Set rHeader = Range(ws.Range("A2"), ws.Range("A2").End(xlToRight))
    iCol = Application.WorksheetFunction.Match(sLookup, rHeader, 0)
    Set rYVal = ws.Cells(3, iCol)
    Set rYVal = Range(rYVal, rYVal.End(xlDown))
    With oChart.Chart.SeriesCollection.NewSeries
        .XValues = rXVal
        .Values = rYVal
    End With
Next

我尝试将sLookup更改为CLng(sLookup)并省略WorksheetFunction条,但我仍然收到错误消息,表明找不到我想要的内容。

1 个答案:

答案 0 :(得分:0)

我认为你的主要问题是对rHeader的分配是错误的。尝试

Set rHeader = ws.Range(ws.Cells(2, 10), ws.Cells(2, ws.Columns.Count).End(xlToLeft))

然后,在第一个变体中,摆脱After:=Cells(1, 1)

最后,检查Find-Command是否通过检查结果返回任何内容:

if rCell is nothing then
    Debug.print "Not found..." 
else
  ...
end if