Ms access MS访问更改';OnChange';VBA中的事件编程
我正在从事一个项目,在这个项目中,我必须使用MS Access,并且我必须使数据库尽可能松散(这很奇怪,我不认为是最佳做法,但就目前我的资源而言,这就是我所拥有的) 无论如何,我有50个组合框,但经常不得不对其中一个进行更改,这意味着我必须手动更改所有组合框。我宁愿花一个小时找到一个编程解决方案,然后花5分钟手动完成 我需要使用VBA更改“OnChange”事件,但我的代码产生错误Ms access MS访问更改';OnChange';VBA中的事件编程,ms-access,vba,Ms Access,Vba,我正在从事一个项目,在这个项目中,我必须使用MS Access,并且我必须使数据库尽可能松散(这很奇怪,我不认为是最佳做法,但就目前我的资源而言,这就是我所拥有的) 无论如何,我有50个组合框,但经常不得不对其中一个进行更改,这意味着我必须手动更改所有组合框。我宁愿花一个小时找到一个编程解决方案,然后花5分钟手动完成 我需要使用VBA更改“OnChange”事件,但我的代码产生错误 Private Function RunChangePropagate() Dim combo As Co
Private Function RunChangePropagate()
Dim combo As ComboBox
RevealGrid
For Each combo In Me.Controls
combo.OnChange = "=ComboBox_Change()"
Next combo
ClearGrid
End Function
错误:
我还尝试将文本更改为变体,然后将事件分配给所述变体
我该怎么做呢
提前感谢。这是一个最简单的示例,可以使用:
Public Sub ChangeEvent()
Dim ctrl As Control
For Each ctrl In Me.Controls
If ctrl.Name = "Combo5" Then
Debug.Print ctrl.OnChange
ctrl.OnChange = "SomeProcedure"
End If
Next ctrl
End Sub
在您的示例中,您应该只删除分配中的=
。不需要指定子项末尾的括号。使用WithEvents。通过这种方式,表单与控制表单的类(某些控件)完全“分离”
我发表了一篇文章,其中包含链接和一个供任何人学习的示例:
主代码(代码隐藏模块和类模块)仅为:
以及:
完整代码也在GitHub上:假设错误出现在
combo.OnChange=“=ComboBox\u Change()”
,尝试将此行编辑到MsgBox combo.OnChange
以查看分配\u Change
事件的正确格式。这就是我所需要的!我猜我的版本不喜欢这样,我是专门找组合框的。我几乎只是修改了If语句,说明名称是否包含单词“Combo”,因为我对所有框都有命名约定。
Option Explicit
' Helper class for form Palette for event handling of textboxes.
' 2017-04-19. Gustav Brock, Cactus Data ApS, CPH.
' Version 1.0.0
' License: MIT.
' *
Private Const EventProcedure As String = "[Event Procedure]"
Private WithEvents ClassTextBox As Access.TextBox
Public Sub Initialize(ByRef TextBox As Access.TextBox)
Set ClassTextBox = TextBox
ClassTextBox.OnClick = EventProcedure
End Sub
Public Sub Terminate()
Set ClassTextBox = Nothing
End Sub
Private Sub ClassTextBox_Click()
' Select full content.
ClassTextBox.SelStart = 0
ClassTextBox.SelLength = Len(ClassTextBox.Value)
' Display the clicked value.
ClassTextBox.Parent!CopyClicked.Value = ClassTextBox.Value
' Copy the clicked value to the clipboard.
DoCmd.RunCommand acCmdCopy
End Sub
Option Explicit
' Form to display the Windows Phone 7.5/8.0 colour theme.
' Also works as a basic example of implementing WithEvents for a form.
' 2017-04-19. Gustav Brock, Cactus Data ApS, CPH.
' Version 1.0.0
' License: MIT.
' *
Private ControlCollection As Collection
Private Sub Form_Load()
' Load events for all colour value textboxes.
Dim EventProcedure As ClassTextboxSelect
Dim Control As Access.Control
Set ControlCollection = New Collection
For Each Control In Me.Controls
If Control.ControlType = acTextBox Then
Set EventProcedure = New ClassTextboxSelect
EventProcedure.Initialize Control
ControlCollection.Add EventProcedure, Control.Name
End If
Next
Set EventProcedure = Nothing
Set Control = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Unload events for all colour value textboxes.
Dim EventProcedure As ClassTextboxSelect
For Each EventProcedure In ControlCollection
EventProcedure.Terminate
Next
Set EventProcedure = Nothing
Set ControlCollection = Nothing
End Sub