【问题标题】:Clicking a button on a userform (calling the a button click event)单击用户窗体上的按钮(调用按钮单击事件)
【发布时间】:2016-11-19 01:45:27
【问题描述】:

我正在尝试使用另一个简单的宏自动化将 Excel 表格转换为 LaTeX 源代码的宏。基本上我不想使用用户表单,所以我试图调用我想要的所需输出的按钮单击,但我遇到了问题。

它是 ctan.org 上的 Excel2Latex 宏

Userform here

Project layout here

这是主要的子,你可以看到我的评论部分是我在寻求帮助后一直在尝试的所有不同的东西。

Sub latex()
With NewController
    Set .View = NewView
    Set .Model = NewDefaultModel
    Set .Storage = NewStorage
    .Run
    Application.Wait Now + TimeValue("00:00:02")
   frmConvert.cmdSave.Object.Value = True

   'UserForm2.CommandButton1.Object.Value = True


    'frmConvert!cmdSave.SetFocus

    'SendKeys "{Enter}"

    'Call frmConvert.cmdCopy_Click
    'Call frmConvert.cmdSv
    'Call frmConvert.cmdCopy_Click
    'Call Memento.SaveConversionResultToFile
    'Application.Wait Now + TimeValue("00:00:03")
    'Application.Run "frmConvert.cmdCopy_Click", txtResult
    'frmConvert.cmdCopy = True
    'frmConvert.cmdCopy = vbClick
    'frm 'Application.Run frmConvert.cmdSave
    'Call frmConvert.cmdCopy_Click
    'frmConvert.cmdSave = vbClick

End With



End Sub

我想要的按钮后面的代码是私人子

Private Sub cmdSave_Click()
  SaveConversionResultToFile mModel
  Hide
End Sub

当我尝试调用 cmdSave_Click 子程序时,它返回运行时错误 91、对象变量或未设置块变量。我也尝试将 sub 设置为 Public。

到目前为止,我最幸运的是激活了用户窗体上的复制到剪贴板按钮,但它只是复制了用户窗体中的默认文本,而不是在窗口中生成的 LaTeX 表格。

有什么建议吗?

Public Sub SaveConversionResultToFile(ByVal pModel As IModel)
 Dim sFileName As String
 sFileName = pModel.AbsoluteFileName
 If sFileName = "" Then Exit Sub

 Open sFileName For Output As 1
 Print #1, pModel.GetConversionResult;
 Close #1
End Sub

我在 sFileName = pModel.AbsoluteFileName 行中收到有关 MatthewD 问题的错误。

【问题讨论】:

  • 与其尝试调用事件,不如将事件的功能公开Sub,然后调用它。
  • 我也试过了,我会报告确切的错误
  • 它是否与它是一个无模式的用户表单有关?
  • 很可能 pModel 没有初始化。在此行之前sFileName = pModel.AbsoluteFileName 检查pModel 是否为空。 Msgbox pModel Is Nothing。结果是什么?对还是错?
  • 所以你需要先初始化pModel,然后只有你才能访问它的属性AbsoluteFileName

标签: excel macros latex userform vba


【解决方案1】:

只需调用控件事件。

Sub latex()
    With NewController
        Set .View = NewView
        Set .Model = NewDefaultModel
        Set .Storage = NewStorage
        .Run
        Application.Wait Now + TimeValue("00:00:02")

        cmdCopy_Click
        cmdSave_Click

    End With
End Sub

【讨论】:

  • 它仍然给我一个运行时 91 错误,对象变量或未设置块变量
  • 你从哪里得到错误?您可能希望将事件调用移到 with 块之外。
  • 我在另一个子程序中收到错误,我编辑了我的帖子以包含它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多