将代码放入VBA Userform而不是"普通"模块中是否有缺点?
这可能是一个简单的问题,但我在搜索Web和stackoverflow时没有找到一个确定的答案.
背景:我正在Excel-VBA中开发数据库的前端应用程序.要选择不同的过滤器,我有不同的用户形式.我问一般的程序设计更好:(1)将控制结构放入单独的模块中或(2)将下一个用户形式或操作的代码放入用户窗体中.
让我们举个例子.我有一个Active-X按钮,可以触发我的过滤器和表单.
Variant1:模块
在CommandButton中:
Private Sub CommandButton1_Click()
call UserInterfaceControlModule
End Sub
Run Code Online (Sandbox Code Playgroud)
在模块中:
Sub UserInterfaceControllModule()
Dim decisionInput1 As Boolean
Dim decisionInput2 As Boolean
UserForm1.Show
decisionInput1 = UserForm1.decision
If decisionInput1 Then
UserForm2.Show
Else
UserForm3.Show
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
在变体1中,控制结构在正常模块中.关于下一个要显示哪个userform的决定与userform分开.决定下一个要显示的用户表单所需的任何信息都必须从用户表单中提取.
Variant2:Userform
在CommadButton中:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Run Code Online (Sandbox Code Playgroud)
在Userform1中:
Private Sub ToUserform2_Click()
UserForm2.Show
UserForm1.Hide
End Sub
Private Sub UserForm_Click()
UserForm2.Show
UserForm1.Hide
End Sub
Run Code Online (Sandbox Code Playgroud)
在变体2中,控制结构直接在用户表单中,每个用户表单都有关于它后面的内容的说明.
我已经开始使用方法2进行开发.如果这是一个错误,并且这个方法有一些严重的缺点,我想早点知道它.
我有以下问题:
我有一个带有Material Properties的Oracle数据库,我正在为它开发Excel-VBA的前端.
有一个视图ALL_TESTS,它代表我要从中加载数据表中所有属性的整个表.确切地说,我得到了一个属性列表,每个属性在特定条件下使用特定条件进行测量,并带有样本状态.对于公司的一个材料,我总是希望加载整个包装.
如果我这样做:
SELECT * FROM ALL_TESTS WHERE COMPANY in (Company1, Company2, ...)
AND MATERIAL (Material1,Material2, ... )
AND Test in (Test1,Test2, ...)
AND Property in (Property1, Property2, ...)
AND Condition in (Condition1, Condition2, ...)
AND State in (State1,State2, ...)
Run Code Online (Sandbox Code Playgroud)
我不仅会得到我想要的测试,还会记录索引彼此不匹配的位置.例如,当记录与company1,material2,test3,property4和State2匹配时.但这不是我想要的,我想要以下内容:
SELECT * FROM ALL_TESTS WHERE (COMPANY = Company1
AND MATERIAL = Material1
AND Test = Test1
AND Property = Property1
AND Condition = Condition1
AND State = State1)
OR (COMPANY = Company2
AND MATERIAL = Material2
AND …
Run Code Online (Sandbox Code Playgroud) 下面的代码仅运行两次。不知道为什么会这样。
a=[1,2,3,4]
count=0
for letter in a:
print(letter)
b=a.pop()
count+=1
print("total loop count is "+str(count))
Run Code Online (Sandbox Code Playgroud)
我希望循环应该运行四次。如果我注释/删除line b=a.pop()
,则循环运行四次。
我希望程序退出循环后计数的打印数应该是四,但是计数的实际输出打印数是2。