Unten steht der vereinfachte Code, der lediglich den String "A7" im Feld A7 voraussetzt, diesen auf verschiedene Weisen ausgibt und danach sucht.
Verwendet wird
aSheetA1 = oSheetA1.getCellRangeByPosition(0,0,60,999).getDataArray
Dabei ist mir aufgefallen:
1. Die Index-Syntax aSheetA1(6)(0) wird in Sub myPrint verstanden, in Main nicht (Syntaxfehler: Dimensionsangaben passen nicht zueinander)
2. Die Index-Syntax aSheetA1(6,0) wird in Main und myPrint verstanden, in Function MyMatchInCol führt sie zu einem Laufzeitfehler, Objektvariable nicht belegt
3. Die ungewöhnliche Syntax aSheetA1(6,dummy)(0) wird an allen drei Stellen verstanden und liefert korrekte Ergebnisse.
Kann mir das freundlicherweise jemand erklären?
Für einen zusätzlichen Tipp, wie man das Array auf die Größe des benutzten Tabellenbereichs begrenzen kann, wäre ich auch dankbar.
Code: Alles auswählen
Global Const dummy = 0
'arrays holding sheets
Global aSheetA1(0 to 60, 0 to 999) As String
Sub Main
'sheets
oSheetA1 = thisComponent.getSheets.getByName( "Tabelle1" )
'get sheets into arrays
aSheetA1 = oSheetA1.getCellRangeByPosition(0,0,60,999).getDataArray
'access field A7
print "Main 1",aSheetA1(6,dummy)(0) 'ok, but why?
'print "Main 2",aSheetA1(6)(0) 'Syntaxfehler: Dimensionsangaben passen nicht zueinander
print "Main 3",aSheetA1(6,0) 'ok here
myPrint(aSheetA1)
print "Wert A7 in Spalte A gefunden in Zeile",MyMatchInCol(aSheetA1,0,"A7")+1
End Sub
Sub myPrint (aSheet)
print "myPrint 1",aSheet(6,dummy)(0) 'ok, but why?
print "myPrint 2",aSheet(6)(0) 'ok here
print "myPrint 3",aSheet(6,0) 'ok here
End Sub
Function MyMatchInCol(aSheet,iCol,sValue)
found = 0
ret = 0
for row = 0 To 999
if aSheet(row)(iCol) = sValue then 'ok
'if aSheet(row,iCol) = sValue then 'Laufzeitfehler,Objektvariable nicht belegt
'if aSheet(row,dummy)(iCol) = sValue then 'ok, but why?
found = 1
ret = row
exit for
end if
next row
if found = 0 then
print sValue,"not found in column",iCol
end if
MyMatchInCol = ret
End Function