В настоящее время у меня есть 2 листа. Лист1 и Лист3. В Sheet3 у меня есть несколько публично торгуемых компаний, проходящих через первую строку. Под каждой компанией у меня есть имя диаграммы/графика, которое я смог найти в другой книге, которая имеет отношение к компании.Проверка данных VBA с другого листа
В sheet1 у меня есть столбец компаний и столбец для графика. Я хочу создать раскрывающийся список, который позволит пользователю выбрать график и открыть его в PDF или расширенной версии. Как мне это сделать?
Sub appendGraphs()
Dim source, target As Worksheet
Dim LC, RC As Integer
Set source = Sheet5
Set target = Sheet1
LC = source.Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To LC ' collect strings from each column and store it to tempList to feed to datavalidation
RC = source.Cells(Rows.Count, i).End(xlUp).Row
ReDim tempList(1 To RC) As String
For n = 2 To UBound(tempList)
tempList(n) = source.Cells(i, n).Value
With target.Cells(findRowB(source.Cells(1, i).Value, Sheet1), 10).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=tempList
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Next
Next
End Sub
Function findRowB(x As String, Optional y As Worksheet) As Integer 'finds specific row to start writing values in
Dim expectedRow As Range
Dim wbsheet As Worksheet
If y Is Nothing Then
Set wbsheet = ActiveSheet
Else
Set wbsheet = y
End If
Set expectedRow = wbsheet.Range("C:C").Find(What:=x, LookIn:=xlValues, Lookat:=xlWhole)
findRowB = expectedRow.Row
End Function
На ленте «Разработчик» вы нажимаете «Записать макрос» и принимаете настройки в диалоговом окне. Затем вы вручную выполняете операции, которые приводят вас к результату. Затем вы нажимаете «Stop Recording», и вы просматриваете только что созданный скрипт, чтобы посмотреть, как это делается. Затем вы адаптируете код к вашим потребностям, и вы делаете его общим (т. Е. Не только для конкретного случая, который вы выполнили вручную). –