Excel 如何使用VBA中的Find函数获取单元格地址,以便设置图表数据源?

Excel 如何使用VBA中的Find函数获取单元格地址,以便设置图表数据源?,excel,vba,find,excel-charts,Excel,Vba,Find,Excel Charts,我是VBA新手,如果我的代码有点乱,我深表歉意。我在使用Find获取手机地址时遇到了一些问题。我希望根据listbox值查找单元格行,然后查找相关数据的第一个单元格(在本例中为C6)和相关数据的最后一个单元格(在本例中为L6)的地址 然后我想把这两个单元格连接在一起,这样我就可以创建一个范围(C6:C12)。然后,我想使用这些信息为基于listbox值的不断更新的图表创建一个源 我很确定问题首先在于我如何找到地址。每当我试图运行它时,就会出现运行时错误'91“Object variable or

我是VBA新手,如果我的代码有点乱,我深表歉意。我在使用Find获取手机地址时遇到了一些问题。我希望根据listbox值查找单元格行,然后查找相关数据的第一个单元格(在本例中为C6)和相关数据的最后一个单元格(在本例中为L6)的地址

然后我想把这两个单元格连接在一起,这样我就可以创建一个范围(C6:C12)。然后,我想使用这些信息为基于listbox值的不断更新的图表创建一个源

我很确定问题首先在于我如何找到地址。每当我试图运行它时,就会出现运行时错误'91“Object variable or with block variable not set”

任何帮助都将不胜感激

Private Sub lstCityWA_Click()

'Denote variables that will be used to get the label data for the header of the sheet
Dim strCity As String, wsWAData As Worksheet, strWA As String
'Denote variables that will be used to create the chart
Dim chtCrimeData As ChartObject
'Denote variables that will be used to source the chart data
Dim rngAddress1 As Range, rngAddress2 As Range, rngChartData1 As Range, rngChartData2 As Range
'Denote variables that will be used for the imagebox
Dim picPath As String

'Create the VLOOKUP that will change the header label caption
Set wsWAData = ActiveWorkbook.Worksheets("Washington Data")

strCity = lstCityWA.Value

strWA = Application.WorksheetFunction.VLookup(strCity, Worksheets("Washington Data").Range("A6:A187"), 1, False)

lblWA.Caption = strWA

'Find the cells that make up the beginning and end of the row needed for chart data
Set rngAddress1 = ActiveWorkbook.Worksheets("Washington Data").Range("A6:A187").Find(what:=strCity, LookIn:=xlValues, lookat:=xlWhole)

rngChartData1.Value = rngAddress1.Offset(, 3).Value

Set rngAddress2 = ActiveWorkbook.Worksheets("Washington Data").Range("A6:A187").Find(what:=strCity, LookIn:=xlValues, lookat:=xlWhole)

rngChartData2.Value = rngAddress2.Offset(, 12).Value

'Create the chart
Set chtCrimeData = Worksheets("Washington").ChartObjects.Add(Left:=180, Width:=300, Top:=7, Height:=200)


'Concatenate the data to set the source for the chart
chtCrimeData.Chart.SetSourceData Source:=Worksheets("Washington Data").Range(rngChartData1 & ":" & rngChartData2)

'Put the photo of the town in the image box
picPath = ActiveWorkbook.Path & "\Pictures\Washington\Cities\" & strCity & ".jpg"
imgWA.Picture = LoadPicture(picPath)

End Sub

这意味着查找失败。问题是代码引用了太多数据。这里没有人能测试它。同样的问题干扰了你自己的进步。要查找行或单元格地址,可以将其委托给一个非常小的函数,您可以快速构造该函数,进行彻底的测试,询问是否需要,如果这样可以简化代码,则只在主代码中安装。工作表函数VLOOKUP将返回一个值,MATCH将返回一个地址。在VBA中有
Find
方法,该方法返回一个单元格,该单元格同时给出值和地址。关于这个问题,应该没有
imgWA.Picture=LoadPicture(picPath)
。您还没有将范围传递到“rngChartData1”和“rngChartData2”(您还没有使用Set)。如果“A6:A187”范围内的数据是公式,则必须使用“xlFormulas”而不是“xlValues”。find方法有一个SearchDirection参数,默认为xlNext,即第一个要计算的单元格是单元格A7,而不是A6。好的,谢谢您的帮助!我将确保下次设置范围,并将其划分为更小的函数。这意味着
查找
失败。问题是您的代码引用了太多数据。这里没有人能测试它。同样的问题干扰了你自己的进步。要查找行或单元格地址,可以将其委托给一个非常小的函数,您可以快速构造该函数,进行彻底的测试,询问是否需要,如果这样可以简化代码,则只在主代码中安装。工作表函数VLOOKUP将返回一个值,MATCH将返回一个地址。在VBA中有
Find
方法,该方法返回一个单元格,该单元格同时给出值和地址。关于这个问题,应该没有
imgWA.Picture=LoadPicture(picPath)
。您还没有将范围传递到“rngChartData1”和“rngChartData2”(您还没有使用Set)。如果“A6:A187”范围内的数据是公式,则必须使用“xlFormulas”而不是“xlValues”。find方法有一个SearchDirection参数,默认为xlNext,即第一个要计算的单元格是单元格A7,而不是A6。好的,谢谢您的帮助!下次我一定要设置范围,我会把它分成更小的函数。