情况:我有一个Access表单,其中包含两个要填充的坐标字段。这些数字字段称为"纬度"和经度。"许多坐标被复制粘贴到这些字段中。这些坐标包含","对于小数,应该是"。"。如果不是,则会发生错误。
目标:能够使用复制粘贴更新我的表单而无需手动修改粘贴的字符串("," - >"。")。
我查找了纬度和经度字段的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代码中的replace命令必须在验证之前。怎么办?
答案 0 :(得分:1)
在您的经度和纬度字段中,转到事件属性并选择" ..."在AfterUpdate
事件的最右边。
将弹出一个窗口,询问您要使用的Builder类型。选择"代码生成器。"
将弹出VBE窗口并将光标放在Private Sub latitude_AfterUpdate()
之类的位置,其中latitude
将是表单上文本框的名称。在该行下方,粘贴以下代码:
Me!Latitude = Replace(Me!Latitude, ",", ".")
对Longitude执行相同操作,但请务必使用文本框的实际名称更新Me!Latitude
部分。
修改强>
由于您的表单控件似乎受到限制,因此我不认为您可以避免在复制/粘贴数据中存在逗号时引发的错误。以下是您可以做的事情:
创建两个新文本框。我打电话给他们LonEdit
和LatEdit
。创建它们时,从功能区拖动它们,不要使用"使用现有字段。"这应该是"控制源"属性为空,并应显示单词" Unbound"当表单处于设计视图中时,在文本框中。
接下来,转到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 = ""
完成后,尝试复制/粘贴到新文本框中,然后在完成后将其标记出来。这应该替换逗号并复制到旧文本框而不会抛出错误。不是很好的解决方案,但它是目前我能想到的最好的解决方案。祝你好运!