Struct libreofficebasic忽略“;一些”;属于我的类型…结束类型定义
我使用的是LibreOffice版本:4.4.3.2构建ID:40m0(构建:2)语言环境:en_AU 我有一个基本模块 在本模块的顶部,在我有任何子模块或函数之前Struct libreofficebasic忽略“;一些”;属于我的类型…结束类型定义,struct,libreoffice-basic,Struct,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
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
它看起来像一个bug,而且似乎已经被报告过了。当我在更新版本(LO5.1.0.3)中测试它时,问题没有出现 这只是调试器窗口的一个问题。这些值仍然存在:
子测试结构
InitiativeColumn.MySort_By=5
InitiativeColumn.MyCharacter=5
InitiativeColumn.MyTotal=5
InitiativeColumn.DoesntExist=5
端接头
此代码工作正常,直到行InitiativeColumn.DoesntExist=5
,然后崩溃
现在,您在评论中提到的Global
问题确实是个问题。考虑到标准编程建议,我认为考虑备选方案是明智的。
您是否可以使用返回
InitiativeColumn
,而不是子例程?如果没有,那么按照您的建议分配变量似乎是一个可行的解决方法。就我个人而言,对于LO宏,我更喜欢Python或Java,因为它们都有类。这看起来像一个bug,而且似乎已经被报告过了。当我在更新版本(LO5.1.0.3)中测试它时,问题没有出现
这只是调试器窗口的一个问题。这些值仍然存在:
子测试结构
InitiativeColumn.MySort_By=5
InitiativeColumn.MyCharacter=5
InitiativeColumn.MyTotal=5
InitiativeColumn.DoesntExist=5
端接头
此代码工作正常,直到行InitiativeColumn.DoesntExist=5
,然后崩溃
现在,您在评论中提到的Global
问题确实是个问题。考虑到标准编程建议,我认为考虑备选方案是明智的。
您是否可以使用返回
InitiativeColumn
,而不是子例程?如果没有,那么按照您的建议分配变量似乎是一个可行的解决方法。就个人而言,对于LO宏,我更喜欢Python或Java,因为它们有类。我不知道为什么这个问题仍然存在,但我确实找到了解决办法:如果我添加三个额外的字段Sacrifice1作为整数
,Sacrifice2作为整数
,将3牺牲为整数
到每个结构这就解决了删除最后三个问题。然而,InitiativeColumn
仍然不是全局的,尽管将global InitiativeColumn作为新的initHeaders
声明。我发现,如果我声明了一个单独的全局变量GlobalInitiativeColumn
,并将InitiativeColumn
分配给它:GlobalInitiativeColumn=InitiativeColumn
,那么GlobalInitiativeColumn是全局的,并且有效。我不知道为什么这个问题仍然存在,但我确实找到了一个解决方法:如果我添加三个每个结构的附加字段Sacrifice1为整数
,Sacrifice2为整数
,Sacrifice3为整数
,这解决了删除最后三个问题。然而,InitiativeColumn
仍然不是全局的,尽管将global InitiativeColumn作为新的initHeaders
声明。我发现,如果我声明了一个单独的全局变量GlobalInitiativeColumn
,并将InitiativeColumn
分配给它:GlobalInitiativeColumn=InitiativeColumn
,那么GlobalInitiativeColumn是全局的,并且可以工作。