2

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 オブジェクトを「監視」すると、最初の 2 つのフィールドのみが表示されます。

ここに画像の説明を入力

ドキュメントがそれらを呼び出すため、この構造体に関連する残りのコードは以下のとおりです。私はそれを他のどこにも参照しません。最初の2つは機能するが、残りは機能しない理由を誰か教えてもらえますか? このコードには他に 2 つの構造体があり、どちらも最後の 3 つのフィールドを無視します。これはバグですか?

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 に答える