2

我正在使用 LibreOffice 版本:4.4.3.2 构建 ID:40m0(Build: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
4

1 回答 1

0

它看起来像一个错误,并且似乎已在此处报告。当我在较新版本(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,因为它们有类。

于 2016-06-27T14:40:02.873 回答