2016-06-26 3 views
1

私はLibreOfficeのバージョンを使用しています:4.4.3.2ビルドIDを:40m0を(ビルド:2)ロケール:en_AULibreOfficeの基本を無視し、「いくつかの」...エンド型定義

を私は基本モジュールを持っている

いずれかのサブまたは関数の前に、このモジュールの上部に

は私が

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 

を持っている。しかし、私はサブを実行すると、ブレークポイントと「時計」は最初の2つのフィールドが表示されInitiativeColumnオブジェクトを設定します。

enter image description here

この構造体ドキュメントは、それらを呼び出すように関連する私のコードの残りの部分は以下の通りです。私は他のどこにでも参照しません。最初の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 
+0

なぜ私は考えているのでしょうか?問題はまだありますが、私は回避策を見つけました:もし3つのフィールド「Sacrifice1 As Integer」、「Sacrifice2 As Integer」、「Sacrifice3 As Integer」最後の3つの問題を削除します。しかし、「InitiativeColumn」は、「Global InitiativeColumn As New InitHeadings」宣言にもかかわらず、まだグローバルではなかった。グローバル変数GlobalInitiativeColumnを宣言し、InitiativeColumnをInitInativeColumnに代入すれば、GlobalInitiativeColumn = InitiativeColumnとなりGlobalInitiativeColumnがWAS Globalになり、働いていました。 –

答えて

0

これはバグのように見え、hereと報告されているようです。この問題は、新しいバージョン(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の問題は本当に問題です。 global variables are badという標準的なプログラミングのアドバイスを考えると、私は選択肢を検討することが賢明だと思います。

InitiativeColumnを返すFunctionをサブルーチンの代わりに使用できますか?そうでない場合は、あなたが示唆したように変数を割り当てることは実行可能な回避策に見えます。個人的にはLOマクロのために私はPythonやJavaを好みます。

関連する問題