从 MS Project 并使用 vba,在 excel 工作表上创建按钮并通过运行 MS 项目宏来启动它在 excel 中启动宏

问题描述

我的问题所依据的关于 StackOverflow 的参考文章

Open an existing Excel file and run a macro in that file through MS Project

使用上面的参考,我在 Microsoft Project 中创建了一个新模块并插入了这个例程:

     Sub sratest()
        Dim xlApp As Object
        Dim xlWkb As Object

       Set xlApp = CreateObject("Excel.Application")
       Set xlWkb = xlApp.Workbooks.Open("C:\export\SRA-text.xlsm")
      xlApp.Visible = True
      xlApp.Run "'SRA-text.xlsm'!SRA_Run"
  End Sub

在excel中,我在Excel的“ThisWorkbook”文件夹中加载了以下代码。该文件已保存为 C:\Export\SRA-text.xlsm。

   Option Explicit

   Sub SRA_Run()
   Dim i As Long
   'enter the row Number
      activesheet.cells(7+i,1) = 7+i 
      For i = 1 To 5

         AddButton "Sheet11",i
      Next i
  End Sub

  Public Sub AddButton(strSheetName As String,counter As Long)
     Dim btn As OLEObject
     Dim cLeft,cTop,cWidth,cHeight

     With Worksheets(strSheetName).Range("J" & (6 + counter))
            cLeft = .Left
            cTop = .Top
            cWidth = .Width
            cHeight = .Height
         End With
        With Worksheets(strSheetName)
            Set btn = .OLEObjects.Add(Classtype:="Forms.commandbutton.1",Link:=True,_
            displayAsIcon:=False,Left:=cLeft,Top:=cTop,Width:=cWidth,_
            Height:=cHeight)
        End With
        btn.Object.Caption = ActiveSheet.Cells(6 + counter,1) & "-iter-0"
        btnCaption = Left(strSheetName,3) & counter
        btn.Name = Left(strSheetName,3) & counter
        ActiveSheet.Cells(6 + counter,11) = btn.Name


        With ActiveWorkbook.VBProject.VBComponents( _
           ActiveWorkbook.Worksheets(strSheetName).CodeName).codemodule
          .InsertLines Line:=.CreateEventProc("Click",btn.Name) + 1,_
          String:=vbCrLf & _
          "MsgBox ""Hello world"""
       End With
  End Sub

从 excel 中运行该程序,该程序的运行完全符合人们的预期。但是,当我从 Microsoft Project 模块运行该程序时,系统响应说在 excel 上找不到该宏或该宏不存在。它确实打开了 Excel 文件。将行号添加到 Excel 工作表上的第 1 列的代码是这样我最终可以在按钮标题显示对活动编号的引用。 excel 宏中唯一的变量是代码中的工作表编号。最终应用时,.xlsm excel 文件将始终具有相同的工作表编号,该文件搜索现有的 OLE 对象,并且对于找到的每个 OLEObject,将创建一个新按钮来覆盖现有的 OLE 对象,并为其创建事件处理程序用于打开 OLEObject 图片的按钮。

对此的一个不雅的解决方案是在此 excel 工作簿中的不可见工作表上放置一个按钮,作为 .xlsm 保存的 excel 文件的一部分,预加载一个调用 SRA_Run 过程的宏,该宏也将在“ThisWorkbook”vba 模块。我可以使用 DDE 来执行此操作,在隐藏工作表的按钮上创建一个“单击”事件以运行该过程。但是,这也不是我会选择的首选方法。从 Microsoft Project 启动 excel 宏应该不难!

本文开头的参考主题是否仅适用于 excel 到 excel,还是应该也适用于 MS Project 到 Excel?。

我已经包含了包含所有代码的 excel 工作簿。 MS Project 模块中的代码非常简单,所以我没有包含它。我正在使用 MS Project 宏代码来测试 excel 代码并验证我可以创建特定于创建的每个按钮的按钮和事件处理程序。我有完全不同的程序,一旦此程序运行,我将加载到启用了 excel 宏的工作簿中。
我阅读了原始帖子的所有评论,但无法在 MS Project 端获取此宏来启动 Excel 宏。你能提供任何我可以追踪的建议吗?互联网上关于在一个办公应用程序 (MS Project) 上创建宏并让它在另一个办公应用程序 (Excel) 上启动宏的信息很少。这是我完成这个项目的最后一个障碍,所以任何帮助将不胜感激。

我使用的是 MS Project Pro 2019 和 MS Office Excel 2019,版本 2102 内部版本 13801.20266。版本和版本适用于 Project 和 Excel。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...