VBS中如何添加窗体

时间:2022-08-25 17:43:13
本人用一款叫  ansoft maxwell的 电磁场有限元计算软件  ,这个软件支持使用 VBS脚本  ,下面是这个软件一个脚本的代码  ,它的输入参数是用“Inputbox”函数传递进去的  ,本人想做一个界面  ,里面有文本框,在文本框里输入参数,从而替代原来脚本所使用的 “Inputbox”,不知道如何实现  ,想在这里问问大家,小弟先谢谢您的热心帮助了!


下面是这个脚本的源代码, 红色的部分,就是我要做个有文本框的界面的地方

Dim oAnsoftApp
Dim oDesktop
Dim oProject
Dim oDesign
Dim oEditor
Dim oModule
Set oAnsoftApp = CreateObject("AnsoftMaxwell.MaxwellScriptInterface")
Set oDesktop = oAnsoftApp.GetAppDesktop()
oDesktop.RestoreWindow
Set oProject = oDesktop.GetActiveProject()
Set oDesign = oProject.GetActiveDesign()
dim TimeSelect
dim TimeSelectSub
dim FileInc
Dim project_path
i = 0 
j = 0
'find the directory where the vb script is located (Project Directory Location)
project_path = oProject.GetPath()
'Prompt User for Input Data
StartTimein = Inputbox("Enter the Starting Time (sec)" &chr(13) & "(as defined in Saved Fields)")
EndTimein = Inputbox("Enter the End Time (sec)" &chr(13) & "(as defined in Saved Fields)")
dtin = Inputbox("Enter the Time Step (sec)" &chr(13) & "(as defined in Saved Fields)")
NamedExpression = Inputbox("Enter the name of the Named Expression" &chr(13) & "(e.g. AverageLoss_1)")
TotalTimeSteps = (int(((EndTimein - StartTimein)/dtin)+1)*100)/100
TotalSteps_s = "FYI: The total number of Field Solutions used for Averaging is " & TotalTimeSteps &chr(13) &chr(13) & _
"Click OK to Continue, Hit Esc to interrupt script."
msgbox (TotalSteps_s)
StartTime=StartTimein*1e9   'Converts to ns for use in the Fields Calculator
EndTime=EndTimein*1e9
dt=dtin*1e9

Set oModule = oDesign.GetModule("FieldsReporter")
oModule.EnterQty "TotalLoss"   'Load Core Loss and Smooth it 
oModule.CalcOp "Smooth"
For n = StartTime to EndTime Step dt
TimeSelect = n
TimeSelectSub = CStr(TimeSelect) & "ns"
i = 1+i
FileInc = i
Filename = "\Test_" & CStr(FileInc) & ".fld"
'Save Fields to a File in Fields Calculator 
oModule.CalculatorWrite project_path & Filename, _
Array("Solution:=",  "Setup1 : Transient"), _
Array("Time:=", TimeSelectSub)
Next

'ReLoad Saved Core Loss Fields and Add Fields together
j=j+1
FileInc = j
Filename = "\Test_" & CStr(FileInc) & ".fld"
oModule.CalculatorRead project_path & Filename,  _
  "Setup1 : Transient", "Fields", _
  Array("Time:=", TimeSelectSub)
For j = 2 to i
FileInc = j
Filename = "\Test_" & CStr(FileInc) & ".fld"  
oModule.CalculatorRead project_path & Filename,  _
     "Setup1 : Transient", "Fields", _
    Array("Time:=", TimeSelectSub)
oModule.CalcOp "+"
Next

'Divide all fields by total number of ouput field results, i
oModule.EnterScalar CStr(i)
oModule.CalcOp "/"
oModule.AddNamedExpression NamedExpression, "Fields"
msgbox ("The Script is Complete.  " &chr(13) & _
   "After selecting the geometry to plot the averaged field," &chr(13) & _ 
   "the Named Expression can be selected under Field Overlays -> Fields -> Named Expressions.")

20 个解决方案

#1


createobject.
没看到红的。

#2


