Тема: Почему расширенные данные только добавляются, а не редактируются?

Написал программу на VBA для работы с расширенными данными и заметил что расширенные данные только добавляются в коллекцию а не редактируются! При каждом редактировании создаются новые элементы наряду с существующими старыми, которые остаются без изменений (как версии разработки программы). В итоге чертёж может непредсказуемо увеличиться в размерах и никто не может узнать из-за чего! Это очень опасно! Помогите и научите с этим бороться! Как контролировать количество версий расширенных данных в AutoCAD?
Для больших подробностей привожу текст своей программы которая написана в модуле UserForm на котором имеются
1) TextBox3_НазваниеВыделенногоОбъекта
2) TextBox4_УровеньВложенности
3) SpinButton1_УровеньВложенности
4) TextBox5_КолвоУровнейВложенности
5) TextBox1_ДополнительныеДаные1000
6) TextBox2_ДополнительныеДанные1001
7) CommandButton3_ВыделитьОбъект
8) CommandButton1_OK
9) CommandButton2_Выход:

Option Explicit
Dim AcadObject As AcadObject
Dim BindXDataSelSet As AcadSelectionSet
Dim xtypeOut As Variant
Dim xdataOut As Variant
Dim BindXData1000 As String, BindXData1001 As String
Dim CountLevel As Long, NumLevel As Long
Private Sub CommandButton3_ВыделитьОбъект_Click()
Dim Point As Variant
On Error Resume Next
   ThisDrawing.SelectionSets("BindXDataSelSet").Delete
