【问题标题】:I want to create a public sub to open a specific query based on button click我想创建一个公共子来打开基于按钮单击的特定查询
【发布时间】:2022-06-17 12:20:57
【问题描述】:

我想整合我的 VBA,以便更容易管理和查看,而不是多次复制它。 然后我想在 sub 内写一个 if 语句,根据我单击的按钮打开记录集 有4个按钮 cmdAllSupplierscmdActivecmdInactivecmdArrangments 每个按钮都有调用子 EmailQuery 和错误处理的 VBA。子代码如下。

Sub EmailQuery()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim strEmail As String
    Dim strQryAll As String
    Dim strQryActive As String
    Dim strQryInactive As String
    Dim strQryArrangement As String

    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset

    strQryAll = "qryAllSuppliers"
    strQryActive = "qryActiveSuppliers"
    strQryInactive = "qryInactiveSuppliers"
    strQryArrangement = "qryAgreementEmail"

    rs.Open strQryAll, cn
    rs.Open strQryActive, cn
    rs.Open strQryInactive, cn
    rs.Open strQryArrangement, cn

    With rs
        Do While Not .EOF
            strEmail = strEmail & .Fields("Email") & ";"
            .MoveNext
        Loop
        .Close
    End With
    
    strEmail = Left(strEmail, Len(strEmail) - 1)
    
    DoCmd.SendObject , , , , , strEmail, , , True, False

End Sub

rs.open 显然无法按目前的方式工作,但我希望 if 语句根据我按下的按钮打开这四个中的一个。

【问题讨论】:

  • 您似乎掌握了 VBA .... 您只需将参数/参数传递给您的例程。即( sub FunctionName(SelectedInteger As Integer) ,然后将其与您的“if”语句一起使用以运行您想要的查询。
  • 我不会说我掌握得很好。更多的是非常擅长谷歌搜索,然后稍微调整以适应我的数据和名称等。这就是为什么我不知道该怎么做。
  • 有很多方法可以用这个任务给猫剥皮。您可以将按钮/下拉菜单添加到功能区、表单或工作表。我认为一种方法很简单,在开发人员选项卡中,查找“插入”,选择一个按钮,单击鼠标右键,分配一个宏。编写四个使用您要使用的参数调用上述宏的宏。不漂亮,但它会工作......
  • 我没有时间详细回答这个问题,它会重写轮子......如果你谷歌'调用宏以在 excel 中下拉',你会得到你的明确说明想做。

标签: vba ms-access


【解决方案1】:
Sub EmailQuery(strQueryName as string)

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim strEmail As String
   
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    rs.Open strQueryName, cn
    With rs
   .movelast 
   .movefirst


        Do While Not .EOF
            strEmail = strEmail & .Fields("Email") & ";"
            .MoveNext
        Loop
        .Close
    End With
    
    strEmail = Left(strEmail, Len(strEmail) - 1)
    
    DoCmd.SendObject , , , , , strEmail, , , True, False

End Sub
'EmailQuery is a sub so no () around parameters
Private Sub cmdAllSuppliers_Click()
EmailQuery strQryAll 
End Sub

【讨论】:

  • 这给了我一个编译错误“ByRef 参数类型不匹配”
  • 好的,所以我已经解决了我认为Private Sub cmdAllSuppliers_Click() EmailQuery (qryAllSuppliers) End Sub 的问题,我现在得到命令文本没有为rs.Open strQueryName, cn 行上的命令对象设置
  • 只需要在 Private subs 中的查询名称周围加上引号。解决了问题和我想做的事情。现在我的一个问题只是有一个问题让我想把头发拉出来......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
相关资源
最近更新 更多