0

我正在使用以下脚本从一层中获取地块和地址信息,以填充新创建要素的属性表。

没有返回错误,但我遇到的问题是recordselect函数的内存中似乎有错误的信息。无论我在哪里放置一个点,它都会给出相同的包裹编号和地址。或者它实际上并没有正确执行 IF 功能。

Sub Address

Dim rsCurrentXY
Set rsCurrentXY = Map.Layers("Violations").records
rsCurrentXY.movelast
Dim objXYShape
Set objXYShape = rsCurrentXY.Fields.Shape
Dim pControls
Set pControls= Application.Map.selectionlayer.Forms("EDITFORM").Pages(“PAGE1”).Controls
Dim rsGrid
' Find corresponding map page to the valve point
Set rsGrid = Map.Layers("ACPA_parcels").records
rsGrid.movefirst

Do While Not rsGrid.eof
If rsGrid.fields.shape.Ispointin(objXYShape) Then
pControls("txtAddress").value = rsGrid.Fields("ADD1").Value

Exit Do
End If
rsGrid.Movenext
Loop


' Clean Up
Set rsCurrentXY = Nothing
Set objXYShape = Nothing
Set rsGrid = Nothing
End Sub

(我有另一个名为“PIN”的子程序可以做同样的事情。)当检查员激活自定义表单中各自的编辑框时,我会调用它们。

感谢您的帮助,罗伯特

4

1 回答 1

0

通过 Application.Map.selectionlayer.Forms("EDITFORM") 访问 EDITFORM 会有问题。每当使用 EDITFORM 上的控件时,您都应该使用 ThisEvent.Object 来发现所有对象。例如,如果您的事件处理程序是 Page_OnLoad,那么 ThisEvent.Object 将引用您的当前页面。你应该有这样的代码:

Dim pPage1
Set pPage1 = ThisEvent.Object
Dim pControls
Set pControls = pPage1.Controls
于 2012-08-29T05:58:34.810 回答