使用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
保持TextBox1
和CommandButton1
的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。 如果一切正常,按照您需要的方式将其用于您的代码。
如果你有问题,就问吧 ;)