Hallo,
ich weiß die Problem hier nehmen zu, ich hoffe aber mal, dass ich euch vorerst dann das letzte Mal nerve.
Und zwar habe ich Excel-Datei, die will ich mit Daten füllen (funktioniert auch)
Dann möchte ich sagen, das nach füllen, automatisch der "Speichern Unter" Dialog öffnet mit vordefiniertem Speichertort und Namen, den man jedoch nach belieben noch ändern kann. (funktioniert nicht)
Es funktioniert lediglich mit "objExcel.ActiveWorkbook.SaveAs" - da hab ich jedoch als Nutzer nicht mehr die Option den Speicherort zu ändern.
Private Sub cmd_kundenliste_inexcel_Click()
Dim rst As DAO.Recordset
Dim objExcel As Excel.Application
Dim objWorkbook As Excel.Workbook
Dim strSQL As String
Dim i As Integer
On Error Resume Next
Set objExcel = GetObject(, "Excel.Application")
If Err.Number = 429 Then
Set objExcel = CreateObject("Excel.Application")
End If
Set objWorkbook = objExcel.Workbooks.Open("C:\Users\XXXL\Desktop\XXX\Kundenliste_export")
strSQL = "SELECT kunde_id, kunde_nummer, kunde_geschlecht, kunde_kunde_unt_nachname,kunde_vorname, kunde_strasse_und_nr, kunde_plz, kunde_stadt, kunde_land, kunde_tel, kunde_fax, kunde_mobil, kunde_email FROM tbl_kunden_1000"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
Do While Not rst.EOF
With objWorkbook.Sheets(1)
.Cells(2 + i, 1) = rst(1)
.Cells(2 + i, 2) = rst(2)
.Cells(2 + i, 3) = rst(3)
.Cells(2 + i, 4) = rst(4)
.Cells(2 + i, 5) = rst(5) & vbCrLf & rst(6) & " " & rst(7) & vbCrLf & rst(8)
.Cells(2 + i, 6) = rst(9)
.Cells(2 + i, 7) = rst(10)
.Cells(2 + i, 8) = rst(11)
.Cells(2 + i, 9) = rst(12)
i = i + 1
End With
rst.MoveNext
Loop
rst.Close
objExcel.Visible = True
Dim Dateiname As String
'Dateiname basteln - Jahr Monat Tag
Dateiname = "Kundenliste" & Format(Now(), " - " & "dd/mm/yyyy") & ".xlsx"
'Das funktioniert nicht
' Dialog "Speichern unter" aufrufen und Dateinamen vorgeben
' Application(xlDialogSaveAs).Show Dateiname
'Das funktioniert
objExcel.ActiveWorkbook.SaveAs "C:\Users\XXXL\Desktop\XXX\" & Dateiname
' objExcel.Workbooks.Close
Set objExcel = Nothing
End Sub
Kann es sein, dass ich noch eine Library laden muss?
Excel 15.0 ist bereits geladen
Hallo,
ruf vor dem SaveAs den Filedialog auf und wähle damit die Datei zum Abspeichern auf oder benutze die GetSaveAsFilename-Funktion.
Dankeschön :)
Hab das mal nun umgeschrieben:
objExcel.Visible = True
Dim Dateiname As String
'Dateiname basteln - Jahr Monat Tag
Dateiname = "Kundenliste" & Format(Now(), " - " & "dd/mm/yyyy") & ".xlsx"
'Dialog "Speichern unter" aufrufen und Dateinamen vorgeben
Application.FileDialog(msoFileDialogSaveAs).InitialFileName _
= "C:\Users\XXXL\Desktop\XXX\" & Dateiname
Application.FileDialog(msoFileDialogSaveAs).Show
Set objExcel = Nothing
End Sub
Er öffnet nun die Datei, zeitgleich auch das Speichern Unter Fenster, mit den Inhalten wie ich sie gerne hätte. Beim drücken auf Speichern, speichert er es aber nicht :D
Hallo,
nee, so nicht, mit dem Filedialog soll der Dateiname ausgewählt werden, der bei der SaveAs-Methode einzusetzen ist.
Ansonsten, wenn der Excel-Dateiname schon bekannt ist ("C:\Users\XXXL\Desktop\XXX\" & Dateiname), kann der doch gleich bei der SaveAs-Methode eingesetzt werden...
Oder habe ich was falsch verstanden?
Also der Dateiname soll als Vorgabe direkt drin stehen, und mit dem Klick auf "speichern" abschließen. Das Öffnen des Fensters hat nur den Grund, falls der Nutzer aus irgendwelchen Gründen die Datei doch irgendwo anders speichern will oder anders benennen möchte, aber in Schätzungsweise 95% der Fälle würden die Vorgaben so beibehalten werden.
Das heißt ans Ende nochmal:
objExcel.ActiveWorkbook.SaveAs?
Wie sag ich dem Befehl dann, dass er (falls der Zielpfad doch noch geändert wurde) den Zielpfad aus dem Dialog übernimmt?
Hallo,
schau doch mal die VBA-Hilfe zu GetSaveAsFilename an...
.
.
Dateiname = "Kundenliste" & Format(Now(), " - " & "dd/mm/yyyy") & ".xlsx"
Dim SaveFn
SaveFn = objExcel.GetSaveAsFilename ("C:\Users\XXXL\Desktop\XXX\" & Dateiname,
"Excel-Dateien,*.xlsx", , "Datei wählen")
If Not SaveFn Then
objExcel.ActiveWorkbook.SaveAs SaveFn
Else
MsgBox " Nicht gespeichert"
End If
objExcel.Workbooks.Close
.
.
Jippi funzt :)
Lass mich raten, für Word Dateien funktioniert das wieder ganz anders :D
Na klar, dazu musst du in die Objektbibliothek von Word einsteigen.
Das firmiert zwar alles unter dem Logo von Microsoft, doch leider haben die Programmierer der diversen Produkte sich nicht untereinander abgesprochen.