Kein Zugriff auf Objekt. Falsche Verwendung des Objektes
Moderator: Moderatoren
Kein Zugriff auf Objekt. Falsche Verwendung des Objektes
Hallo,
ich habe einen komischen Fehler mit meinem Makro, ich Programmiere es an einem PC und es geht ohne Probleme.
Wenn ich das Makro dann auf einen anderen PC installiere und Starte, kommt der Fehler "Kein Zugriff auf Objekt. Falsche Verwendung des Objektes"
Woran kann das liegen?
ich habe einen komischen Fehler mit meinem Makro, ich Programmiere es an einem PC und es geht ohne Probleme.
Wenn ich das Makro dann auf einen anderen PC installiere und Starte, kommt der Fehler "Kein Zugriff auf Objekt. Falsche Verwendung des Objektes"
Woran kann das liegen?
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
Windows XP Professional SP3 x86
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Kein Zugriff auf Objekt. Falsche Verwendung des Objektes
Ohne das Makro und den fehlerwerfenden Befehl zu kennen:MikeRo hat geschrieben:Woran kann das liegen?
* an den Sicherheitseinstellungen des zweiten PCs (Extras>Optionen...>OpenOffice.org>Sicherheit>Makrosicherheit)
* an auf beiden PCs unterschiedlichen Pfaden
* an unterschiedlichen Programmversionen
* an sonstwas Unterschiedliches
Merke: bei Fragen immer OOo Version, Betriebssystem, ggfs. Datenbank angeben
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Kein Zugriff auf Objekt. Falsche Verwendung des Objektes
An dem PC an dem ich Programmiere habe ich die OpenOffice Version 3.3komma4 hat geschrieben:Ohne das Makro und den fehlerwerfenden Befehl zu kennen:MikeRo hat geschrieben:Woran kann das liegen?
* an den Sicherheitseinstellungen des zweiten PCs (Extras>Optionen...>OpenOffice.org>Sicherheit>Makrosicherheit)
* an auf beiden PCs unterschiedlichen Pfaden
* an unterschiedlichen Programmversionen
* an sonstwas Unterschiedliches
Merke: bei Fragen immer OOo Version, Betriebssystem, ggfs. Datenbank angeben
Auf dem anderen PC war 3.2 und wieder auf einem anderen 3.1...
Nachdem ich auf die 3.3 geupdatet habe, ging das Makro wieder. Trotzdem sehr komisch das ganze.
Hier hast du mal einen Auszug des Codes (Der ganze ist noch mal 5 mal so lang.)
Code: Alles auswählen
rem-----------------------------------------------------------------------------------------------------------------------------------------------
rem-------------------------------------------------------------------------------------------DB Rabattüberschriften auslesen und Spalten erzeugen
rem-----------------------------------------------------------------------------------------------------------------------------------------------
Sub AnzahlRabattUeberschriften
Dim aData(0)
Dim aLine(0)
oPrepStatement = oCon.prepareCommand(VorhandeneRabatte,2)
oResult = oPrepStatement.executeQuery
aColumns = oPrepStatement.Columns.ElementNames
nColumnCount = UBound(aColumns)
ReDim aLine(nColumnCount)
ReDim aData(0)
aData(0) = aColumns
nUpperBoundary = 0
Do While oResult.Next
nUpperBoundary = UBound(aData)+1
ReDim Preserve aData(nUpperBoundary)
rem-----------------------------------------------------------------------------------------------------------Rabattüberschrift aus DB in Tabelle
s = oResult.getString(1)
RabattUeberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+nUpperBoundary,9)
RabattUeberschrift.String = s
RabattUeberschrift.isTextWrapped = TRUE
rem-------------------------------------------------------------------------------------------------------Rabattwert aus DB unter die Überschrift
z = oResult.getString(2)
Prozentsatz = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+nUpperBoundary,10)
Prozentsatz.Value = z
Prozentsatz.NumberFormat = 11
Loop
AnzahlRabatte = nUpperBoundary
rem-------------------------------------------------------------------------------------------------------Schreiben der Rabattwerte in die Tabelle
rem-----------------------------------------------------------------------------------------------------------------------------------------------
For i = 1 to AnzahlRabatte
myCell = oSheet.getCellByPosition(LetzteSpalte+i,10)
myValue = (mycell.Value)*100
aPercentage = Replace(myValue,",",".")
Call SQL
oPrepStatement = oCon.prepareCommand(Rabatte,2)
oResult = oPrepStatement.executeQuery
aColumns = oPrepStatement.Columns.ElementNames
nColumnCount = UBound(aColumns)
ReDim aLine(nColumnCount)
ReDim aData(0)
aData(0) = aColumns
nUpperBoundary = 0
Do While oResult.Next()
nUpperBoundary = UBound(aData)+1
ReDim Preserve aData(nUpperBoundary)
s = oResult.getString(1)
RabattWert = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+i,10+nUpperBoundary)
RabattWert.Value = s
Loop
Next i
rem----------------------------------------------------------------------------------------Einfügen der Formeln für die Rabatte & der Rabattsummen
rem-----------------------------------------------------------------------------------------------------------------------------------------------
'LetzteSpalte = 11
For x = 1 to AnzahlRabatte
For i = 1 to Positionen
mycell = oSheet.getCellByPosition(LetzteSpalte+1,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname = oColumn+ltrim(str(11))
cellname3 = oColumn
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname2 = oColumn
myCell = oSheet.getCellByPosition(LetzteSpalte+1,10+i)
myValue = mycell.Value
RabattFormel = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+i)
Code: Alles auswählen
If MyValue = 0 Then
RabattFormel.Value = 0
RabattFormel.NumberFormat = 107
Else
RabattFormel.FormulaLocal = "=" & cellname2 & i+11 & "*" & cellname & ""
RabattFormel.NumberFormat = 107
End If
Next i
LetzteSpalte = LetzteSpalte+2
mycolumns = oSheet.getcolumns
mycolumns.insertbyindex(LetzteSpalte,1)
For i = 1 to Positionen
RabattSummen = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte,10+i)
RabattSummen.FormulaLocal = "=" & cellname2 & i+11 & "-" & cellname3 & i+11
RabattSummen.NumberFormat = 107
Next i
Next x
LetzteSpalte = LetzteSpalte
'MsgBox LetzteSpalte 17
'MsgBox AnzahlRabatte 3
rem------------------------------------------------------------------------------------------------------Überschriften für die Rabattsummenspalten
rem-----------------------------------------------------------------------------------------------------------------------------------------------
Ueberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte,9)
Ueberschrift.String = "Agentur-" & chr(13) & "netto"
Ueberschrift.isTextWrapped = TRUE
Ueberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte-2,9)
Ueberschrift.String = "Kunden-" & chr(13) & "netto"
Ueberschrift.isTextWrapped = TRUE
If AnzahlRabatte > 2 Then
x = LetzteSpalte - 2*AnzahlRabatte
For i = 1 to AnzahlRabatte-2
Ueberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(x+i*2,9)
Ueberschrift.String = "Zwischen-" & chr(13) & "summe"
Ueberschrift.isTextWrapped = TRUE
Next i
EndIf
rem---------------------------------------------------------------------------------------------------------------------Skonto Spalten und Formeln
rem-----------------------------------------------------------------------------------------------------------------------------------------------
Call SQL
oStatement = oCon.createStatement()
oResult = oStatement.executeQuery(SkontoDatum)
IF NOT ISNULL(oResult) THEN
Do while oResult.Next
SkontoD = oResult.getString(1)
Loop
End If
oPrepStatement = oCon.prepareCommand(Skonto,2)
oResult = oPrepStatement.executeQuery
aColumns = oPrepStatement.Columns.ElementNames
nColumnCount = UBound(aColumns)
ReDim aLine(nColumnCount)
ReDim aData(0)
aData(0) = aColumns
nUpperBoundary = 0
Do While oResult.Next()
nUpperBoundary = UBound(aData)+1
ReDim Preserve aData(nUpperBoundary)
s = oResult.getString(1)
RabattWert = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+nUpperBoundary)
RabattWert.Value = s
Loop
Ueberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,9)
'Ueberschrift.String = "Skonto (Bei Voraus-" & chr(13) & "zahlung bis zum " & chr(13) & SkontoD & ")"
Ueberschrift.String = "Skonto*" & chr(13) & "(" & SkontoD & ")"
Ueberschrift.isTextWrapped = TRUE
Prozentsatz = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10)
Prozentsatz.Value = s
Prozentsatz.NumberFormat = 11
Ueberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+2,9)
Ueberschrift.String = "Rechnungs- netto"
Ueberschrift.isTextWrapped = TRUE
For i = 1 to Positionen
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname = oColumn
FuerTKP = cellname
mycell = oSheet.getCellByPosition(LetzteSpalte+1,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname2 = oColumn
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname3 = oColumn
myCell = oSheet.getCellByPosition(LetzteSpalte+1,10+i)
myValue = mycell.Value
RabattFormel = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+i)
If MyValue = 0 Then
RabattFormel.Value = 0
RabattFormel.NumberFormat = 107
Else
RabattFormel.FormulaLocal = "=" & cellname & i+11 & "*" & cellname2 & "11"
RabattFormel.NumberFormat = 107
End If
RabattSummen = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+2,10+i)
RabattSummen.FormulaLocal = "=" & cellname3 & i+11 & "-" & cellname2 & i+11
RabattSummen.NumberFormat = 107
Next i
mycell = oSheet.getCellByPosition(LetzteSpalte+2,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
RechNett = oColumn
Call SummenFormeln
End Sub
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
Windows XP Professional SP3 x86
Re: Kein Zugriff auf Objekt. Falsche Verwendung des Objektes
Hallo
bin ja selbst noch Makro-Anfänger, aber dennoch möcht ich dir antworten. Zumal mir da noch ein paar Dinge aufgefallen sind.
Und wie kommst Du darauf das es die Variable betrifft?
Zur sicherheit würde ich dir aber empfehlen, Variablen am Makroanfang zu deklarieren. Hatte nämlich selber vor kurzem das Problem, dass eine Datei hier bei mir unter OOo 3.2.1 fehlerfrei lief, jedoch aber unter OOo 3.3.0 nicht. Der Grund war schnell gefunden. Variablen a, b und c waren nicht deklariert. Und nachdem ich sie deklariert hatte, gabs keine Probleme mehr.
Der Makroanfang sah dann wie folgt aus.
Und in diesem deinem Falle würde ich vorschlagen.
Meine Erfahrung diesbezüglich war: OOo 3.3.0 nimmt es sehr genau mit der Variablendeklaration. Und wenn da eine fehlt, kann es schon mal zu Problemen kommen. Auch wenn Du unter der eben genannten Version programmiert hast, so solltest Du auf die Variablendeklaration achten.
Wie oft willst Du denn das noch schreiben?
Ich sage es mal so.
Mehr als 2 mal, dann komprimieren. Und zwar gehst Du am besten so vor.
Dann sehen deine Codezeilen beispielsweise nicht mehr so aus
sondern so.
Ich find das sieht etwas übersichtlicher aus.
Wäre es nicht vielleicht sinnvoler erst das Zellformat (NumberFormat) zu setzen, und dann die Formel eintragen? Ist nur mal so eine Überlegung. Und außerdem bin ich wirklich am Grübeln ob es auf die Reihenfolge drauf ankommt.
Ist das wirklich so gut?
Was hälst Du denn von folgendem?
Diese Zeilen hast Du ja auch mehr als einmal. Auch das würd ich vereinfachen und übersichtlicher machen.
Das an den Makroanfang.
Und dann dort wo Du es brauchst nur noch das.
Das sind nur einfache Vorschläge meinerseits, die sich vielleicht auch noch verbessern ließen.
Ach ja, noch eins.
Es reicht ganz einfach: SummenFormeln
Das Call brauchst Du nicht, ist überflüssig.
Gruß
balu
bin ja selbst noch Makro-Anfänger, aber dennoch möcht ich dir antworten. Zumal mir da noch ein paar Dinge aufgefallen sind.
Und wie lautete der Fehler denn jetzt genau?kommt der Fehler "Kein Zugriff auf Objekt. Falsche Verwendung des Objektes"
[...]
RabattFormel = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+i) Hier war der Fehler bei der Variablen LetzteSpalte
Und wie kommst Du darauf das es die Variable betrifft?
Zur sicherheit würde ich dir aber empfehlen, Variablen am Makroanfang zu deklarieren. Hatte nämlich selber vor kurzem das Problem, dass eine Datei hier bei mir unter OOo 3.2.1 fehlerfrei lief, jedoch aber unter OOo 3.3.0 nicht. Der Grund war schnell gefunden. Variablen a, b und c waren nicht deklariert. Und nachdem ich sie deklariert hatte, gabs keine Probleme mehr.
Der Makroanfang sah dann wie folgt aus.
Code: Alles auswählen
Sub ...
Dim a as object
Dim b as object
Dim c as object
Code: Alles auswählen
Dim LetzteSpalte as Integer
Code: Alles auswählen
oDoc.sheets.getByName("Angebot")
Ich sage es mal so.
Mehr als 2 mal, dann komprimieren. Und zwar gehst Du am besten so vor.
Code: Alles auswählen
Sub blablabla
Dim oBlattAngebot as Object
oBlattAngebot = oDoc.sheets.getByName("Angebot")
Code: Alles auswählen
RabattUeberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+nUpperBoundary,9)
RabattFormel = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+i)
Code: Alles auswählen
RabattUeberschrift = oBlattAngebot.getCellByPosition(LetzteSpalte+nUpperBoundary,9)
RabattFormel = oBlattAngebot.getCellByPosition(LetzteSpalte+1,10+i)
Code: Alles auswählen
RabattFormel.FormulaLocal = "=" & cellname2 & i+11 & "*" & cellname & ""
RabattFormel.NumberFormat = 107
Code: Alles auswählen
LetzteSpalte = LetzteSpalte+2
mycolumns = oSheet.getcolumns
mycolumns.insertbyindex(LetzteSpalte,1)
Was hälst Du denn von folgendem?
Code: Alles auswählen
mycolumns = oSheet.getcolumns
mycolumns.insertbyindex(LetzteSpalte+2,1)
Code: Alles auswählen
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname = oColumn
FuerTKP = cellname
mycell = oSheet.getCellByPosition(LetzteSpalte+1,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname2 = oColumn
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname3 = oColumn
Das an den Makroanfang.
Code: Alles auswählen
Dim mycell1 as Object
Dim mycell2 as Object
Dim mycell3 as Object
Dim oColumn1 as Object
Dim oColumn2 as Object
Dim oColumn3 as Object
mycell1 = oSheet.getCellByPosition(LetzteSpalte,11)
mycell2 = oSheet.getCellByPosition(LetzteSpalte+1,11)
mycell3 = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn1 = mycell1.getColumns.getByIndex(0).getName()
oColumn2 = mycell2.getColumns.getByIndex(0).getName()
oColumn3 = mycell3.getColumns.getByIndex(0).getName()
Code: Alles auswählen
cellname = oColumn1
FuerTKP = cellname
cellname2 = oColumn2
cellname3 = oColumn3
Hast Du das auf mehrere Module aufgeteilt? Soll nämlich besser sein, und außerdem erhöht es die Übersichtlichkeit.Hier hast du mal einen Auszug des Codes (Der ganze ist noch mal 5 mal so lang.)
Ach ja, noch eins.
Code: Alles auswählen
Call SummenFormeln
Das Call brauchst Du nicht, ist überflüssig.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
