Hallo zusammen,
ich habe vor einiger Zeit eine Wordautomation mit Access gemacht. Das hat auch super geklappt. Jetzt habe ich versucht auf gleicher Basis eine Excelautomation zu machen. Ich habe eine Accessdatenbank erstellt und wollte zuerst mal nur ein Feld in Excel übertragen.
Zuerst habe ich eine Exceldatei "ExcelAutotext" erstellt mit der Textmarke "name" in Zelle A2. In dieses Zelle wollte ich das Feld Nachname aus einer Accessdatei einfügen. Folgenden Code habe ich (eigentlich nur umgeschrieben aus meiner Wordautomation):
Private Sub Befehl0_Click()
Const Pfad As String = "C:\Users\Username\DokUser\Desktop\"
' Pfadbeginn wo die neu erstellte Excel Datei gespeichert wird
' ***********************************************************
Const xlDialogFileSaveAs = 84
' = Dialogfenster "Speichern"
' ************************************
Dim appExcel As Object, xlExcel As Object
' = xlExcel = Excelvorlage, appExcel = neu erstellte Exceldatei
' ******************************************************
Set appExcel = CreateObject("excel.application")
appExcel.Visible = True
' = Erstellen von appExcel als Excel-Dokument
' = soll anschließend sichtbar sein
' ******************************************
Set xlExcel = appExcel.Documents.Add("C:\Users\Username\Documents\ExcelAutotext.xlsx")
' = xlExcel = appExcel = haben die gleichen Daten (und Pfadangabe zum Excelvorlagedokument)
' damit die Originalvorlage xlExcel unverändert bleibt
' ***************************************************************************************
' ********************************************************************************
With xlExcel
.Bookmarks("name").range = Me!Nachname
End With
' = Routine zum Übertragen der Accesstextfelder in die Word Textmarken von xlExcel
' = in die Originalvorlage wird das Textfeld von Access geschrieben.
' = da ja xlExcel und appExcel gleich sind wird auch in appExcel dies geschrieben
' ********************************************************************************
appExcel.ChangeFileOpenDirectory ("C:\Users\Username\DokUser\Desktop\Kundenliste")
With appExcel.Dialogs(xlDialogFileSaveAs)
.Name = Format(Date, "yyyy-mm-dd")
.Show
End With
' = Routine zum Abspeichern und öffnen des neuen Dokuments
' ********************************************************
Bereinigung:
xlExcel.Close
appExcel.Quit
Set xlExcel = Nothing
Set appExcel = Nothing
' = Routine zum Aufräumen (Bereinigung) - bei allen If Abfragen sollte nicht auf Exit Sub
' sondern hierher gesprungen werden mit GoTo Bereinigung - sonst evtl Absturz
' ***************************************************************************************
End Sub
Es öffnet sich ein leeres Exceldokument und ich erhalte folgende Fehlermeldung:
Laufzeitfehler 438
Objekt unterstützt diese Eigenschaft oder Methode nicht
in folgender Zeile:
Set xlExcel = appExcel.Documents.Add("C:\Users\Username\Documents\ExcelAutotext.xlsx")
Kann mir da jemand weiterhelfen? Im Voraus vielen Dank!
Grüße
Herbert
Set xlExcel = appExcel.Workbooks.Add("C:\Users\Username\Documents\ExcelAutotext.xlsx")Excel hat begreiflicherweise ein anderes Objektmodell als Word, und damit sollte man sich schon beschäftigen.
Nützlich wäre es, zu Beginn mit Early Binding, also mit gesetztem Verweis, zu arbeiten. Mit dem Verweis hast Du auch direkten Zugang zum Objektkatalog (mit F2 aus dem VBA-Editor heraus).
Super vielen Dank, hat einwandfrei geklappt! Leider habe ich jetzt einen weiteren Fehler in der Zeile:
.Bookmarks("name").range = Me!Nachname
Objekt unterstützt diese Methode nicht. Ich vermute mal bei Excel heißt das nicht Bookmarks.
Ist das schon wieder ein rein Wordspezifische Angabe?
Grüße
Herbert
Hallo Herbert
Hier ein kleines Beispiel für eine Excel-Automation. Vielleicht hilft es dir weiter.
Hallo Köbi,
super vielen Dank! Leider funktioniert bei mir Early Binding nicht. Deshalb auch die etwas "altmodische" Art und Weise. Ich dachte halt es funktioniert ähnlich wie bei WORD d.h. man setzt Textmarken und kann diese dann
mit Daten aus Access füllen.
Grüße
Herbert
Weshalb soll bei dir Early Binding nicht funktionieren? Im Code steht ja
Verweis auf Microsoft Excel 9.0 Object Library (oder höher) muss gesetzt sein.
Also wenn du diesen Verweis setzt, dann sollte es funktionieren. Bei mir sieht das so aus wie im beiliegenden Bild.
In Excel gibt es keine Textmarken, wofür auch?
Eine Arbeitsmappe hat Arbeitsblätter, ein Arbeitsblatt hat durchgehend Zeilen und Spalten. Damit lässt sich jeder Ort (Zelle) supergenau adressieren.
Du hast schon mal Excel gesehen und damit gearbeitet?
Hallo vielen Dank für die Antworten,
ja mit Excel kenne ich mich schon aus. Eigentlich wollte ich nur ausprobieren, ob man mit Textmarken in Excel exakt genauso arbeiten kann wie mit Word. Ich frage mich für was Textmarken bei Excel eigentlich gut sind?
Das mit Early Binding hat seltsamerweise bei mir noch nie funktioniert. Auf meinem vorhergehenden Rechner
konnte ich nicht mal den Verweis setzen.
Ich muss das jetzt mal auf meinem neuen Rechner ausprobieren.
Grüße
Herbert
Hallo,
Ich bin gewiss kein Excelspezialist, aber m.E. kann das
.Bookmarks("name").range = Me!Nachnameja auch nicht funktionieren, ob es nun Bookmarks gibt oder nicht, -
die .Range erwartet doch einen Zellbezug.
Und, wie Eberhard schon anmerkte, lässt sich in Excel jede Zelle
ganz präzise ansprechen, - nämlich über die .Range
.Range("A2") = Me!Nachname(kann's nicht testen, hab' kein Excel)
gruss ekkehard
Beispiele für vollständige Adressierung
Set xlExcel = appExcel.Workbooks.Add("C:\Users\Username\Documents\ExcelAutotext.xlsx")
With xlExcel ' xlWorkbook wäre sinniger
.Worksheets(1).Cells(2, 1).Value = Me!Nachname
' .Worksheets("Moritz").Range("A2").Value = Me!Nachname
End WithWie gesagt, eine Zelle befindet sich in einem Arbeitsblatt, nicht "im Excel" an sich.
Die Value-Eigenschaft ist zwar Standard und muss nicht zwingend angegeben werden. In Zellen werden aber auch gerne Formeln eingegeben, und da wird die optische Klarstellung häufig angewandt.
ZitatIch frage mich für was Textmarken bei Excel eigentlich gut sind?
Diese Frage würde sich erst stellen, wenn man deren Existenz (generell und konkret im Fall) bejahen kann. Aber Du liebst diesen Gedanken (Augen zu und durch).
Hallo Herbert
Ich verstehe nicht, weshalb du so an den Textmarken klebst.
ZitatDas mit Early Binding hat seltsamerweise bei mir noch nie funktioniert. Auf meinem vorhergehenden Rechner
konnte ich nicht mal den Verweis setzen.
Ich muss das jetzt mal auf meinem neuen Rechner ausprobieren.
Ja, mach das. Es ist für mich nicht nachvollziehbar, weshalb Early Binding mit dem richtigen Verweis nicht funktionieren soll.
Ich habe hier ein Beispiel mit Late Binding.
Hallo zusammen,
vielen Dank für eure Antworten! Das war mir halt nicht klar, dass man eigentlich
die Textmarken (die man ja in Excel anlegen) kann nicht als Zellbezug verwenden kann.
Ich werde mal ein bisschen mit Early- und Late Binding probieren und euch später Bescheid geben.
Nochmals vielen Dank!
Grüße
Herbert
PS: Dieses Forum ist einfach super!
Zitat von: herb54 am Februar 01, 2023, 09:52:47Das war mir halt nicht klar, dass man eigentlich
die Textmarken (die man ja in Excel anlegen) kann nicht als Zellbezug verwenden kann.
Wurde hier nicht schon erwähnt, dass es in Excel kein Bookmark Klasse gibt.
Wenn man wissen will, ob so eine Klasse existiert schaut man im Objektkatalog und weiß nach 10 Sekunden Bescheid.
Einfach irgend etwas völlig konzeptlos eingeben, kann man sich also ersparen.
Zielgerichtet in der Doku nachsehen ist da schwer zu bevorzugen. Vor allem sieht man auch gleich was eine Klasse - wenn es sie den gibt - wirklich kann.
Hallo!
@herb54:
Kann es sein, dass du mit "Textmarken" die Benennung von Zellen meinst - also die Namen, die man im Namensmanager sieht.
Diese Namen kannst du ebenso als Index für Range verwenden.
Gruß
Josef
Hallo Josef,
ja, das wird so sein. Habe mich halt an diese Webseite gehalten:
https://help.consolidate.eu/docs/Arbeiten_mit_Aktivitaten/Dateianlagen/Texmarken_einfugen/Textmarken_einfugen_in_Excel/#:~:text=Textmarke%20in%20Bearbeitungsleiste%20oder%20Zelle%20eintragen%3A&text=Klicken%20Sie%20in%20die%20Zelle,erneut%20den%20Namen%20der%20Textmarke. (https://help.consolidate.eu/docs/Arbeiten_mit_Aktivitaten/Dateianlagen/Texmarken_einfugen/Textmarken_einfugen_in_Excel/#:~:text=Textmarke%20in%20Bearbeitungsleiste%20oder%20Zelle%20eintragen%3A&text=Klicken%20Sie%20in%20die%20Zelle,erneut%20den%20Namen%20der%20Textmarke.)
Grüße
Herbert
@herb54 und du warst natürlich nicht in der Lage diese Information mitzuliefern.
Das sind aber keine Textmarken, sondern benannte Bereiche und wie man die per VBA nutzen kann hat Josef in #13 mitgeteilt.
ZitatDiese Namen kannst du ebenso als Index für Range verwenden.
Falls dir das nichts sagt, gibt es wie immer Beispiele in der Online Hilfe.