Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-07-01 Diskussionsfäden Wolfgang Jäth
Am 30.06.2020 um 20:56 schrieb Jörg Schmidt:
> 
>> -Original Message-
>> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
>> Sent: Tuesday, June 30, 2020 7:20 PM
>> To: users-de@openoffice.apache.org
>> Subject: Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"
> 
> Mir fallen beim Vergleich wiederum die schon genannten Zeilen auf, nämlich 
> ursprünglich:
> 
> oOutput = oSheet.getCellRangeByName (WMOutput)
> aOutput = oRange.getDataArray()
> 
> und jetzt:
> 
> oRange = oSheet.getCellRangeByName (SDOutput)
> aCellRange = oRange.getDataArray()
> 
> denn dort ist offensichtlich das der erste Code genau die von Dir 
> ursprünglich genannte Fehlermeldung ("Objektvariable nicht belegt") liefern 
> wird, weil oRange leer ist.

Hmpf; dass ich das nicht gesehen habe ... :-(((

Sorry; danke.

Wolfgang
-- 
Donald Trump ist ein großer Visionär, der seiner Zeit weit voraus ist:
Er verbreitet schon jetzt den Slogan "make America great again", obwohl
dieser erst in der Ära /nach/ ihm seine volle Bedeutung entfalten wird.


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



RE: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-30 Diskussionsfäden Jörg Schmidt


> -Original Message-
> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
> Sent: Tuesday, June 30, 2020 7:20 PM
> To: users-de@openoffice.apache.org
> Subject: Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

Mir fallen beim Vergleich wiederum die schon genannten Zeilen auf, nämlich 
ursprünglich:

oOutput = oSheet.getCellRangeByName (WMOutput)
aOutput = oRange.getDataArray()

und jetzt:

oRange = oSheet.getCellRangeByName (SDOutput)
aCellRange = oRange.getDataArray()

denn dort ist offensichtlich das der erste Code genau die von Dir ursprünglich 
genannte Fehlermeldung ("Objektvariable nicht belegt") liefern wird, weil 
oRange leer ist.

Ich würde also im ursprünglichen Code ändern auf:

oOutput = oSheet.getCellRangeByName (WMOutput)
aOutput = oOutput.getDataArray()

und wenn es damit läuft, war das der Fehler.

Wenn es hingegen weiterhin nicht läuft, dann nenne bitte die nun auftretenden 
Probleme.


Gruß
Jörg


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-30 Diskussionsfäden Wolfgang Jäth
Am 30.06.2020 um 08:20 schrieb Jörg Schmidt:
>
>> Ich hab jetzt die Funktion mal vollständig gelöscht, und nochmal 
>> komplett neu aufgebaut; irgendwie muss ich ja mal weiter 
>> kommen. Und siehe da, 
>> sie funktioniert einwandfrei ... :-/
>> 
>> Wolfgang, der aber trotzdem wissen möchte, was das los war
> 
> Dann solltest Du zweckmäßigerweise die neue Funktion hier posten, denn die 
> Beteiligten hier auf der Liste sehen gemeinsam leichter den Unterschied zur 
> bisherigen Version, den Du u.U. übersiehst, weil es nur eine Kleinigkeit ist.

Einige Kleinigkeiten mögen anders sein (Namen, die Cost-Deklarationen
hab ich raus gezogen), aber die prinzipielle Grundstruktur ist die selbe:

sub WriteMatrix (vMatrix As Variant)
Dim currRow, currCol, myDigits As Integer
Dim aCellRange, myValue As Variant
Dim oSheet, oRange As Object
oSheet = thisComponent.getCurrentController.getActiveSheet

If IsLog >= 1 Then
oSheet.getCellRangeByName (SDLog).String = sLogFile
End If

oRange = oSheet.getCellRangeByName (SDOutput)
aCellRange = oRange.getDataArray()

For currRow = SDValueMin To SDValueMax
For currCol = SDValueMin To SDValueMax
myValue = vMatrix (currRow, currCol, SDValue)
If myValue > 0 Then
aCellRange (currRow)(currCol) = myValue
Else
myDigits = CountBits (vMatrix (currRow, 
currCol, SDNumbers))
Select Case myDigits
Case 1
aCellRange (currRow)(currCol) = 
Options2Bits (vMatrix (currRow,
currCol, SDNumbers))
Case Else
aCellRange (currRow)(currCol) = 
Options2String (vMatrix (currRow,
currCol, SDNumbers), myDigits)
End Select
End If
Next
'   :   :   :
'   :   :   :
Next
oRange.setDataArray (aCellRange)
End Sub ' WriteMatrix

Wolfgang
-- 
Donald Trump ist ein großer Visionär, der seiner Zeit weit voraus ist:
Er verbreitet schon jetzt den Slogan "make America great again", obwohl
dieser erst in der Ära /nach/ ihm seine volle Bedeutung entfalten wird.


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



RE: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-30 Diskussionsfäden Jörg Schmidt
> -Original Message-
> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
> Sent: Monday, June 29, 2020 8:17 PM
> To: users-de@openoffice.apache.org
> Subject: Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"
> 
> Am 29.06.2020 um 16:59 schrieb Wolfgang Jäth:
> 
> Ich hab jetzt die Funktion mal vollständig gelöscht, und nochmal 
> komplett neu aufgebaut; irgendwie muss ich ja mal weiter 
> kommen. Und siehe da, 
> sie funktioniert einwandfrei ... :-/
> 
> Wolfgang, der aber trotzdem wissen möchte, was das los war

Dann solltest Du zweckmäßigerweise die neue Funktion hier posten, denn die 
Beteiligten hier auf der Liste sehen gemeinsam leichter den Unterschied zur 
bisherigen Version, den Du u.U. übersiehst, weil es nur eine Kleinigkeit ist.


Gruß
Jörg




-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Wolfgang Jäth
Am 29.06.2020 um 16:59 schrieb Wolfgang Jäth:

Ich hab jetzt die Funktion mal vollständig gelöscht, und nochmal
komplett neu aufgebaut; irgendwie muss ich ja mal weiter kommen. Und siehe da,
sie funktioniert einwandfrei ... :-/

Wolfgang, der aber trotzdem wissen möchte, was das los war
-- 
Donald Trump ist ein großer Visionär, der seiner Zeit weit voraus ist:
Er verbreitet schon jetzt den Slogan "make America great again", obwohl
dieser erst in der Ära /nach/ ihm seine volle Bedeutung entfalten wird.


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



RE: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Jörg Schmidt
> -Original Message-
> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
> Sent: Monday, June 29, 2020 4:59 PM
> To: users-de@openoffice.apache.org
> Subject: Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"
> 
> Am 29.06.2020 um 13:38 schrieb Jörg Schmidt:
> >> Und was ich da angegeben habe, *ist* der relevante Code. 
> > 
> > Tut mir leid, aber das kann nicht stimmen, weil z.B. 
> Schleifen fehlen, Variablen-Inhalte fehlen (z.B. kann niemand 
> errarten was der Inhalt von "WMOutput" ist /wenn es eine 
> Variable ist, ist kein Inhalt angegeben, wenn es der Name 
> eines benannten Bereiches wäre, fehlen die "") und weil es 
> auch nicht stimmen kann das: "Aber gut, kleiner Test, direkt 
> davor folgende Zeilen eingefügt:", denn das hiesse ja der 
> Inhalt für aMatrix würde zugewiesen bevor aMatrix deklariert wird.
> 
> AMatrix wird in anderen Funktionen zusammengestellt und soll hier
> ausgegeben werden. Aber wenn du mir nicht glaubst, dass der 
> Code "drum herum" 
> dir nicht weiter helfen wird,

Warum sollte ich das nicht glauben, ss ging darum das der Code nicht 
vollständig wsr, was auch Bernd aufgefallen war.

nun zum Code:

im ersten Post schreibst Du:

"Bereits beim ersten Durchgang liefert mir die obige Zeile aber den
Basic-Laufzeitfehler "Objektvariable nicht belegt". Dürfte eigentlich
nicht sein, die *sind* alle belegt; definitiv."

und ich bekomme diesen Fehler ebenfalls.

Allerdings ist das beim jetzt von Dir übermittelten Code auch erklärlich:

oOutput = oSheet.getCellRangeByName (WMOutput)
aOutput = oRange.getDataArray()

denn dort ist oRange ohne Inhalt. In Deinem ersten Post wurde im Code hingegen 
auf oOutput Bezug genommen:

oOutput = oSheet.getCellRangeByName (WMOutput)
aOutput = oOutput.getDataArray()

Vielleicht liegt also nur ein Flüchtigkeitsfehler vor (oRange statt oOutput), 
der Dir nicht ins Auge fiel?



Gruß
Jörg


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Wolfgang Jäth
Am 29.06.2020 um 11:37 schrieb Bernd Obermayr:
> Am 29.06.20 um 08:34 schrieb Wolfgang Jäth:
>> | oOutput = oSheet.getCellRangeByName (WMOutput)
> Hi,
> ist WMOutput eine Variable oder Konstante?

Letzters, ja.

> Wenn das ein Bereichsname ist müsste der doch quotiert sein oder?
> 
> oOutput = oSheet.getCellRangeByName ("WMOutput")

Nein, es handelt sich um eine Stringkonstante ("K1:S9").

Wolfgang
-- 
Donald Trump ist ein großer Visionär, der seiner Zeit weit voraus ist:
Er verbreitet schon jetzt den Slogan "make America great again", obwohl
dieser erst in der Ära /nach/ ihm seine volle Bedeutung entfalten wird.


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Wolfgang Jäth
Am 29.06.2020 um 13:38 schrieb Jörg Schmidt:
>> Und was ich da angegeben habe, *ist* der relevante Code. 
> 
> Tut mir leid, aber das kann nicht stimmen, weil z.B. Schleifen fehlen, 
> Variablen-Inhalte fehlen (z.B. kann niemand errarten was der Inhalt von 
> "WMOutput" ist /wenn es eine Variable ist, ist kein Inhalt angegeben, wenn es 
> der Name eines benannten Bereiches wäre, fehlen die "") und weil es auch 
> nicht stimmen kann das: "Aber gut, kleiner Test, direkt davor folgende Zeilen 
> eingefügt:", denn das hiesse ja der Inhalt für aMatrix würde zugewiesen bevor 
> aMatrix deklariert wird.

AMatrix wird in anderen Funktionen zusammengestellt und soll hier
ausgegeben werden. Aber wenn du mir nicht glaubst, dass der Code "drum herum"
dir nicht weiter helfen wird, bitte (inklusive dem notwendigsten *zu* dem
"drum rum"; wie ich schon schrub, steht /viel/ irrelevantes dazwischen):

Const SDValueMin As Integer = 1
Const SDValueMax As Integer = 9
Const SDVCheckMin As Integer = 0
Const SDVCheckMax As Integer = 15
Const SDDataMin As Integer = 0
Const SDDataMax As Integer = 5
Const SDMatrix As Integer = 1
Const SDRanges As Integer = 2
Const SDScopes As Integer = 3
Const SDValue As Integer = 4
Const SDNumbers As Integer = 5
Const SDMaxLoops As Integer = 9
'   :   :   :
'   :   :   :
Const SDLog As String = "X1"
Const IsLog As Integer = 1
Dim sLogFile As String


Sub Calculate
'==
Dim myData (SDMatrix To SDScopes) As Variant
Dim currLoop, myAlterations As Integer

Clear

ShowStep ("0.InitRanges")
myData (SDRanges) = InitRanges

ShowStep ("0.InitScopes")
myData (SDScopes)  = InitScopes

ShowStep ("0.ReadMatrix")
myData (SDMatrix) = ReadMatrix

ShowStep ("0.Numbers")
CheckNumbers (myData)

sLogFile = ""
currLoop = SDMaxLoops
Do
currLoop = currLoop - 1

ShowStep (SDMaxLoops-currLoop & ".Singles")
myAlterations = CheckSingles (myData)

ShowStep (SDMaxLoops-currLoop & ".Triples")
myAlterations = myAlterations + CheckTriplets (myData)

ShowStep (SDMaxLoops-currLoop & ".Options")
myAlterations = myAlterations + CheckOptions (myData)

ShowStep (SDMaxLoops-currLoop & ".UpsideDown")
myAlterations = myAlterations + CheckUpsides (myData)
Loop Until (myAlterations <= 0) OR (currLoop <= 0)

Verify (myData)

WriteMatrix (myData (SDMatrix))
End Sub


Sub WriteMatrix (aMatrix As Variant)
Const WMOutput As String = "K1:S9"
Const WMCheckpoints As String = "AA1:AP9"
Dim currRow, currCol, myDigits As Integer
Dim aOutput, myValue As Variant
Dim oSheet, oOutput As Object
oSheet = thisComponent.getCurrentController.getActiveSheet

If IsLog >= 1 Then
oSheet.getCellRangeByName (SDLog).String = sLogFile
End If

oOutput = oSheet.getCellRangeByName (WMOutput)
aOutput = oRange.getDataArray()

For currRow = SDValueMin To SDValueMax
For currCol = SDValueMin To SDValueMax
myValue = aMatrix (currRow, currCol, SDValue)
If myValue > 0 Then
aOutput (currRow)(currCol) = myValue
Else
myDigits = CountBits (aMatrix (currRow, 
currCol, SDNumbers))
Select Case myDigits
Case 1
aOutput (currRow)(currCol) = 
Options2Bits (aMatrix (currRow,
currCol, SDNumbers))
Case 2 To 6
aOutput (currRow)(currCol) = 
Options2String (aMatrix (currRow,
currCol, SDNumbers), 6)
Case Else
aOutput (currRow)(currCol) = 
Options2String (aMatrix (currRow,
currCol, SDNumbers), 11)
End Select
End If
Next
For currCol = SDVCheckMin To SDVCheckMax
'   :   :   :
'   :   :   :
Next
Next
oOutput.setDataArray (aOutput)
End Sub


Function ReadMatrix As Variant
Const RMInput As String = "A1:I9"   
Dim currRow, currCol As Integer
Dim aMatrix (SDValueMin To SDValueMax, SDValueMin To SDValueMax,
SDDataMin To SDDataMax) As Integer
Dim aInput, myValue As Variant
Dim oSheet, oInput As Object
oSheet = thisComponent.getCurrentController.getActiveSheet

oInput = oSheet.getCellRangeByName (RMInput)
aInput = oInput.getDataArray()
'   :   :   :
'   :   

RE: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Jörg Schmidt
> -Original Message-
> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
> Sent: Monday, June 29, 2020 11:24 AM
> To: users-de@openoffice.apache.org
> Subject: Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

> > Variant gilt als Dateityp der alle anderen Typen 
> enthält[1]. Eine als Variant deklarierte Variable wird den 
> Typ annehmen der dem Inhalt entspricht der ihr zugewiesen wird, z.B.:
> 
> Jein; das Beobachterfenster wird bei Variant als Typ normalerweise
> "Variant/Integer" oder "Variant/String" usw. angeben; bei Objekten
> scheint es aber nicht "Variant/Object" sondern /nur/ "Object" 
> an zu geben.
> 
> > Dim x As Variant
> > x = "abc"
> > MsgBox TypeName(x) 'String
> > x = 1.23
> > MsgBox TypeName(x) 'Double
> > 
> > [1]
> > das ist eine Besonderheit und nicht selbstredend so, denn 
> obwohl z.B. eine Long-Variable als erweiterte 
> Integer-Variable verstanden werden könnte, 
> 
> Nein; 

doch

> Long ist ein *eigenständiger* Datentyp, so wie String, 
> oder Double
> usw.

Eben, darum geht es.

> 
> >> Bereits beim ersten Durchgang liefert mir die obige Zeile [...]
> > 
> > bitte gib den vollständigen Code an, denn zumindest ich 
> blicke nicht durch
> 
> Da steht zu viel hierfür irrelevantes dazwischen; ich hab 
> jedenfalls auf
> der betreffenden Zeile die Variablen alle überprüft, die sind 
> in Ordnumg.
> 
> Und was ich da angegeben habe, *ist* der relevante Code. 

Tut mir leid, aber das kann nicht stimmen, weil z.B. Schleifen fehlen, 
Variablen-Inhalte fehlen (z.B. kann niemand errarten was der Inhalt von 
"WMOutput" ist /wenn es eine Variable ist, ist kein Inhalt angegeben, wenn es 
der Name eines benannten Bereiches wäre, fehlen die "") und weil es auch nicht 
stimmen kann das: "Aber gut, kleiner Test, direkt davor folgende Zeilen 
eingefügt:", denn das hiesse ja der Inhalt für aMatrix würde zugewiesen bevor 
aMatrix deklariert wird.

Aber ich will das nicht vertiefebn. Ich wollte helfen und stellte dazu die 
selbstverständliche Frage nach vollständigem Code, wenn das nicht geht, geht es 
eben nicht.


Gruß
Jörg


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Bernd Obermayr
Am 29.06.20 um 08:34 schrieb Wolfgang Jäth:
> | oOutput = oSheet.getCellRangeByName (WMOutput)
Hi,
ist WMOutput eine Variable oder Konstante?
Wenn das ein Bereichsname ist müsste der doch quotiert sein oder?

oOutput = oSheet.getCellRangeByName ("WMOutput")

-- 
Gruss
  Bernd

-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



Re: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Wolfgang Jäth
Am 29.06.2020 um 09:54 schrieb Jörg Schmidt:
> Hallo, 
> 
>> -Original Message-
>> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
>> Sent: Monday, June 29, 2020 8:34 AM
>> To: users-de@openoffice.apache.org
>> Subject: [Basic] Laufzeitfehler "Objektvariable nicht belegt"
>> 
>> Hi, 
>> 
>> ich hab da gerade ein kleines Verständnisproblem. Eigentlich möchte
>> ich (in einer Schleife) die Anweisung
>> 
>> | aOutput(currRow)(currCol) = Options2String (aMatrix 
>> (currRow, currCol, 
>> SDNumbers))
>> 
>> ausführen. Die einzelnen Variablen sind folgendermaßen definiert 
>> (und nachweislich auch sinnvoll belegt):
>> 
>> | Dim aMatrix (0 To 9, 0 To 9, 0 To 5) As Integer
>> | Dim currRow, currCol As Integer
>> | Dim aOutput As Variant
>> | Dim oSheet, oOutput As Object
>> | oSheet = thisComponent.getCurrentController.getActiveSheet
>> | oOutput = oSheet.getCellRangeByName (WMOutput)
>> | aOutput = oOutput.getDataArray()
>> 
>> Das Beobachterfenster zeigt mir aMatrix als 'Integer(0 To 9, 
>> 0 To 9, 0 To 5)',
>> wie es sein soll, und aOutput als 'Object(0 To 9)'; etwas merkwürdig,
>> weil eigentlich definiert als Variant, aber ist auch an 
>> anderen Stellen so
>> (und fonktioniert dort auch).
> 
> Variant gilt als Dateityp der alle anderen Typen enthält[1]. Eine als Variant 
> deklarierte Variable wird den Typ annehmen der dem Inhalt entspricht der ihr 
> zugewiesen wird, z.B.:

Jein; das Beobachterfenster wird bei Variant als Typ normalerweise
"Variant/Integer" oder "Variant/String" usw. angeben; bei Objekten
scheint es aber nicht "Variant/Object" sondern /nur/ "Object" an zu geben.

> Dim x As Variant
> x = "abc"
> MsgBox TypeName(x) 'String
> x = 1.23
> MsgBox TypeName(x) 'Double
> 
> [1]
> das ist eine Besonderheit und nicht selbstredend so, denn obwohl z.B. eine 
> Long-Variable als erweiterte Integer-Variable verstanden werden könnte, 

Nein; Long ist ein *eigenständiger* Datentyp, so wie String, oder Double
usw.

>> Bereits beim ersten Durchgang liefert mir die obige Zeile [...]
> 
> bitte gib den vollständigen Code an, denn zumindest ich blicke nicht durch

Da steht zu viel hierfür irrelevantes dazwischen; ich hab jedenfalls auf
der betreffenden Zeile die Variablen alle überprüft, die sind in Ordnumg.

Und was ich da angegeben habe, *ist* der relevante Code. Im Prinzip
handelt es sich, wie dargestellt, um eine reine Umkopieraktion.
Weggelassen hab ich lediglich die verschiedenen FOR-Schleifen und
Fallabfragen drum rum, denn die geben nun wirklich keine weiteren
Hinweise. Intern wird nur mit Integer gerechnet, ausgegeben werden diese
Integer-Werte teilweise direkt, teilweise als String aufbereitet (hier
Darstellung in Form von Bitmustern). Aber auch diese Konvertierung
selbst ist nicht entscheidend. Einzig die Zuweisung selbst, egal mit
welchem Typ (bis auf einen), macht irgendwie Probleme. Das hab ich ja
über die Variablen i1-i5 durchgeprüft.

Wolfgang
-- 
Donald Trump ist ein großer Visionär, der seiner Zeit weit voraus ist:
Er verbreitet schon jetzt den Slogan "make America great again", obwohl
dieser erst in der Ära /nach/ ihm seine volle Bedeutung entfalten wird.


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



RE: [Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Jörg Schmidt
Hallo, 

> -Original Message-
> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
> Sent: Monday, June 29, 2020 8:34 AM
> To: users-de@openoffice.apache.org
> Subject: [Basic] Laufzeitfehler "Objektvariable nicht belegt"
> 
> Hi, 
> 
> ich hab da gerade ein kleines Verständnisproblem. Eigentlich möchte
> ich (in einer Schleife) die Anweisung
> 
> | aOutput(currRow)(currCol) = Options2String (aMatrix 
> (currRow, currCol, 
> SDNumbers))
> 
> ausführen. Die einzelnen Variablen sind folgendermaßen definiert 
> (und nachweislich auch sinnvoll belegt):
> 
> | Dim aMatrix (0 To 9, 0 To 9, 0 To 5) As Integer
> | Dim currRow, currCol As Integer
> | Dim aOutput As Variant
> | Dim oSheet, oOutput As Object
> | oSheet = thisComponent.getCurrentController.getActiveSheet
> | oOutput = oSheet.getCellRangeByName (WMOutput)
> | aOutput = oOutput.getDataArray()
> 
> Das Beobachterfenster zeigt mir aMatrix als 'Integer(0 To 9, 
> 0 To 9, 0 To 5)',
> wie es sein soll, und aOutput als 'Object(0 To 9)'; etwas merkwürdig,
> weil eigentlich definiert als Variant, aber ist auch an 
> anderen Stellen so
> (und fonktioniert dort auch).

Variant gilt als Dateityp der alle anderen Typen enthält[1]. Eine als Variant 
deklarierte Variable wird den Typ annehmen der dem Inhalt entspricht der ihr 
zugewiesen wird, z.B.:

Dim x As Variant
x = "abc"
MsgBox TypeName(x) 'String
x = 1.23
MsgBox TypeName(x) 'Double

[1]
das ist eine Besonderheit und nicht selbstredend so, denn obwohl z.B. eine 
Long-Variable als erweiterte Integer-Variable verstanden werden könnte, 
"enthält" eine Long-Variable nicht _den Typ_ Integer, Schaue Dir das 
untereschiedliche Verhalten an:

Dim x As Variant
x = 123
MsgBox TypeName(x) 'Integer

Dim y As Long
y = 123
MsgBox TypeName(y) 'Long!



> Bereits beim ersten Durchgang liefert mir die obige Zeile [...]

bitte gib den vollständigen Code an, denn zumindest ich blicke nicht durch



Gruß
Jörg



-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org



[Basic] Laufzeitfehler "Objektvariable nicht belegt"

2020-06-29 Diskussionsfäden Wolfgang Jäth
Hi,

ich hab da gerade ein kleines Verständnisproblem. Eigentlich möchte
ich (in einer Schleife) die Anweisung

| aOutput(currRow)(currCol) = Options2String (aMatrix (currRow, currCol,
SDNumbers))

ausführen. Die einzelnen Variablen sind folgendermaßen definiert
(und nachweislich auch sinnvoll belegt):

| Dim aMatrix (0 To 9, 0 To 9, 0 To 5) As Integer
| Dim currRow, currCol As Integer
| Dim aOutput As Variant
| Dim oSheet, oOutput As Object
| oSheet = thisComponent.getCurrentController.getActiveSheet
| oOutput = oSheet.getCellRangeByName (WMOutput)
| aOutput = oOutput.getDataArray()

Das Beobachterfenster zeigt mir aMatrix als 'Integer(0 To 9, 0 To 9, 0 To 5)',
wie es sein soll, und aOutput als 'Object(0 To 9)'; etwas merkwürdig,
weil eigentlich definiert als Variant, aber ist auch an anderen Stellen so
(und fonktioniert dort auch).

Bereits beim ersten Durchgang liefert mir die obige Zeile aber den
Basic-Laufzeitfehler "Objektvariable nicht belegt". Dürfte eigentlich
nicht sein, die *sind* alle belegt; definitiv.

Aber gut, kleiner Test, direkt davor folgende Zeilen eingefügt:

| Dim i1, i2, i3, i4, i5 as Variant 
| i1 = aMatrix (currRow, currCol, SDNumbers)
| i2 = Options2String (aMatrix (currRow, currCol))
| i3 = aOutput(currRow)
| i4 = i3(currCol)
| i5 = aOutput(currRow-1)(currCol-1)
| aOutput(currRow)(currCol) = i1
| aOutput(currRow)(currCol) = i2
| aOutput(currRow)(currCol) = i3
| aOutput(currRow)(currCol) = i4
| aOutput(currRow)(currCol) = i5

Das liefert für
- i1 den Typ Variant/Integer (soll auch sein)
- i2 den Typ Variant/String ( -"- )
- i3 den Typ Variant(0 To 8) ( -"- )
- i4 den Typ Variant/String ( -"- )
- i5 den Typ Variant/String ( -"- )
- alle "aOutput()() = ..." - außer bei "= i3" - den Laufzeitfehler
"Objektvariable nicht belegt"

Hä? Ich kann das Element auslesen (Beweis: i4, i5), aber nicht
beschreiben (bzw. nur mit einem Array)ßßßscharfesSscharfesSscharfesS

Sogar

| aOutput(currRow)(currCol) = 5
| aOutput(currRow)(currCol) = "sdf"

liefern beide den gleichen Fehler. Interssanterweise liefert jedoch

| aOutput(currRow)(currCol) = aMatrix (currRow, currCol, SDValue)

den Fehler "Falsche Verwendung für ein Objekt". Und das alles vor dem
Hintergrund, dass an anderen Stellen z. B. folgender Code durchaus einwandfrei
funktioniert (dewegen hab ich ihn ja schließlich von dort her kopiert):

| Dim currRow, currCol As Integer
| Dim aCellRange As Variant
| Dim oSheet, oRange As Object
| oSheet = thisComponent.getCurrentController.getActiveSheet
| oRange = oSheet.getCellRangeByName (TSIRange)
| aCellRange = oRange.getDataArray()
|   :
| aCellRange (currRow)(currCol) = Options2List (aPlainRange (currCol,
currRow), true)

Also eigentlichgenau das gleiche; auch da wird übrigens aCellRange als
'Object(...)' angegeben.

Spinn jetzt *ich*, oder das /Programm/? Oder hab ich Tomaten auf den
Augen, und seh irgend etwas entscheidendes nicht?

Wolfgang, momentan ratlos
-- 
Donald Trump ist ein großer Visionär, der seiner Zeit weit voraus ist:
Er verbreitet schon jetzt den Slogan "make America great again", obwohl
dieser erst in der Ära /nach/ ihm seine volle Bedeutung entfalten wird.


-
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org