2014-10-17 2 views
0

В настоящее время у меня есть 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

+1

На ленте «Разработчик» вы нажимаете «Записать макрос» и принимаете настройки в диалоговом окне. Затем вы вручную выполняете операции, которые приводят вас к результату. Затем вы нажимаете «Stop Recording», и вы просматриваете только что созданный скрипт, чтобы посмотреть, как это делается. Затем вы адаптируете код к вашим потребностям, и вы делаете его общим (т. Е. Не только для конкретного случая, который вы выполнили вручную). –

ответ

0

Никто не будет делать все, что VBA для вас. Просто Google каждую часть по отдельности, здесь я заставлю вас начать.

Создание выпадающего, https://support.office.com/en-us/article/create-a-dropdown-list-7693307a-59ef-400a-b769-c5402dce407b

Link это, http://software-solutions-online.com/2014/02/21/excel-vba-drop-down-lists/

Сохранить его как PDF, http://www.contextures.com/excelvbapdf.html

Google является вашим другом!

Или используйте запись макроса.

Вы можете задать вопросы.

+0

Хм я пошел с опцией записи макроса, и у меня, похоже, неплохая идея. Одним из быстрых вопросов является вопрос о том, как я прокручиваю столбцы и представляю динамический диапазон значений для подачи на проверку? –

+0

Мне удалось найти значение последней строки, но как мне присвоить диапазон? Диапазон (firstrow, lastrow). Выберите? –

+0

Не понимая последний вопрос. Вы хотите диапазон значений? От первой строки до последней строки? Просто возьмите номер строки последней строки, для (i = 0; i <строка; i ++) {thiscell = Cell ('A', i) .value}, тогда вы можете делать все, что хотите, с тем, что находится в ячейке. – Xogle