Помогите разобраться в макросе.

Автор Андрей008, 17 октября 2024, 21:55

0 Пользователи и 1 гость просматривают эту тему.

Андрей008

Чат GPT дал такой макрос
Sub StartToSheet()

  ' Получаем доступ к диалоговому окну
  Dim oDlg As Object
  oDlg = LoadDialog("Standard", "Start", DialogLibraries)
  If Not IsNull(oDlg) Then

    ' Получаем ссылки на текстовые окна (используйте свойство Controls)
   
    Dim oText1 As Object
    oText1 = oDlg.GetControl("Text1")
    Dim oText2 As Object
    oText2 = oDlg.GetControl("Text2")
    Dim oText3 As Object
    oText3 = oDlg.GetControl("Text3")
    Dim oText4 As Object
    oText4 = oDlg.GetControl("Text4")
    Dim oText5 As Object
    oText5 = oDlg.GetControl("Text5")
    Dim oText6 As Object
    oText6 = oDlg.GetControl("Text6")

    ' Получаем ссылку на текущий лист
    Dim oSheet As Object
    oSheet = ThisComponent.Sheets.getByName("ЖУРНАЛ") ' Замените "Sheet1" на имя вашего листа

    ' Определяем начальную строку для записи
    Dim oRange As Object
    oRange = oSheet.getCellRangeByName("B6") ' Получаем диапазон по имени
   

    ' Записываем данные из текстовых окон в таблицу
    oSheet.getCellByPosition(1, iRow).String = oText1.Text
    oSheet.getCellByPosition(2, iRow).String = oText2.Text
    oSheet.getCellByPosition(3, iRow).String = oText3.Text
    oSheet.getCellByPosition(4, iRow).String = oText4.Text
    oSheet.getCellByPosition(5, iRow).String = oText5.Text
    oSheet.getCellByPosition(6, iRow).String = oText6.Text

    ' Увеличиваем строку для следующей записи
    iRow = iRow + 1

    ' Закрываем диалоговое окно
    oDlg.Endexecute()
  End If

End Sub

Когда процедура доходит до oSheet.getCellByPosition(1, iRow).String = oText1.Text выдает ошибку (Ошибка времени выполнения Basic. Объектная переменная не установлена.)

еще пробовал проверить пошагово MsgBox но он выводит пустоту когда по идеи должен выдать значения переменной например oText1

Novernor

увидеть бы сам файл, но возможно дело в том что iRow не инициализирована попробуй добавить
Dim iRow As Integer
iRow = oRange.StartRow
перед этим блоком
    ' Записываем данные из текстовых окон в таблицу
    oSheet.getCellByPosition(1, iRow).String = oText1.Text
    oSheet.getCellByPosition(2, iRow).String = oText2.Text
    oSheet.getCellByPosition(3, iRow).String = oText3.Text
    oSheet.getCellByPosition(4, iRow).String = oText4.Text
    oSheet.getCellByPosition(5, iRow).String = oText5.Text
    oSheet.getCellByPosition(6, iRow).String = oText6.Text

mikekaganski

Цитата: Novernor от 18 октября 2024, 07:29возможно дело в том что iRow не инициализирована

В Basic не бывает неинициализированных переменных. В зависимости от типа переменной, без явного присвоения она будет иметь значение для типа по умолчанию. В случае getCellByPosition, куда передаётся iRow, ожидается целое число - так что ошибка "Объектная переменная не установлена" не может появиться оттуда.

Цитата: Андрей008 от 17 октября 2024, 21:55пробовал проверить пошагово MsgBox но он выводит пустоту когда по идеи должен выдать значения переменной например oText1

Ну так Вы ответили сами себе. oText1 пустой - как можно пытаться из него извлекать Text? А вот почему oText1 = oDlg.GetControl("Text1") даёт не то, что Вы ожидаете - это главный вопрос. И тут главное -

Цитата: Novernor от 18 октября 2024, 07:29увидеть бы сам файл
С уважением,
Михаил Каганский