2016-06-26 5 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 

을하지만 하위를 실행할 때, 중단 점과 '시계'첫 번째 두 개의 필드가 표시되는 InitiativeColumn 개체를 설정합니다.

enter image description here

구조체 문서가 그들을 호출로 관련된 내 코드의 나머지 부분은 다음과 같습니다. 나는 다른 곳에서는 그것을 언급하지 않는다. 아무도 왜 처음 두 가지가 작동하지만 나머지는 말할 수 있습니까? 이 코드에서는 두 개의 다른 구조체이 있고 두 필드 모두 마지막 세 필드를 무시합니다. 이거 버그 야?

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

이유가 무엇인지 아직 모르겠다.하지만 해결 방법을 찾았습니다. "Sacrifice1 As Integer", "Sacrifice2 As Integer", "Sacrifice3 As Integer" 마지막 3 가지 문제를 삭제하는 것. 그러나'InitiativeColumn'은'Global InitiativeColumn As New InitHeadings' 선언에도 불구하고 여전히 글로벌하지 않았다. 별도의 글로벌 변수'Global GlobalInitiativeColumn'을 선언하고'InitiativeColumn'을'GlobalInitiativeColumn = InitiativeColumn'으로 지정하면 GlobalInitiativeColumn이 Global으로 WAS되어 작동하는 것을 발견했습니다. –

답변

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 매크로를 위해서 나는 클래스를 가지고 있기 때문에 파이썬이나 자바를 선호한다.