Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Excel-Datei mit VBA speichern

Frage Microsoft

Mitglied: dawatec

dawatec (Level 1) - Jetzt verbinden

05.07.2014, aktualisiert 06.07.2014, 11365 Aufrufe, 6 Kommentare

Guten Tag

Ich habe eine Excel-Datei, in der in D4 der Kundenname und in D11 das Projekt benennt wird.

Icvh will nun wissen, ob eine Speicherung der Datei über die Felder D4 und D11 möglich ist, bzw. die Datei sollte z.B. unter Musterfirma AG, Testprojet abgespeichert werden, wobei Musterfirma in der Zelle D4 und Testprojekt in der Zelle D11 ist.

Ich danke im Voraus für Eure Hilfe.

Gruss
dawatec
Mitglied: colinardo
05.07.2014, aktualisiert um 13:52 Uhr
Hallo dawatec,
kein Problem; es kommt hier drauf an ob du das Dokument als extra Kopie abspeichern willst ohne das es zum aktuellen wird, oder ob du das aktive Dokument unter einem anderen Namen speichern willst: Habe dazu zwei Subs in den Code reingepackt (Pfade und entsprechende Worksheets sind natürlich anzupassen)

01.
Sub KopieSpeichern() 
02.
    kunde = ReplaceIllegalChars(Worksheets(1).Range("D4").Value) 
03.
    projekt = ReplaceIllegalChars(Worksheets(1).Range("D11").Value) 
04.
    If kunde <> "" And projekt <> "" Then 
05.
        dateiname = "C:\Pfad\" & kunde & ", " & projekt & ".xlsx" 
06.
        Application.DisplayAlerts = False 
07.
        ActiveWorkbook.SaveCopyAs dateiname 
08.
        Application.DisplayAlerts = True 
09.
    Else 
10.
        MsgBox "Kunde oder Projekt wurde nicht eingetragen!", vbExclamation 
11.
    End If 
12.
End Sub 
13.
 
14.
Sub Speichern() 
15.
    kunde = ReplaceIllegalChars(Worksheets(1).Range("D4").Value) 
16.
    projekt = ReplaceIllegalChars(Worksheets(1).Range("D11").Value) 
17.
    If kunde <> "" And projekt <> "" Then 
18.
        dateiname = "C:\Pfad\" & kunde & ", " & projekt & ".xlsx" 
19.
        Application.DisplayAlerts = False 
20.
        ActiveWorkbook.SaveAs dateiname, xlOpenXMLWorkbook 
21.
        Application.DisplayAlerts = True 
22.
    Else 
23.
        MsgBox "Kunde oder Projekt wurde nicht eingetragen!", vbExclamation 
24.
    End If 
25.
End Sub 
26.
 
27.
' Ersetzt Illegale Sonderzeichen im Dateinamen durch einen Unterstrich 
28.
Function ReplaceIllegalChars(strText As String) 
29.
    Set regex = CreateObject("vbscript.regexp") 
30.
    regex.Pattern = "[\\/:\?<>|""*]" 
31.
    regex.Global = True 
32.
    ReplaceIllegalChars = regex.Replace(strText, "_") 
33.
    Set regex = Nothing 
34.
End Function 
35.
 
Es gilt hierbei zu beachten das wenn du das Dokument welches die Makros enthält alternativ als xlsx abspeichern möchtest der Methode SaveAs noch das entsprechende Format im zweiten Parameter mit übergeben werden muss z.B. ActiveWorkbook.SaveAs dateiname, xlOpenXMLWorkbook, sonst läuft die Methode auf einen Laufzeitfehler, weil ja im Dokument Makros enthalten sind und diese in einem xlsx nicht gespeichert werden können.

Grüße Uwe
Bitte warten ..
Mitglied: dawatec
06.07.2014 um 09:48 Uhr
Hallo Uwe

Vielen Dank für Deine Hilfe.

Ich sende die Datei dem Kunden zum Ausfüllen und er schickt mir diese wieder ausgefüllt zurück. Ich weiss also nicht, ob und wo er sich die Datei abspeichert und vorgeben kann ich ihm dies natürlich nicht.

Der Code wird so nicht funktionieren, stimmt meine Aussage?

Liebe Grüsse
dawatec
Bitte warten ..
Mitglied: colinardo
06.07.2014, aktualisiert um 11:08 Uhr
Der Code wird so nicht funktionieren, stimmt meine Aussage?
Generell stimmt sie nicht, funktionieren tut er, die Frage ist eher was du genau vorhast !
Spezifiziere deine Wünsche bitte exakter !!! Ich kann ja nicht Hellsehen.
Wer soll hier wo abspeichern ?

Ich sende die Datei dem Kunden zum Ausfüllen und er schickt mir diese wieder ausgefüllt zurück
Ich würde hierfür in das Dokument einen Button setzen der das File direkt als Attachment an eine Mail anhängt. So muss der Kunde keinen Umweg über das Dateisystem machen.

Um das ganze abzukürzen kannst du mir dein File auch zusenden, dann bau ich dir die Funktion ein, meine Mailadresse solltest du ja noch haben.

Grüße Uwe
Bitte warten ..
Mitglied: dawatec
06.07.2014 um 11:14 Uhr
Hallo Uwe

Du hast Recht, das ist kein mach-mir-die-Arbeit Wuschkonzert, das sehe ich auch so und war auch nicht die Meinung. Nur, ich denke mir, dass in Foren wie in diesem einem geholfen werden sollte, sonst macht es ja keinen Sinn.