我了个去这么长,物理没学好电磁啥的看不懂,代码我就不看了。。。
依楼主大概意思,应该是新建个窗体,工程——添加窗体——窗体,这样就可以了,然后新建个text文本框和一个确认按钮一个取消按钮就可以了
确认按钮的功能是把text文本框中你输入的值传递给form1,这个楼主应该会的吧,大概就是

Private Sub Command1_Click()
form1.[变量]=text1.text
form2.hide
form1.show
End Sub

然后用下面这段代码代替原来inputbox的那段:

form1.hide
form2.show

#3


    我看楼上的回答者,是不懂,人家问的是VBS,不是VB。VBS是VB Script,就是用Basic语言写成的脚本命令。
    VBS本身无法添加窗口,因为VBS是脚本语言,并非真正的编译。再加上你用InputBox是同步的,在用户还没有单击确定之前,程序不会继续执行下去,你说对吗;但是你用窗口,那是异步的,窗口一出现,程序就继续向下执行,这时候用户都没有输入值,非得出错不可。

#4


引用 3 楼 jiluoxingren 的回复:
我看楼上的回答者,是不懂,人家问的是VBS,不是VB。VBS是VB Script,就是用Basic语言写成的脚本命令。
  VBS本身无法添加窗口,因为VBS是脚本语言,并非真正的编译。再加上你用InputBox是同步的,在用户还没有单击确定之前,程序不会继续执行下去,你说对吗;但是你用窗口,那是异步的,窗口一出现,程序就继续向下执行,这时候用户都没有输入值,非得出错不可。

我又孤陋寡闻了=。=没看到是VBS
刚学到多媒体还木有学VBS。。。

#5


StartTimein = Inputbox("Enter the Starting Time (sec)" &chr(13) & "(as defined in Saved Fields)")
EndTimein = Inputbox("Enter the End Time (sec)" &chr(13) & "(as defined in Saved Fields)")
dtin = Inputbox("Enter the Time Step (sec)" &chr(13) & "(as defined in Saved Fields)")
NamedExpression = Inputbox("Enter the name of the Named Expression" &chr(13) & "(e.g. AverageLoss_1)")



就是这个地方的代码   

#6


还请大家说说  谢谢您了   

#7


建个dll么,

#8


我也想知道啊

#9


引用 7 楼 patrickkong 的回复:
建个dll么,

 这个有限元软件软件  只支持VBS的

#10


我的意思是建个dll,以后用vbs调用。

#11


引用 10 楼 patrickkong 的回复:
我的意思是建个dll,以后用vbs调用。

谢谢您的回复  ,但因为软件只支持vbs   所以这个方法似乎不行

#12


VBS好像不能调用API。。。

#13


恳请大家能继续说说  小弟再次谢谢您的热心帮助!

#14


还请大家说说

#15


依旧期待大家的回答

#16


用vb写个 atx dll,里面画好你想要的窗口,在写一个 类,调整适用范围为 公开,在vbs里面createobject 那个类。。。。 自己去发挥吧

#17


引用 16 楼 pctgl 的回复:
用vb写个 atx dll,里面画好你想要的窗口,在写一个 类,调整适用范围为 公开,在vbs里面createobject 那个类。。。。 自己去发挥吧

谢谢 PctGL的思路   

可惜小弟干的是电机    对程序这东西只懂得皮毛   你说的方法 似乎要画很长时间去研究  唉!  自叹所学有限  

#18


从你上面那堆代码来看,写这个dll应该没问题

#19


我记得以前用win2000的时候看到过系统自带的能建立窗口的脚本,好像是wsh写的。
反正当时感觉很神奇,就是一个vbs或者js文件,点了以后就出现个窗体,里面有好多类似vb的控件
好像一个正常的应用程序一样,可以执行。以前乱翻windows文件夹发现的,现在不记得怎么找了

#20


引用 18 楼 pctgl 的回复:
从你上面那堆代码来看,写这个dll应该没问题

那些vbs   主体内容是  录制 VBS做的  我只是在录制的基础上  改改而已   

#1


createobject.
没看到红的。

#2


