MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 08.11.2018, 16:13   #1
aef100
Neuer Benutzer
Neuer Benutzer
Standard Excel2010 - Datei speichern - wenn Datei vorhanden, dann mit fortlaufender Nummer speichern

Hallo zusammen,

ich stehe mal wieder vor einem Problem und komme nicht weiter.

Ich habe eine Excel-Datei als Vorlage (xltm).

Bei Bedarf wird die geöffnet, entsprechend ausgefüllt und abgespeichert.
Abgespeichert wird in einem vorgegeben Pfad und der Name wird aus einer Zelle genommen. Ganz selten kann es sein, dass der Name schon existiert und Excel bringt beim abspeichern die entsprechende Meldung. Fall der Benutzer diese Meldung ignoriert und/oder nicht richtig liest (was passiert ist), wird die alte Datei überschrieben.

Gibt es eine Möglichkeit, dass in dem Fall, wenn der Dateiname schon existiert, Excel per VBA eine fortlaufende Nummer an den Dateinamen anhängt und abspeichert? Etwa so: "Dateiname_2", "Dateiname_3".

Hier ist mein Code:

Code:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
If Me.Path = "" Then
Dim varWorkbookName
   Application.EnableEvents = False
   varWorkbookName = Application.GetSaveAsFilename("C:Test" & Sheets("Blatt1").Range("BF2").Value, FileFilter:="Excel-Arbeitsmappe mit Makros (*.xlsm), *.xlsm", Title:="Speichern als")
   If VarType(varWorkbookName) = vbBoolean Then Cancel = True
   If Not Cancel Then _
           ThisWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=52
   Cancel = True
   Application.EnableEvents = True
 End If
End Sub
Danke im voraus.
MfG Andi
aef100 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.11.2018, 17:24   #2
ASE
MOF Profi
MOF Profi
Standard Excel2010 - Datei speichern - wenn Datei vorhanden, dann mit fortlaufender Nummer sp

Hallo,
also irgend etwas hast Du falsch verstanden! Richtig ist das eine Exceldatei mit der Ext. "xltm" eine Vorlage ist.
Vorlagen werden über Neu und nicht über Öffnen erreicht. Anders ausgedrückt wenn man über Neu diese Datei öffnest, verlangt Excel zum speichern einen Dateinamen. Wenn Du sie öffnest geht Excel davon aus das Du die Vorlage ändern willst.
Wenn Du Makros erlaubt hast (davon gehe ich aus) kannst Du die Datei auch mit vorgegebenen Zahlen speichern aber per Makro und nicht einfach so.

__________________

Ein gern wiederholter Tipp: Das Hochladen einer Beispieldatei, in der zu sehen ist, wie das Ergebnis aussehen soll, ist immer hilfreich und spart Zeit und Rückfragen!

Grüße aus Nürnberg
Armin
Ich benutze WIN 10 und Office 13
..Wenn alle Fragen geklärt sind, das Thema bitte als "erledigt" markieren....
Bewertung nicht vergessen, danke.
ASE ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.11.2018, 20:24   #3
aef100
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo ASE,

ich habe mich vielleicht falsch ausgedrückt.
Diese Vorlage liegt auf einem Netzwerkserver und nicht Lokal. Es greifen mehrere Benutzer auf die Datei zu.
Die soll und kann ja auch nicht überschrieben werden. Es ist eine Vorlage.

Damit beim Abspeichern (in diesem Falle in eine xlsm-Datei) nicht immer wieder der passende Name eingegeben wird, und mann sich zum Speicherort durchklicken muss, habe ich dieses automatisiert. Das funktionierte und funktioniert auch weiterhin Bestens.
Aber in seltenen Fällen kann es vorkommen, dass der Name der neuen Datei in dem Ordner schon vorhanden ist. Excel bringt auch brav die Meldung und frägt wie vorzugehen ist.
Aber leider wurde diese Meldung schon überlesen und die schon vorhandene Datei wurde mit Klick auf "Ja" überschrieben.

Ich weiß, normalerweise sollte man dem entsprechenden Benutzer dann "zusammensche...", aber ich möchte einfach, dass wenn Excel erkennt, dass der Name schon vorhanden ist, einfach den Dateinamen mit 1,2,3 usw. ergänzt.

Ich hoffe ich konnte mich jetzt deutlicher ausdrücken.
Und dafür suche ich eine Ergänzung für den weiter oben geposteten Code.


MfG Andi
aef100 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.11.2018, 21:14   #4
Scorefun
MOF Meister
MOF Meister
Standard

Mit GetSaveAsFilename wird der Speicherdialog angezeigt...
der doch eigentlich nicht sinnvoll ist, wenn man die Datei in einem bestimmten Pfad unter einem bestimmten Namen abspeichern will.
Der User sollte in solch einem Fall gar keine Chance haben, etwas falsch zu machen

