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, так как у них есть классы.