我了个去这么长,物理没学好电磁啥的看不懂,代码我就不看了。。。
依楼主大概意思,应该是新建个窗体,工程——添加窗体——窗体,这样就可以了,然后新建个text文本框和一个确认按钮一个取消按钮就可以了
确认按钮的功能是把text文本框中你输入的值传递给form1,这个楼主应该会的吧,大概就是

Private Sub Command1_Click()
form1.[变量]=text1.text
form2.hide
form1.show
End Sub

然后用下面这段代码代替原来inputbox的那段:

form1.hide
form2.show

#3


    我看楼上的回答者,是不懂,人家问的是VBS,不是VB。VBS是VB Script,就是用Basic语言写成的脚本命令。
    VBS本身无法添加窗口,因为VBS是脚本语言,并非真正的编译。再加上你用InputBox是同步的,在用户还没有单击确定之前,程序不会继续执行下去,你说对吗;但是你用窗口,那是异步的,窗口一出现,程序就继续向下执行,这时候用户都没有输入值,非得出错不可。

#4


引用 3 楼 jiluoxingren 的回复:
我看楼上的回答者,是不懂,人家问的是VBS,不是VB。VBS是VB Script,就是用Basic语言写成的脚本命令。
  VBS本身无法添加窗口,因为VBS是脚本语言,并非真正的编译。再加上你用InputBox是同步的,在用户还没有单击确定之前,程序不会继续执行下去,你说对吗;但是你用窗口,那是异步的,窗口一出现,程序就继续向下执行,这时候用户都没有输入值,非得出错不可。

我又孤陋寡闻了=。=没看到是VBS
刚学到多媒体还木有学VBS。。。

#5


StartTimein = Inputbox("Enter the Starting Time (sec)" &chr(13) & "(as defined in Saved Fields)")
EndTimein = Inputbox("Enter the End Time (sec)" &chr(13) & "(as defined in Saved Fields)")
dtin = Inputbox("Enter the Time Step (sec)" &chr(13) & "(as defined in Saved Fields)")
NamedExpression = Inputbox("Enter the name of the Named Expression" &chr(13) & "(e.g. AverageLoss_1)")



就是这个地方的代码   

#6


还请大家说说  谢谢您了   

#7


建个dll么,

#8


我也想知道啊

#9


引用 7 楼 patrickkong 的回复:
建个dll么,

 这个有限元软件软件  只支持VBS的

#10


我的意思是建个dll,以后用vbs调用。

#11


引用 10 楼 patrickkong 的回复:
我的意思是建个dll,以后用vbs调用。

谢谢您的回复  ,但因为软件只支持vbs   所以这个方法似乎不行

#12


VBS好像不能调用API。。。

#13


恳请大家能继续说说  小弟再次谢谢您的热心帮助!

#14


还请大家说说

#15


依旧期待大家的回答

#16


用vb写个 atx dll,里面画好你想要的窗口,在写一个 类,调整适用范围为 公开,在vbs里面createobject 那个类。。。。 自己去发挥吧

#17


引用 16 楼 pctgl 的回复:
用vb写个 atx dll,里面画好你想要的窗口,在写一个 类,调整适用范围为 公开,在vbs里面createobject 那个类。。。。 自己去发挥吧

谢谢 PctGL的思路   

可惜小弟干的是电机    对程序这东西只懂得皮毛   你说的方法 似乎要画很长时间去研究  唉!  自叹所学有限  

#18


从你上面那堆代码来看,写这个dll应该没问题

#19


我记得以前用win2000的时候看到过系统自带的能建立窗口的脚本,好像是wsh写的。
反正当时感觉很神奇,就是一个vbs或者js文件,点了以后就出现个窗体,里面有好多类似vb的控件
好像一个正常的应用程序一样,可以执行。以前乱翻windows文件夹发现的,现在不记得怎么找了

#20


引用 18 楼 pctgl 的回复:
从你上面那堆代码来看,写这个dll应该没问题

那些vbs   主体内容是  录制 VBS做的  我只是在录制的基础上  改改而已   

#21