Как бы я использовал функцию Find в VBA, чтобы получить адрес ячейки, который я могу использовать для SetSource некоторых данных диаграммы? - PullRequest
1 голос
/ 21 апреля 2020

Я довольно новичок в VBA, поэтому извиняюсь, если мой код немного грязный. У меня возникли проблемы с использованием Find для возврата адреса ячейки. Я хочу найти строку ячеек на основе значения списка, а затем найти адрес для первой ячейки соответствующих данных (в моем случае, C6) и последней ячейки соответствующих данных (в моем случае, L6).

Затем я хотел бы объединить эти две ячейки, чтобы создать диапазон (C6: C12). Затем я хотел бы использовать эту информацию для создания источника постоянно обновляемой диаграммы на основе значения списка.

Я почти уверен, что проблема в том, как я нахожу адрес в первую очередь. Всякий раз, когда я пытаюсь запустить его, появляется ошибка времени выполнения '91 «Переменная объекта или переменная блока не установлена».

Любая помощь будет принята с благодарностью!

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
...