Sinngemäß

Code:

dim sFile as string 'Pfad & Name ohne Erweiterung
dim sFileSave as string
dim i as integer

i = 1
if dir(sfile & ".xlsm") <> "" then
     'Die Datei gibt es schon

     sfileSave = sfile & "_" & i & ".xlsm"

     do while dir(sfileSave) <> ""
        'Schleife ziehen, bis es den Namen noch nicht gibt mit dem Zähler
        i = i +1
        sfileSave = sfile & "_" & i & ".xlsm"
     loop
     workbook.saveas sfileSave
else
     workbook.saveas sFile & ".xlsm"
end if

__________________

Gruss Ralf
======================================
Bitte keine PN Anfragen - Hilfe erfolgt nur im Forum!
======================================
Vorsicht Beim Ausprobieren...
Auch Chaotischer Code Entwickelt Sich Ständig
1) Intel I5-2500K, 4x3,3 Ghz, 8GB RAM, Asus P8P67, 250GB SSD Toshiba Q-Pro, 1,5TB HD, MSI GTX550TI, Win7-Prof 64-bit SP1, Office 2010 Plus SP1
2) Asus Zenbook Flip UX360UAK-C4203T, 13,3 Zoll, i5-7200U, 2,5 Ghz, 8GB RAM, 256GB SSD, Win10 Home 64-bit, Office 2016 Plus
Scorefun ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.11.2018, 21:31   #5
gklumpp
MOF User
MOF User
Standard

Hi Andi,

hier wird die Nummerierung vor dem Speicherndialog aufgerufen. Die erste Datei hat hier immer die "_0" als Zählung.


PHP-Code:

Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As BooleanCancel As Boolean)
Dim varWorkbookName
Dim Nr 
As Long
    
If Me.Path "" Then
        Application
.EnableEvents False
        varWorkbookName 
"C:Test" Sheets("Blatt1").Range("BF2").Value "_0.xlsm"
        
If Dir(varWorkbookName) <> "" Then
            Nr 
1
            
Do
                
varWorkbookName Left(varWorkbookNameInStr(varWorkbookName".") - 3) & "_" Trim(Str(Nr)) & ".xlsm"
                
Nr Nr 1
            Loop Until Dir
(varWorkbookName) = ""
        
End If
        
varWorkbookName Application.GetSaveAsFilename(varWorkbookNameFileFilter:="Excel-Arbeitsmappe mit Makros (*.xlsm), *.xlsm"Title:="Speichern als")
        If 
VarType(varWorkbookName) = vbBoolean Then
            Cancel 
True
        End 
If
        If 
Not Cancel Then
            ThisWorkbook
.SaveAs Filename:=varWorkbookNameFileFormat:=52
        End 
If
        
Cancel True
        Application
.EnableEvents True
    End 
If
End Sub 

__________________

Gruß Gerhard

WIN 8.1, Office 2010
gklumpp ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.11.2018, 22:29   #6
Scorefun
MOF Meister
MOF Meister
Standard

Zitat: von gklumpp Beitrag anzeigen


hier wird die Nummerierung vor dem Speicherndialog aufgerufen

Ich bleibe dabei, daß der Speichern-Dialog überflüssig ist...
Und das Ereignis "BeforeSave" dürfte auch falsch sein...weil dann muss ja der Speichern-Befehl irgendwie schon aufgerufen worden sein...

__________________

Gruss Ralf
======================================
Bitte keine PN Anfragen - Hilfe erfolgt nur im Forum!
======================================
Vorsicht Beim Ausprobieren...
Auch Chaotischer Code Entwickelt Sich Ständig
1) Intel I5-2500K, 4x3,3 Ghz, 8GB RAM, Asus P8P67, 250GB SSD Toshiba Q-Pro, 1,5TB HD, MSI GTX550TI, Win7-Prof 64-bit SP1, Office 2010 Plus SP1
2) Asus Zenbook Flip UX360UAK-C4203T, 13,3 Zoll, i5-7200U, 2,5 Ghz, 8GB RAM, 256GB SSD, Win10 Home 64-bit, Office 2016 Plus
Scorefun ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.11.2018, 10:15   #7
aef100
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

@gklumpp
Danke für die Hilfe. Ich habe Deinen Code in leicht abgewandelter Form in meinen vorhandenen eingebaut und der funktioniert einwandfrei.

@Scorefun
Dir auch danke für Deine Hilfe.
Ich bin nicht so sehr in dem Thema drin um zu wissen, ob und wieso etwas falsch ist.
Das ganze funktioniert und das ist wichtig. Es hat auch vorher funktioniert, nur war halt noch der User als Unsicherheitsfaktor mittendrin.

Dass man alles besser und auch einfacher machen kann, meine Codes sowieso, das ist mir schon bewusst.

Nochmals danke an alle.


MfG Andi
aef100 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.