访问自动修改复制粘贴的 VBA 事件代码

Posted

技术标签:

【中文标题】访问自动修改复制粘贴的 VBA 事件代码【英文标题】:Access VBA event code which modifying copy-paste automaticly 【发布时间】:2017-10-11 13:43:10 【问题描述】:

情况:我有一个需要填写两个坐标字段的访问表单。这些数字字段称为“纬度”和“经度”。许多坐标被复制粘贴到这些字段中。这些坐标包含“,”,表示小数点应该是“。”。否则会报错。

目标:能够通过复制粘贴来更新我的表单,而无需手动修改粘贴的字符串(“,”-->“。”)。

我查找了纬度和经度字段的 VBA 事件代码。我试过=Replace([latitude];",";"."),但还是不行。

这是第一次尝试:

Private Sub latitude_OnDirty()
Me!latitude = Replace(Me!latitude, ",", ".")
End Sub

Private Sub longitude_OnDirty()
Me!longitude = Replace(Me!longitude, ",", ".")
End Sub

VBA 代码已被接受,但仍有错误消息:“输入的值对此字段无效。” MS Access 有效的插入类型。该字段是数字,任何带有“,”的插入都不能是数字。因此,VBA 代码中的替换命令必须在验证之前。怎么办?

【问题讨论】:

【参考方案1】:

在您的经度和纬度字段中,转到事件属性并选择AfterUpdate 事件最右侧的“...”。

将弹出一个窗口,询问您要使用哪种类型的 Builder。选择“代码生成器”。

VBE 窗口将弹出并将光标放在类似Private Sub latitude_AfterUpdate() 的下方,其中latitude 将是表单上文本框的名称。在该行下方,粘贴以下代码:

Me!Latitude = Replace(Me!Latitude, ",", ".")

对经度执行相同的操作,但确保使用文本框的实际名称更新 Me!Latitude 部分。

编辑:

由于您的表单控件似乎已绑定,我认为您无法避免复制/粘贴数据中存在逗号时引发的错误。您可以这样做:

创建两个新的文本框。我会打电话给他们LonEditLatEdit。创建它们时,将它们从功能区中拖动,不要使用“使用现有字段”。这应该使“控制源”属性为空,并且当表单处于设计视图时,应该在文本框中显示“未绑定”一词。

接下来,转到LonEdit 的事件属性并使用AfterUpdate 事件的代码生成器。

这是您应该在LonEdit_AfterUpdate 事件中插入的代码:

'Test for comma
If InStr(1, Me!LonEdit, ",")>0 Then
    'Replace comma with period and copy to old textbox
    Me!Longitude = Replace(Me!LonEdit, ",", ".")
Else
    'No comma, just copy to old textbox
    Me!Longitude = Me!LonEdit
End If
'Clear the new textbox
Me!LonEdit = ""

为新的纬度框做类似的事情:

'Test for comma
If InStr(1, Me!LatEdit, ",")>0 Then
    'Replace comma with period and copy to old textbox
    Me!Latitude = Replace(Me!LatEdit, ",", ".")
Else
    'No comma, just copy to old textbox
    Me!Latitude = Me!LatEdit
End If
'Clear the new textbox
Me!LatEdit = ""

完成后,尝试复制/粘贴到新的文本框中,然后在完成后将它们从标签中取出。这应该替换逗号并复制到旧文本框而不会引发错误。不是很好的解决方案,但这是我目前能想到的最好的解决方案。祝你好运!

【讨论】:

VBA 代码已被接受,但仍有错误消息:“输入的值对此字段无效。” MS Access 有效的插入类型。该字段是数字,任何带有“,”的插入都不能是数字!因此,VBA 代码中的替换必须在验证之前。怎么样? 这样的错误:s3.amazonaws.com/ssi-article-images/office2010/access2010/… 尝试将代码从AfterUpdate 事件移动到OnDirty 事件。 嗯,这些字段在表格或表单控件上是否有验证规则?另外,文本框的控件源属性是空白还是不空白? 没有字段验证规则。我没有添加任何表单控件。所以,我想没有。

以上是关于访问自动修改复制粘贴的 VBA 事件代码的主要内容,如果未能解决你的问题,请参考以下文章

vba代码求助,将修改区域复制到数组中?

VB中如何实现复制粘贴?

VBA自动过滤复制值,去重并粘贴到其他工作表中

编程vb.net clipboard 剪切复制粘贴

VBA - 复制粘贴单词表而不合并

用VBA编写复制功能,能不能只粘贴值,不粘贴格式