Метод Names. Item (Excel)

Автор Denis_Oleynikof, 27 августа 2020, 12:00

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

Denis_Oleynikof

Добрый день, всем.
С макросами в LibreOffice работаю недавно.
Подскажите, в vba вот такая конструкция
    Dim curWorkBook As Workbook
    Set curWorkBook = ThisWorkbook

    Dim reportSheet As Worksheet
    Set reportSheet = curWorkBook.Worksheets("Отчет")

    Dim curTableName As Name
    Set curTableName = reportSheet.Names.Item("mySortRange")

в LO на последней строке вылетает в ошибку
"Type: com.sun.star.container.NoSuchElementException
Message: "

Как все же переменной присвоить объект name?

sokol92

Можно так (с теми же именами переменных):

Sub Test
  Dim curWorkBook
  Set curWorkBook = ThisComponent

  Dim reportSheet
  Set reportSheet = curWorkBook.getSheets.GetByName("Отчет")

  Dim curTableName
  Set curTableName = reportSheet.NamedRanges.getByName("mySortRange")
End Sub
Владимир.

Denis_Oleynikof


mikekaganski

Цитата: Denis_Oleynikof от 27 августа 2020, 12:00
    Dim curWorkBook As Workbook
    Set curWorkBook = ThisWorkbook

    Dim reportSheet As Worksheet
    Set reportSheet = curWorkBook.Worksheets("Отчет")

    Dim curTableName As Name
    Set curTableName = reportSheet.Names.Item("mySortRange")

в LO на последней строке вылетает в ошибку
"Type: com.sun.star.container.NoSuchElementException
Message: "

У меня работает нормально:
С уважением,
Михаил Каганский

sokol92

#4
Добрый день, Михаил!
Во вложении к Вашему сообщению имя mySortRange относится к (Scope) документу, а не к листу "Отчет", как в исходном сообщении.
Владимир.

mikekaganski

Цитата: sokol92 от 27 августа 2020, 12:55
а не к листу "Отчет", как в исходном сообщении.

Хе, я пересмотрел исходное сообщение, и снова не увидел тестового документа, в котором не так. ;)
Но спасибо за уточнение - посмотрю в таком режиме.
С уважением,
Михаил Каганский

sokol92

 Я имел в виду код VBA. Прошу прощения за неясность высказываний. :)
Владимир.

mikekaganski

#7
Так ведь в коде VBA как раз нет информации, к какому типу именованного диапазона происходит обращение. Только какой метод используется. Это ортогональные понятия, так ведь?

В любом случае это баг. Нужен багрепорт. Обход - это не решение.
С уважением,
Михаил Каганский

sokol92

#8
Цитата: Denis_Oleynikof от 27 августа 2020, 12:00Set curTableName = reportSheet.Names.Item("mySortRange")

ReportSheet имеет тип Worksheet, соответственно мы обращаемся к свойству Worksheet.Names.

У меня стойкое ощущение (основанное на опыте последних месяцев), что путь с поддержкой VBA Excel в полном объеме еще не пройден и наполовину.
Владимир.

mikekaganski

Цитата: sokol92 от 27 августа 2020, 13:15что путь с поддержкой VBA Excel в полном объеме

... это утопия. Однако ненаписание багов, когда они обнаруживаются - это путь в обратном направлении.
С уважением,
Михаил Каганский

sokol92

#10
Я  - за отчеты о багах. А где-нибудь можно почитать про "VBA" - объекты, кроме как здесь?
Владимир.

mikekaganski

Цитата: sokol92 от 27 августа 2020, 13:49
А где-нибудь можно почитать про "VBA" - объекты, кроме как здесь?

Боюсь, это снова "неясность высказываний" :P - и конечно, так и хочется ответить ссылками на здесь и здесь.

Но если контекст вопроса - исходный код поддержки VBA конкретно в Calc - то только там, где Вы правильно нашли...
С уважением,
Михаил Каганский

sokol92

Владимир.

mikekaganski

@sokol92, если захотите исправить - помогу с оформлением патча. Напишите номер бага, я отправлю туда code pointers. (Это всего лишь просмотрено при реализации sheet-local named ranges в версии 3.4.)
С уважением,
Михаил Каганский

sokol92

Михаил, спасибо за доверие, к исправлениям я не готов. Пока буду публиковать найденные баги.
Владимир.