来自另一工作表的VBA数据验证

来自另一工作表的VBA数据验证,vba,charts,Vba,Charts,我目前有两张工作表。第1页和第3页。在表3中,我看到多家上市公司在第一排。在每个公司下,我都有一个图表/图表名称,我可以通过另一个与公司相关的工作簿找到它 在表1中,我有一列公司和一列图表。我想创建一个下拉列表,允许用户选择一个图形并以PDF或扩展版本打开它。我该怎么做呢 Sub appendGraphs() Dim source, target As Worksheet Dim LC, RC As Integer Set source = Sheet5 Set target = Sheet1

我目前有两张工作表。第1页和第3页。在表3中,我看到多家上市公司在第一排。在每个公司下,我都有一个图表/图表名称,我可以通过另一个与公司相关的工作簿找到它

在表1中,我有一列公司和一列图表。我想创建一个下拉列表,允许用户选择一个图形并以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
端接头

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

结束函数

没有人会为您完成所有vba。只需单独搜索每个部分,在这里我会让你开始

创建一个下拉列表,

链接它,

另存为pdf,

谷歌是你的朋友

或者使用录制宏


请随意提问。

在“开发者”功能区中,按“录制宏”并接受对话框中的设置。然后手动执行导致结果的操作。然后按“停止录制”,查看新创建的脚本以了解如何完成。然后根据需要调整代码,使其通用(即,不仅针对手动执行的特定情况)。嗯,我使用了录制宏选项,我似乎有一个很好的主意。一个简单的问题是,我如何循环遍历列并显示要输入验证的值的动态范围?我能够找到最后一行的值,但如何为其分配范围?范围(第一行,最后一行)。选择?不理解最后一个问题。您想要值的范围吗?从第一排到最后一排?只需获取最后一行的行号,对于(i=0;i