从MS Access启动Excel和参考UserForm对象

我有一个MS Access数据库应用程序在这里,我想启动一个Excel文件使用VBA和使用默认值填充此文件中的UserForm对象上的字段。 我很努力地find我可以用来从Excel应用程序之外引用UserForm对象的语法。

希望这是有道理的。 这是我迄今为止的简单代码。

Dim xlApp As Excel.Application Dim xlWB As Excel.Workbook Set xlApp = CreateObject("Excel.Application") Set xlWB as xlApp.Workbooks.Open("[My file path goes here]") xlApp.Visible = True 

我在这一点上试图做的是访问这个名为UserForm1的文件中包含名为TextBox1的文本框的UserForm对象,并设置它的值。

我可以使用Excel中的VBA来做到这一点UserForm1.TextBox1 = "Test" ,这个工程。 如果可以的话,试图从MS Access外部执行此操作。 我在这里错过了很明显的东西吗

我将在这里描述一个可行的方法,我不确定是否有其他的方法来实现这个,但是这个解决scheme经过了testing,并且提供了一个通用机制来从另一个VBA应用程序调用一个VBA应用程序中的表单。

1)在Excel工作簿中添加一个macros,将其称为例如ShowFormWithParams(param1,param2等)。 此macros以非模式模式(非阻塞)显示窗体,以便您可以在窗体显示时继续执行代码。

  ' placed in code Module1 Sub showFormWithValues(lbl1 As String, txt1 As String, chk1 As Boolean) With UserForm1 .Show False .Label1.Caption = lbl1 .TextBox1.Text = txt1 .CheckBox1.Value = chk1 End With End Sub 

2)在另一个应用程序中,说Word,Access,甚至是另一个Excel工作簿,你可以调用这个macros并按照下面的方式给它适当的参数:

 Sub mySub() Dim xlApp As Excel.Application, xlWB As Excel.Workbook Set xlApp = CreateObject("Excel.Application") Set xlWB = xlApp.Workbooks.Open("C:\Test.xlsm") ' specify file xlApp.Visible = True xlApp.Run "Module1.showFormWithValues", "ABCD", "foooo", True End Sub 

现在表格显示并显示出所需的值。

我应该说,必须有一些方法来处理用户窗体,并从VBA代码中明确地控制它,但这似乎是一个困难的任务,我还没有尝试过。 希望这可以帮助。

是。 您可以在Excel中创build一个公共过程,并打开并设置excel表单上的控件的值。 然后你可以从访问中调用这个过程。
也许提供用来设置控制值的参数。

 Sub ASubInAccess() Dim xlApp As Excel.Application Dim xlWB As Excel.Workbook Set xlApp = CreateObject("Excel.Application") Set xlWB = xlApp.Workbooks.Open("C:\Users\Harvey\OneDrive\My Tasks\StackOverflow\testuserform.xlsm") xlApp.Visible = True xlWB.Application.Run "AnSubInExcel", "Hello" End Sub Public Sub AnSubInExcel(ValueFor_textBox1 as string ) UserForm1.TextBox1 = ValueFor_textBox1 UserForm1.Show End Sub 

sorting?

如果不是的话,还有另一种方法可以在这里看到答案,但这看起来更诡计。

也看到这里有有用的代码。 这最后一个链接的好处是,你可以使用芯片的程序指定访问excle用户表单的名称:

 Sub SetPropertyAtRunTime() Dim FormName As String Dim ControlName As String Dim ProcName As String Dim CallType As VbCallType Dim Res As Variant Dim Value As Variant FormName = "UserForm1" ControlName = "Label2" ProcName = "Caption" CallType = VbLet Value = "New Caption Text" Res = ControlValueByName(FormName:=FormName, ControlName:=ControlName, _ ProcName:=ProcName, CallType:=CallType, Value:=Value) ShowAnyForm FormName End Sub