Nochmals zu meiner Aufgabe:

Nach nochmaliger Ansicht meiner ersten Anfrage muss ich Dir ebenfalls Recht geben, die Anfrage war unvollständig definiert...., sorry.

Ich habe ein Abfrage-Excel-Sheet, welches ich den Kunden per Mail zustelle, damit sie die Angaben zur Erstellung eines Angebotes machen können. Da nicht alle die Datei richtig abspeichern und ich dies auch nicht vorschreiben will und kann will, war meine Idee, nach eine VBA-Lösung zu fragen, damit die Kunden bereits einen Speichernamen vorgeschlagen haben, die sie übernehmen können.

Da ich kein VBA-Experte bin, muss ich mir bei der Lösung helfen lassen......

Ich habe aber keine Ahnung, ob der Kunde das Sheet abspeichert oder eine direkte Eingabe macht und genau da ist der Haken.....

Ich würde mich trotzdem freuen, wenn Du mich im positiven Sinne unterstützen kannst. In PDF bringt die ganze Sache nichts, der Kunde kann das Sheet nicht ausfüllen und schon gar nicht abspeichern, denn die prof-Version ist nicht sehr verbreitet,

Gruss
dawatec
Bitte warten ..
Mitglied: colinardo
LÖSUNG 06.07.2014, aktualisiert um 17:42 Uhr
Zitat von dawatec:
Ich habe aber keine Ahnung, ob der Kunde das Sheet abspeichert oder eine direkte Eingabe macht und genau da ist der Haken.....
Siehe unten.
In PDF bringt die ganze Sache nichts, der Kunde kann das Sheet nicht ausfüllen und schon gar nicht abspeichern,
sicher geht das, Ausfüllen kann er immer und auch abspeichern geht mit dem normalen Reader !!!! Nur zum Erstellen des Formulars benötigt man die Prof. Version, glaub's mir.

Wichtige Info zu VBA-Code in Dateien die du Kunden schickst:
Die Ausführung von VBA-Code ist in Office standardmäßig deaktiviert! Es wird also dort in wahrer Voraussicht zu häufigen Nachfragen kommen, weil etwas nicht so funktioniert wie es soll, deswegen bist du mit PDF-Formularen hier auf einer sichereren Seite. Das haben diverse Anfragen von Kunden bei mir gezeigt, die eine ähnliche Funktion implementiert haben wollten.

Wenn du es warum auch immer so lösen willst, bitte:
Kommentare befinden sich im Code, deine Mailadresse in Zeile 35 anpassen.
Hier auch die Demo-Datei dazu.
01.
Sub SaveAndSend() 
02.
    Dim dlg As FileDialog, kunde As String, projekt As String, dateiname As String, strEmail As String 
03.
     
04.
    'Felder aus denen der Dateiname zusammengesetzt werden soll 
05.
    kunde = ReplaceIllegalChars(Worksheets(1).Range("D4").Value) 
06.
    projekt = ReplaceIllegalChars(Worksheets(1).Range("D11").Value) 
07.
     
08.
    ' Wenn beide Felder nicht leer sind setze den Dateinamen 
09.
    If kunde <> "" And projekt <> "" Then 
10.
        dateiname = strTempFolder & kunde & "_" & projekt & ".xlsx" 
11.
    Else ' eins der beiden Felder ist leer, verwende den aktuellen Dateinamen 
12.
        dateiname = ActiveWorkbook.Name 
13.
    End If 
14.
     
15.
    Set dlg = Application.FileDialog(msoFileDialogSaveAs) 
16.
    With dlg 
17.
        'Initialen Dateinamen festlegen 
18.
        .InitialFileName = dateiname 
19.
        ' Wähle den richtigen Dateifilter 
20.
        For i = 1 To .Filters.Count 
21.
            If .Filters(i).Extensions = "*.xlsx" Then 
22.
                .FilterIndex = i 
23.
                Exit For 
24.
            End If 
25.
        Next 
26.
        'Wenn OK geklickt wurde starte Export 
27.
        If .Show = True Then 
28.
            Application.DisplayAlerts = False 
29.
            'Speichern durchführen 
30.
            .Execute 
31.
            Application.DisplayAlerts = True 
32.
            ' Frage ob das Workbook per Mail verschickt werden soll 
33.
            If MsgBox("Möchten Sie das Dokument jetzt mit ihrem Standard E-Mailprogramm verschicken ?", vbYesNo Or vbQuestion) = vbYes Then 
34.
                ' Hier bitte die Mailadresse anpassen 
35.
                strEmail = "deine@mail.de" 
36.
                ' Mail senden 
37.
                ActiveWorkbook.SendMail strEmail 
38.
            End If 
39.
        End If 
40.
    End With 
41.
End Sub 
42.
 
43.
Function ReplaceIllegalChars(strText As String) 
44.
    Set regex = CreateObject("vbscript.regexp") 
45.
    regex.Pattern = "[\\/:?<>|""*]" 
46.
    regex.Global = True 
47.
    ReplaceIllegalChars = regex.Replace(strText, "_") 
48.
    Set regex = Nothing 
49.
End Function
Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: dawatec
06.07.2014 um 17:42 Uhr
Hallo Uwe

Ich danke Dir für Dein Verständnis und Deine grossartige Hilfe.

Ich werde Deine Arbeit morgen in die Datei einfliessen lassen.

Liebe Grüsse
dawatec
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...