小编Luc*_*nda的帖子

将代码放入Userforms而不是模块是否有缺点?

将代码放入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进行开发.如果这是一个错误,并且这个方法有一些严重的缺点,我想早点知道它.

excel user-interface vba userform

22
推荐指数
1
解决办法
2358
查看次数

WHERE(条件组)OR(第二组条件)或......优雅地写

我有以下问题:

我有一个带有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)

sql oracle excel vba excel-vba

1
推荐指数
1
解决办法
65
查看次数

直到列表的末尾索引才会运行for循环

下面的代码仅运行两次。不知道为什么会这样。

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。

python

0
推荐指数
1
解决办法
78
查看次数

标签 统计

excel ×2

vba ×2

excel-vba ×1

oracle ×1

python ×1

sql ×1

user-interface ×1

userform ×1