gpt4 book ai didi

vba - 检查文本框是否存在 vba(使用名称)

转载 作者:行者123 更新时间:2023-12-04 02:04:53 25 4
gpt4 key购买 nike

我正在使用 Ms-Access 并创建了一个用户窗体,上面有许多文本框。这些盒子被命名为:Box1,Box2,Box3 ...
我需要遍历所有框,但我不知道哪个是最后一个。为了避免遍历所有用户窗体控件,我想尝试以下方法:

For i =1 To 20

If Me.Controls("Box" & i).value = MyCondition Then
'do stuff
End If

Next i
Box6 出现此错误,这是第一个未找到的框。有没有办法捕获这个错误并在它发生时退出循环。
我知道我可以使用 On Error但我宁愿用代码来捕获这个特定的实例。
谢谢,
乔治

最佳答案

一个 Controls 集合是控件的简化集合(显然),并且与控件的放置顺序共享相同的顺序。

首先,即使是可创建的集合对象,也缺少 Exists 等方法。或 Contains ,因此您需要一个具有错误处理功能的函数来检查/从集合中提取小部件。

Public Function ExistsWidget(ByVal Name As String) As Boolean
On Error Resume Next
ExistsWidget = Not Me.Controls(Name) Is Nothing
On Error GoTo 0
End Function

如果您真的不喜欢“请求宽恕而不是许可”选项,您可以提取您的文本框的整个有序集合(和/或在另一个具有类似逻辑的循环中按名称检查存在性)。
Public Function PullBoxes() As Collection
Dim Control As MSForms.Control

Set PullBoxes = New Collection

For Each Control In Me.Controls
If TypeOf Control Is MSForms.TextBox And _
Left(Control.Name, 3) = "Box" Then
Call PullBoxes.Add(Control)
End If
Next
End Function

由于小部件的名称是唯一的 - 您可以返回 Dictionary从具有 (Control.Name, Control) 对的该函数中,并且能够正确地按名称检查小部件的存在,而没有错误抑制。
There's一个很好的指南 Dictionary如果这对您来说是一个新信息。

无论如何,无论您选择什么对象,如果用户(或代码)无法创建更多这样的文本框 - 您可以将其转换为 Function以上为 Static Property Get或只是到 Property GetStatic集合在里面,所以你只对所有控件迭代一次(例如,在 UserForm_Initialize 事件上)!
Public Property Get Boxes() As Collection
Static PreservedBoxes As Collection

'There's no loop, but call to PullBoxes to reduce duplicate code in answer
If PreservedBoxes Is Nothing Then _
Set PreservedBoxes = PullBoxes

Set Boxes = PreservedBoxes
End Property

毕竟最后创建的 TextBox有名字 Box*将会:
Public Function LastCreatedBox() As MSForms.TextBox
Dim Boxes As Collection

Set Boxes = PullBoxes

With Boxes
If .Count <> 0 Then _
Set LastCreatedBox = Boxes(.Count)
End With
End Function

我想现在事情对你来说更清楚了!干杯!

注意:所有代码绝对是表单的一堆方法/属性,因此所有东西都应该放在表单模块中。

关于vba - 检查文本框是否存在 vba(使用名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44257145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com