Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Wenn Du es so ausgetestet hast wird das so sein, ich kann momentan garnichts KOnkretes dazu sagen.
In http://www.galileocomputing.de/1941 steht auf SEite 264 der grundsätzlche Vorschlag ein Makro was unter MS Excel und OOo Calc funktionieren soll so aufzubauen das einer der Funktionsteile in einer Fehlerbehandlungsroutine gekapselt wird. (Um Seite 264 einzusehen gib in in der dortigen Volltextsuche "Basic-IDE" ein (ohne Anführungszeichen) und wähle dann aus der ERgebnisliste SEite 264. Hinweis: Die verwendung von "Basic-IDE" als Suchwort ist kein Geheincode, es geht nur um ein Suchwort welches signifikannt für die SEite ist, da es nicht möglich ist einen statischen Link für die SEite anzugeben.)
Sub Generate()
On Error Goto xls
Dim oDlg As Object
oDlg = CreateUnoDialog(DialogLibraries.Standard.Config)
oDlg.getControl("TextBox1").SetText ("123")
oDlg.execute()
Exit Sub
xls:
Config.TextBox1.Text = "123"
Config.Show
End Sub
VBASupport 1 wird ja bei xls-Files automatisch gesetzt. Und Compatible hat leider nichts gebracht.
@Stephan
Problem ist, dass Excel z.B. "DialogLibraries.Standard.Config" als nicht deklarierte Variablen bezeichnet und dann auch nicht in die Fehlerbehandlung springt.
Ohne "Option Explicit" funktionierts es, aber ich denke nicht das es so Sinnvoll ist dies zu deaktivieren.
Ich werde mal meine Methode mit dem MS Precompiler weiter testen (verschiedene OO und Excel versionen) und hoffen das hierbei keine probleme auftreten
und warum wohl schrieb ich "z.B."? Eher nicht das Du den Code ohne jedes eigene Nachdenken stur übernimmst.
Du bist es doch der den Gesamtcode vor sich hat und weiß was erreicht werden soll, warum also reagierst Du nicht auf das autretende Problem damit das Du versuchst es durch eine Abänderung des Codes, unter Beibehaltung des grundsätzlichen Vorschlags (also der Unterscheidung Calc/Excel mittels Provozieren eines Fehlers), zu vermeiden?
z.B. (und das meint wieder nur "z.B." und gilt nicht zwingend wörtlich):
Option Explicit
Sub Generate()
Dim x
Dim Config
On Error GoTo calc
x = Application
Call ExcelCodeAusfuehren
Exit Sub
calc:
On Error GoTo 0
Call CalcCodeAusfuehren
End Sub
Sub ExcelCodeAusfuehren()
Config.TextBox1.Text = "123"
Config.Show
End Sub
Sub CalcCodeAusfuehren()
Dim oDlg As Object
oDlg = CreateUnoDialog(DialogLibraries.Standard.Config)
oDlg.getControl("TextBox1").SetText ("123")
oDlg.Execute
End Sub
Der code funktioniert, so hatte ich es auch zuerst gehabt. Hierbei muss halt der starbasic code immer ganz am ende des Moduls sein, damit es keine Fehler gibt.
"Problem" ist wenn eine Funktion mehrere 100 Zeilen groß ist (nichts komplexes -> von a nach b kopieren, c bearbeiten, etc) aber zwischen drin einzelne Zeilen starbasic kompatibel gemacht werden müssen. Jede Funktion zweimal zu haben wird zu unübersichtlich, da dann immer beide gleichzeitig erweitert werden muss.
Ich werde zwar nach und nach die einzelnen "Problemfunktionen" durch eigene ersetzten, aber momentan ist die Lösung mit dem Precompiler etwas einfacher.