On Error GoTo ОбработкаОшибок
   Set BindXDataSelSet = ThisDrawing.SelectionSets.Add("BindXDataSelSet")
   Me.Hide
   BindXDataSelSet.SelectOnScreen
   Set AcadObject = BindXDataSelSet.Item(0)
   TextBox3_НазваниеВыделенногоОбъекта.Value = AcadObject.ObjectName
   AcadObject.GetXData "", xtypeOut, xdataOut
   If IsEmpty(xdataOut) Then
      MsgBox "Дополнительные данные отсутствуют!", vbInformation, НазваниеПрограммы
      BindXData1000 = ""
      BindXData1001 = ""
   Else
      CountLevel = (UBound(xdataOut) + 1) / 2
      TextBox5_КолвоУровнейВложенности.Value = CountLevel
      NumLevel = 1
      TextBox4_УровеньВложенности.Value = NumLevel
      Call ПолучитьДополнительныеДанныеЗаданногоУровняВложености(NumLevel)
   End If
   TextBox1_ДополнительныеДаные1000.Value = BindXData1000
   TextBox2_ДополнительныеДанные1001.Value = BindXData1001
   Me.Show
   MsgBox "Дополнительные данные уровня вложенности """ & NumLevel & """ прочитаны!", vbInformation, НазваниеПрограммы
   Exit Sub
ОбработкаОшибок:
   MsgBox "Произошла ошибка при получении дополнительных данных!" & vbLf & vbLf & _
          "Номер ошибки = " & Err.Number & vbLf & vbLf & _
          "Название ошибки: " & Err.Description, vbExclamation, НазваниеПрограммы
   Err.Clear
   Resume Next
End Sub
Sub ПолучитьДополнительныеДанныеЗаданногоУровняВложености(УровеньВложености As Long)
   If VBA.Len(xdataOut(2 * УровеньВложености - 2)) <> 0 Then
      BindXData1000 = xdataOut(2 * УровеньВложености - 2)
   Else
      BindXData1000 = ""
   End If
   If VBA.Len(xdataOut(2 * УровеньВложености - 1)) <> 0 Then
      BindXData1001 = xdataOut(2 * УровеньВложености - 1)
   Else
      BindXData1001 = ""
   End If
   If BindXData1000 & BindXData1001 = "" Then
      MsgBox "Дополнительные данные уровня вложености """ & УровеньВложености & """ не заданы (строки нулевой длины)!", vbInformation, НазваниеПрограммы
   End If
End Sub
Private Sub CommandButton1_OK_Click()
Dim intType(0 To 1) As Integer
Dim varVal(0 To 1) As Variant
On Error GoTo ОбработкаОшибок
   intType(0) = 1001
   intType(1) = 1000
   varVal(0) = TextBox1_ДополнительныеДаные1000.Text
   varVal(1) = TextBox2_ДополнительныеДанные1001.Text
   AcadObject.SetXData intType, varVal
   AcadObject.GetXData "", xtypeOut, xdataOut
   If IsEmpty(xdataOut) Then
      MsgBox "Дополнительные данные отсутствуют!", vbInformation, НазваниеПрограммы
      BindXData1000 = ""
      BindXData1001 = ""
   Else
      CountLevel = (UBound(xdataOut) + 1) / 2
      TextBox5_КолвоУровнейВложенности.Value = CountLevel
      NumLevel = CountLevel
      TextBox4_УровеньВложенности.Value = NumLevel
      Call ПолучитьДополнительныеДанныеЗаданногоУровняВложености(NumLevel)
   End If
   TextBox1_ДополнительныеДаные1000.Value = BindXData1000
   TextBox2_ДополнительныеДанные1001.Value = BindXData1001
   MsgBox "Дополнительные данные записаны!", vbInformation, НазваниеПрограммы
   Exit Sub
ОбработкаОшибок:
   MsgBox "Произошла ошибка при записи дополнительных данных!" & vbLf & vbLf & _
          "Номер ошибки = " & Err.Number & vbLf & vbLf & _
          "Название ошибки: " & Err.Description, vbExclamation, НазваниеПрограммы
   Err.Clear
   Resume Next
End Sub
Private Sub SpinButton1_УровеньВложенности_Change()
   NumLevel = SpinButton1_УровеньВложенности.Value
   ЗначениеДоИзмененения = TextBox4_УровеньВложенности.Text
   If NumLevel <> 0 And NumLevel <= CountLevel Then
      TextBox4_УровеньВложенности.Value = NumLevel
      SpinButton1_УровеньВложенности.Value = NumLevel
      Call ПолучитьДополнительныеДанныеЗаданногоУровняВложености(NumLevel)
      TextBox1_ДополнительныеДаные1000.Value = BindXData1000
      TextBox2_ДополнительныеДанные1001.Value = BindXData1001
'      MsgBox "Дополнительные данные уровня вложенности """ & NumLevel & """ прочитаны!", vbInformation, НазваниеПрограммы
   Else
      NumLevel = VBA.CLng(ЗначениеДоИзмененения)
      SpinButton1_УровеньВложенности.Value = NumLevel
   End If
End Sub
Private Sub TextBox4_УровеньВложенности_Enter()
   ЗначениеДоИзмененения = TextBox4_УровеньВложенности.Text
End Sub
Private Sub TextBox4_УровеньВложенности_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo ОбработкаОшибок
   TextBox4_УровеньВложенности.Value = ПолучитьЧисло(TextBox4_УровеньВложенности.Text)
   NumLevel = VBA.CLng(TextBox4_УровеньВложенности.Text)
   If NumLevel = 0 Then
      MsgBox "Ошибка! Номер уровня вложености не может быть равен нулю!", vbExclamation, НазваниеПрограммы
      TextBox4_УровеньВложенности.Text = ЗначениеДоИзмененения
   ElseIf NumLevel <= CountLevel Then
      NumLevel = CLng(TextBox4_УровеньВложенности.Text)
      SpinButton1_УровеньВложенности.Value = NumLevel
      Call ПолучитьДополнительныеДанныеЗаданногоУровняВложености(NumLevel)
      TextBox1_ДополнительныеДаные1000.Value = BindXData1000
      TextBox2_ДополнительныеДанные1001.Value = BindXData1001
      Me.Show
      MsgBox "Дополнительные данные уровня вложенности """ & NumLevel & """ прочитаны!", vbInformation, НазваниеПрограммы
   Else
      TextBox4_УровеньВложенности.Text = ЗначениеДоИзмененения
   End If
   NumLevel = VBA.CLng(TextBox4_УровеньВложенности.Text)
   Exit Sub
ОбработкаОшибок:
   MsgBox "Непонятная ошибка при вводе числа!" & vbLf & vbLf & _
          "Номер ошибки = " & Err.Number & vbLf & vbLf & _
          "Название ошибки: " & Err.Description, vbExclamation, НазваниеПрограммы
   TextBox4_УровеньВложенности.Value = VBA.CDbl(ЗначениеДоИзмененения)
   Resume Next
End Sub
Private Sub CommandButton2_Выход_Click()
   End
End Sub

Могу выслать модуль FRM в текстовом виде если это необходимо.

Re: Почему расширенные данные только добавляются, а не редактируются?

Не смог разобраться, что же полезного делает вышеприведённая програмка, и что такое уровень вложенности?
Структура расширенных данных и работа с ними очень просты. Два одномерных массива с одинаковым количеством элементов. Первый с  целочисленным типом элементов, второй - вариант.
Нулевой элемент первого массива =1001
Нулевой второго = ИмяПриложения
затем
первый элемент  первого массива - код типа данных
первый элемент  второго - данные
...
Записал
Прочитал с использованием  ИмяПриложения - получил массив данных и их типов.
Для удаления расширенных данных достаточно на запись подать массивы только с одним элементом - код 1001 и ИмяПриложения.
Если каждый раз менять ИмяПриложения, то тогда расширенные данные будут не пересекаясь друг с другом накапливаться и бережно храниться Автокадом.
Вот и всё.

Re: Почему расширенные данные только добавляются, а не редактируются?

ограничение на длину масива XDATA присутсвует.
Не помню какое, но много туда поместить не удасться.

Re: Почему расширенные данные только добавляются, а не редактируются?

> Sliver
16K. Только теме уже 4 года...