LibreOffice Basic Игнорирование "некоторых" моего типа... Определение конца типа

Я использую LibreOffice Версия: 4.4.3.2 ID сборки: 40m0(сборка:2) Язык: en_AU

У меня есть базовый модуль

В верхней части этого модуля, прежде чем любой суб или функции у меня есть

Type InitHeadings
    MySort_By As Integer
    MyCharacter As Integer
    MyInitiative As Integer
    MyRolled As Integer
    MyTotal As Integer
End Type

...

Global InitiativeColumn As New InitHeadings

Но когда я запускаю подпрограмму, устанавливаю точку останова и наблюдаю за объектом InitiativeColumn, отображаются только первые два поля.

Остальная часть моего кода, относящегося к этой структуре, как это называется в документации, приведена ниже. Я не упоминаю это нигде. Может кто-нибудь сказать мне, почему первые два будут работать, но не остальные? У меня есть две другие структуры в этом коде, и обе также игнорируют последние три поля. Это ошибка?

Sub Main
'Initialise Doc and Sheet Objects

Dim Doc As Object

Doc = ThisComponent
StatsSheet = Doc.Sheets.getByName("Stats")
InitiativeSheet = Doc.Sheets.getByName("Initiative")
CombatSheet = Doc.Sheets.getByName("Combat")


'LOAD HEADING NAMES
'Initiative Sheet
    For Column = 0 to 25 'Columns A to Z
        MyHeadingName = InitiativeSheet.getCellByPosition(Column,0).String
        Select Case MyHeadingName
        Case "Sort By"
            InitiativeColumn.MySort_By = Column
        Case "Character"
            InitiativeColumn.MyCharacter = Column
        Case "Initiative"
            InitiativeColumn.MyInitiative = Column
        Case "Rolled"
            InitiativeColumn.MyRolled = Column
        Case "Total"
            InitiativeColumn.MyTotal = Column
        End Select
    Next Column

End Sub


Sub MyInitiativeButton

'Iterate over a range of cells:
For Row = 1 To 25 'Rows 2 to 26
    'Column 3 is column D the "Rolled" column
    InitiativeSheet.getCellByPosition(InitiativeColumn.MyRolled,Row).VALUE = Roledice(1,20,0)
Next Row

End Sub

1 ответ

Решение

Это похоже на ошибку, и, кажется, было сообщено здесь. Проблема не возникала, когда я тестировал ее в более новой версии (LO 5.1.0.3).

Это только проблема для окна отладчика. Значения все еще там:

Sub TestStructs
    InitiativeColumn.MySort_By = 5
    InitiativeColumn.MyCharacter = 5
    InitiativeColumn.MyTotal = 5
    InitiativeColumn.DoesntExist = 5
End Sub

Этот код работает нормально до строки InitiativeColumn.DoesntExist = 5после чего он падает.

Теперь Global Проблема, которую вы упомянули в комментариях, действительно является проблемой. Учитывая стандартный совет программирования, что глобальные переменные плохие, я думаю, что было бы разумно рассмотреть альтернативы.

Вместо подпрограммы, не могли бы вы использовать функцию, которая возвращает InitiativeColumn? Если нет, то назначение переменной, как вы предложили, кажется приемлемым решением. Лично для макросов LO я предпочитаю Python или Java, так как у них есть классы.

Другие вопросы по тегам