VBA迭代下拉列表

时间:2015-12-30 02:07:37

标签: excel vba loops drop-down-menu

我有一张电子表格,其中J1是一个下拉列表。第8-14行中的内容将根据您在J1中的选择而更改。我需要遍历下拉列表中的所有值,并将所有相应的行复制到新的工作簿。复制粘贴部分正在工作,但我在下拉列表中遇到问题。特别是,我需要一些帮助来定义Formula1。我正在使用excel 2010.这是我的代码。提前致谢

Sub iterate_dropdown()
    Dim inputRange As Range
    Dim c As Range
    Dim Current As Range

    Set inputRange = Evaluate(Workbooks("sample.xlsm").Worksheets("Credit Research Journal").Range("J1").Validation.Formula1)
    For Each c In inputRange
        Workbooks("sample.xlsm").Worksheets("Credit Research Journal").Range("J1").Value = c.Value
        Workbooks("sample.xlsm").Sheets("Credit Research Journal").Activate
        Workbooks("sample.xlsm").RefreshAll
        FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
        Cells(8, 1).Resize(FinalRow - 7, 10).Copy
        Workbooks("Book2.xlsm").Sheets("Sheet3").Activate
        NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
        Set Current = Cells(NextRow, 1)
        Current.PasteSpecial xlPasteValues
    Next c

End Sub

1 个答案:

答案 0 :(得分:0)

我做了一些你发布的代码的实验,看起来你非常接近。我发现你获得inputRange的步骤包括一个等号(=),然后导致Evaluate函数失败。

以下是我使用的代码:

 Sub iterate_dropdown()

    Dim inputRange As Range
    Dim c As Range
    Dim Current As Range
    Dim strRange As String
    Dim strRange2 As String
    strRange = Worksheets("Credit Research Journal").Range("J1").Validation.Formula1
    strRange2 = Replace(strRange, "=", "")  'Get rid of the equals sign
    Set inputRange = Evaluate(strRange2)
    For Each c In inputRange
        Workbooks("sample.xlsm").Worksheets("Credit Research Journal").Range("J1").Value = c.Value
        Workbooks("sample.xlsm").Sheets("Credit Research Journal").Activate
        Workbooks("sample.xlsm").RefreshAll
        FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
        Cells(8, 1).Resize(FinalRow - 7, 10).Copy
        Workbooks("Book2.xlsm").Sheets("Sheet3").Activate
        NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
        Set Current = Cells(NextRow, 1)
        Current.PasteSpecial xlPasteValues
    Next c

End Sub

我使用了两个字符串变量strRangestrRange2,这样您就可以轻松地使用调试器,看看发生了什么。

此外,我假设你的下拉列表正在被引用其他单元格的值填充。