使用VBA打开并运行用户窗体

我有一个名为“userform”的Excel文件的用户窗体:

Private Sub add1_Change() End Sub Private Sub add2_Change() End Sub Private Sub Calc_Click() Result.Value = Val(add1.Value) + Val(add2.Value) End Sub 

此用户表单从用户处获取值并将它们相加,并在文本框中显示结果。

我想在另一个名为“input”的工作簿中创build一个新的macros。 此工作簿中的macros应打开用户表单工作簿,在文本框add1和add2中input值,然后运行userform calculatebutton。

到目前为止,

  • 设置add1.value从say,A1单元格中提取一个值,对于add2.value类似。 然后我在input工作簿上创build一个macros来更改单元格A1和A2中的值。 从这里的问题是我不知道如何强制excel打开用户窗体并点击计算。

理想情况下,我真的不愿意做我所做的事情。 我想设置一个macros,打开用户窗体,input数据,点击计算,然后closures用户窗体 – 而不是编辑用户窗体本身

任何想法如何得到这个问题,这将是非常感激。

你可以用这种方法在UserForm中添加2个值(它稍微不同,那么你现在就试着去做):

您使用您当前的代码来打开UserForm

 Sub userform() Workbooks.Open (ThisWorkbook.Path & "\userform.xlsm") Application.Run "userform.xlsm!Calc" End Sub 

如上所示,您不要在userform.xlsm Workbook分配任何值

下面是你放入你的UserForm的子Initialize的代码:

 Private Sub UserForm_Initialize() Dim wb As Workbook Dim ws As Worksheet Set wb = Workbooks("input.xlsx") Set ws = wb.Worksheets("Input") Dim i as Integer Dim k as Integer UserForm.add1.Value = ws.Range("A2").Value UserForm.add2.Value = ws.Range("B2").value UserForm.calc.Value = val(UserForm.add1.Value) + val(UserForm.add2.Value) End Sub 

如上所示, calc被改变为一个Textbox ,因此你不需要在加载UserForm时直接点击一个button。

您也可以使用Label而不是Textbox

代码将会变成:

 UserForm.calc.Caption = Str( val(UserForm.add1.Value) + val(UserForm.add2.Value) ) 

@DirkReichel能否详细阐述一下? 我已经添加了你所说的,但是说我想改变add1文本框的值,我怎样称呼它? 现在,我有这样的︰Sub userform()Dim a As Integer Dim b As Integer a = Cells(1,2)b = Cells(2,2)Workbooks.Open(ThisWorkbook.Path&“\ userform.xlsm” )Application.Run“userform.xlsm!Calc”End Sub“calcmacros只是打开了用户表单,我不知道如何实际”input“数据或命中计算

答案:

我创build了2 WB,只是这个简单的代码为我工作…但是:您可能需要更改信任中心的设置。

Book1模块:(用Userform1保持TextBox1CommandButton1的WB)

 Option Explicit Public Function getUF() Set getUF = UserForm1 End Function 

Book2模块:

 Option Explicit Public ExtUF As Variant Sub the_UF() Workbooks.Open "Book1.xlsm" Set ExtUF = Application.Run("Book1.xlsm!getUF") 'get the Form Debug.Print ExtUF.TextBox1.Value 'check old value ExtUF.TextBox1.Value = "dada" 'change it Debug.Print ExtUF.TextBox1.Value 'check for new value ExtUF.CommandButton1.Value = True 'hit the button ExtUF.Show 'show the form Stop 'to check the userform ExtUF.Hide 'hide it again End Sub 

现在只需运行the_UF并检查function。 如果一切正常,按照您需要的方式将其用于您的代码。

如果你有问题,就问吧 ;)