【问题标题】:VBA to Select Each Option in a Drop ListVBA 选择下拉列表中的每个选项
【发布时间】:2012-11-17 01:47:40
【问题描述】:

更新代码和问题: 该工作表模块中的当前代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Range("B2:B2")) Is Nothing Then
          Application.Run "MonthlyRead"
     End If
End Sub

Sub MPrintAll()
     Dim c As String
     Dim MonthlyList As Range
     Set MonthlyList = Worksheets("Monthly").Range("MonthlyList").Cells
     For Each cell In MonthlyList
         Range("b2").Value = cell.Value
         ActiveWorkbook.Worksheets("Monthly").PrintOut
     Next cell
End Sub

我一直在单步执行代码,试图找出问题所在。当我在 "Range("b2").Value = cell.Value" 之后按 F8 时,它会立即转到工作表的第一行代码,完全跳过打印命令。此外,它会删除命名范围中的第一个值,而不是将其复制粘贴到单元格 B2。

作为参考,下面是上面第一个例程调用的 Module1 中的代码:

    Sub MonthlyRead()
         Call MEFTPS
         Call MUCT6
    End Sub
    Sub MEFTPS()
         If Range("a2").Value = "EFTPS Package" Then
              Call MShow
              Else: Call MHide
         End If
    End Sub
    Sub MHide()
        Rows("20:20").Select
        Selection.EntireRow.Hidden = True
        Rows("31:31").Select
        Selection.EntireRow.Hidden = True
        Rows("42:42").Select
        Selection.EntireRow.Hidden = True
        Rows("53:53").Select
        Selection.EntireRow.Hidden = True
        Range("B2").Select
    End Sub
    Sub MShow()
        Rows("20:20").Select
        Selection.EntireRow.Hidden = False
        Rows("31:31").Select
        Selection.EntireRow.Hidden = False
        Rows("42:42").Select
        Selection.EntireRow.Hidden = False
        Rows("53:53").Select
        Selection.EntireRow.Hidden = False
        Range("B2").Select
    End Sub
    Sub MUCT6()
        If Range("g3").Value = "Y" Then
             Call UCT6MShow
             Else: Call UCT6MHide
        End If
    End Sub
    Sub UCT6MHide()
        Rows("19:19").Select
        Selection.EntireRow.Hidden = True
        Rows("30:30").Select
        Selection.EntireRow.Hidden = True
        Rows("41:41").Select
        Selection.EntireRow.Hidden = True
        Rows("52:52").Select
        Selection.EntireRow.Hidden = True
        Range("B2").Select
    End Sub
    Sub UCT6MShow()
        Rows("19:19").Select
        Selection.EntireRow.Hidden = False
        Rows("30:30").Select
        Selection.EntireRow.Hidden = False
        Rows("41:41").Select
        Selection.EntireRow.Hidden = False
        Rows("52:52").Select
        Selection.EntireRow.Hidden = False
        Range("B2").Select
    End Sub

我正在使用一个动态工作表,该工作表根据页面顶部的数据验证下拉列表中的选择来填充个性化的付款计划。下拉列表中有大约 300 个选项。然后打印这些时间表,以验证从其他 2 个程序获得的信息,所有这些程序都必须在一天内打印、复印、扫描、打包和邮寄。

我正在寻找可以从下拉列表中按顺序从列表的开头到结尾选择每个客户端名称的 VBA 代码。该列表是从另一个工作表上的命名范围填充的,名为“QtrlyList”。

我有一些非常简单的代码,但不起作用。

    Sub PrintAll()
        For Each cell In QtrlyList
            Worksheets("Normal").PrintOut
        Next cell
    End Sub

每当我尝试运行代码时,都会收到“类型不匹配”错误。我相当肯定这是来自“cell”或“QtrlyList”。我只是不确定如何解决它。

【问题讨论】:

  • 是什么样的下拉菜单?
  • 这是一个数据验证下拉菜单,由命名范围填充。
  • 这就是你的全部代码吗?如果您正在浏览命名范围内的单元格,我相信您需要Range("QtrlyList") 作为初学者。
  • 我是 VBA 新手。我通常可以使用 google-fu 查找代码的 sn-ps 来拼凑,但这次不行。当我将“In QtrlyList”更改为“In Range(“QtrlyList”) 时,我收到错误 400。如果我单步执行代码,我会收到“运行时错误'1004':应用程序定义或对象定义错误”第二行代码。
  • 我已经得到了一些功能。现在,问题似乎是在 VBA 发送打印命令之前让选择显示在单元格 B2 中。

标签: excel vba


【解决方案1】:

这样的东西可能对你有用(未经测试)

Sub PrintAll()

    Dim wb as Workbook, cell as Range

    Set Wb = ActiveWorkbook 'or ThisWorkBook if the code is in your reporting workbook 

    For Each cell In wb.Sheets("SheetNameHere").Range("QtrlyList").Cells
        With wb.Worksheets("Normal")
            'you want to set the value of whichever cell has the drop-down
           .Range("D2")).value=cell.Value
           DoEvents 'allow sheet to pick up changed value
           .PrintOut
        End with
    Next cell

End Sub

【讨论】:

  • 这段代码和我在 Google、Stackoverflow 和我的一位同事的帮助下设法弄清楚的代码都有同样的问题。他们到达将值输入单元格 B2(下拉列表位置)的代码行并立即返回第一行代码。即使使用 F8 单步执行,我也到达了那一行,并且我回到了代码的开头,而没有触及打印命令。
  • 这是我目前拥有的代码。 Sub MPrintAll() Dim c As String Dim MonthlyList As Range Set MonthlyList = Worksheets("Monthly").Range("MonthlyList").Cells For Each cell In MonthlyList Worksheets("Monthly").Range("b2") = c ActiveWorkbook.Worksheets("Monthly").PrintOut Next cell End Sub
  • 查看带有下拉菜单的工作表的代码模块。有这些代码吗?
  • 工作表的模块有我刚刚发布的代码和一个私人子,如果 A2 中有文本,则隐藏/取消隐藏某些行。另外,我刚刚注意到,当我逐步使用 F8 时,列表中的第一个值被删除,而不是粘贴到单元格 B2 中。
  • 你能发布其他代码吗?并且 - 更新您的问题:cmets 中的代码很难理解。
猜你喜欢
  • 2018-04-24
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多