cadsys-chemnitz
Goto Top

Excel abspeichern

Wenn ich mit meinem VB Scribt meine Excel Datei abspeichern will kommt immer die Nachfrage ober die Datei überschreiben soll weil diese schon vorhanden ist.

Wie kann ich diese Meldung unterdrücken? So das er speichert ohne Nahcfrage.

Mein Speichercode:

            NB.ActiveWorkbook.Saved = True
            NB.ActiveWorkbook.SaveAs("C:\Data\Version.xls")  
            NB.ActiveWorkbook.Close()

Content-ID: 112864

Url: https://administrator.de/contentid/112864

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

76109
76109 31.03.2009 um 16:31:53 Uhr
Goto Top
Hallo Cadsys-Chemnitz,

Wenn Datei schon existiert, dann reicht ".Save" und wenn es nicht sicher ist, dann in etwa so:

Dim fso as Object, vPath As String
    
vPath = "C:\Data\Version.xls"  
    
Set Fso = CreateObject("Scripting.FileSystemObject")  

With NB.ActiveWorkbook
   If Fso.FileExists(vPath) Then .Save Else .SaveAs vPath
  .Close
  .Saved = True
 End With

Gruß Dieter
Seelbreaker
Seelbreaker 31.03.2009 um 16:38:11 Uhr
Goto Top
Ich weiß es zwar, nicht aber aus Neugier... in Zeile 3 steht ja "SaveAs" So heißt ja auch der Speichern Button in Office, der dich vorher einen Pfad auswählen lässt bzw. dir die Möglichkeit gibt einen neuen Dateinamen anzugeben um beispielsweise ein Kopie zu speichern.

Würde:

NB.ActiveWorkbook.Save

auch zum Ziel führen? Oder gibt es Befehl "Save" so nicht wie bei Office wo gnadenlos überschrieben wird?

MFG
Seelbreaker
Cadsys-Chemnitz
Cadsys-Chemnitz 31.03.2009 um 16:44:08 Uhr
Goto Top
Idee ist nicht schlecht leider kommt die Meldung immer noch.

Detei bereits vorhanden. Soll diese überschrieben werden ...


Ich hab mal unten das ganze Script mit deinem Eingebauten Code mit aufgeführt.


        Dim NB As Excel.Application
        Dim z As Integer
        Dim verPath As String
        Dim fso As FileSystemObject

        If Button1.Enabled = True Then
            NB = CreateObject("Excel.Application")  
            NB.Workbooks.Open("C:\Data\Version.ini")  
            z = NB.ActiveWorkbook.ActiveSheet.Range("C1").Value + 5  
            NB.ActiveWorkbook.ActiveSheet.Range("E" & z).Value = TextBox1.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("F" & z).Value = TextBox2.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("B" & z).Value = TextBox3.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("C" & z).Value = TextBox4.Text  
            If CheckBox1.CheckState = CheckState.Checked Then
                NB.ActiveWorkbook.ActiveSheet.Range("D" & z).Value = "1"  
            Else
                NB.ActiveWorkbook.ActiveSheet.Range("D" & z).Value = "0"  
            End If

            verPath = "C:\Data\Version.ini"  
            Fso = CreateObject("Scripting.FileSystemObject")  

            With NB.ActiveWorkbook
                .Saved = True
                If Fso.FolderExists(verPath) Then .Save() Else .SaveAs(verPath)
                .Close()
            End With
        End If
Cadsys-Chemnitz
Cadsys-Chemnitz 31.03.2009 um 16:48:09 Uhr
Goto Top
Doch save gibt es aber bei Beiden fragt er nach ob er überschreiben soll ...

übrigens das würde er im Office auch tun.


Ich schätze man muss irgendwie einen Parameter setzen das die nachfrage einfach ignoriert wird, weiss nur nicht wie. face-smile
76109
76109 31.03.2009 um 16:48:57 Uhr
Goto Top
Hallo nochmal,

ja, habe Code nochmal geändert. Müsste so gehen?

Gruß Dieter
76109
76109 31.03.2009 um 16:51:05 Uhr
Goto Top
Cadsys-Chemnitz
Cadsys-Chemnitz 31.03.2009 um 17:03:25 Uhr
Goto Top
Also hiernochmal mit Deinem abgeänderten Code.

Selbe Fehlermeldung ...

        Dim NB As Excel.Application
        Dim z As Integer

        If Button1.Enabled = True Then
            NB = CreateObject("Excel.Application")  
            NB.Workbooks.Open("C:\Data\Version.ini")  
            z = NB.ActiveWorkbook.ActiveSheet.Range("C1").Value + 5  
            NB.ActiveWorkbook.ActiveSheet.Range("E" & z).Value = TextBox1.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("F" & z).Value = TextBox2.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("B" & z).Value = TextBox3.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("C" & z).Value = TextBox4.Text  
            If CheckBox1.CheckState = CheckState.Checked Then
                NB.ActiveWorkbook.ActiveSheet.Range("D" & z).Value = "1"  
            Else
                NB.ActiveWorkbook.ActiveSheet.Range("D" & z).Value = "0"  
            End If

            Dim fso As Object, vPath As String

            vPath = "C:\\Data\Version.ini"  

            fso = CreateObject("Scripting.FileSystemObject")  

            With NB.ActiveWorkbook
                If fso.FileExists(vPath) Then .Save() Else .SaveAs(vPath)
                .Close()
                .Saved = True
            End With
        End If
76109
76109 31.03.2009 um 17:10:19 Uhr
Goto Top
Hallo,

Debuggerfehler oder Save-Fehler?

Die Klammern hinter Save, Close und Saved "..." gehören weg. Gibt sonst Debuggerfehler

Die Lösung von "Xerebus" mit Display.Alerts müsste aber auch funktionieren.

Allerdings glaube ich nicht, das Du die Datei als *.ini abspeichern kannst?

Gruß Dieter
Xerebus
Xerebus 31.03.2009 um 17:18:04 Uhr
Goto Top
Um die Abfrage zum "Überschreiben" zu umgehen,
setze einfach DisplayAlerts = False


Sub Speichern()
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "..."
Application.DisplayAlerts = True
End Sub


Gefunden bei.
http://www.digital-inn.de/ms-excel/4834-speichern-per-macro-problem.htm ...
Cadsys-Chemnitz
Cadsys-Chemnitz 01.04.2009 um 08:25:12 Uhr
Goto Top
Danke erstmal an alle die mitgeholfen haben bei der Lösung, diese sieht jetzt folgendermaßen aus.

        Dim NB As Excel.Application
        Dim z As Integer

        If Button1.Enabled = True Then
            NB = CreateObject("Excel.Application")  
            NB.Workbooks.Open("C:\Data\Version.ini")  
            z = NB.ActiveWorkbook.ActiveSheet.Range("C1").Value + 5  
            NB.ActiveWorkbook.ActiveSheet.Range("E" & z).Value = TextBox1.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("F" & z).Value = TextBox2.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("B" & z).Value = TextBox3.Text  
            NB.ActiveWorkbook.ActiveSheet.Range("C" & z).Value = TextBox4.Text  

            If CheckBox1.CheckState = CheckState.Checked Then
                NB.ActiveWorkbook.ActiveSheet.Range("D" & z).Value = "1"  
            Else
                NB.ActiveWorkbook.ActiveSheet.Range("D" & z).Value = "0"  
            End If

            NB.Application.DisplayAlerts = False
            NB.ActiveWorkbook.Saved = True
            NB.ActiveWorkbook.SaveAs("C:\Data\Version.ini")  
            NB.ActiveWorkbook.Close()
            NB.Application.DisplayAlerts = True
        End If

So funktiert es wie ich es wollte und keine Fehlermeldung entsteht mehr.

Komischerweise nach einbau der Application.DisplayAlerts = False funktioniert diese Version nicht mehr.

            Dim fso As Object, vPath As String

            vPath = "C:\\Data\Version.ini"  

            fso = CreateObject("Scripting.FileSystemObject")  

            With NB.ActiveWorkbook
                If fso.FileExists(vPath) Then .Save() Else .SaveAs(vPath)
                .Close()
                .Saved = True
            End With

ist aber ja nicht weiter tragisch


Zu Didi 1954 :

Die Klammern hinter Save, Close und Saved "..." gehören weg. Gibt sonst Debuggerfehler  

Negativ, die setzt er automatisch. Man kann Sie gar nicht wegmachen , wenn man es erzwingt geht das Programmm auch nicht mehr. Frag mich jetzt nicht warum.


Und besonderen Dank an Xerebus, dein Beitrag war das Puzzle was gefehlt hat.

Danke

MfG Tino
Cadsys-Chemnitz
Cadsys-Chemnitz 01.04.2009 um 08:27:21 Uhr
Goto Top
PS:

Ach und natürlich kann man Sie als .ini speichern das ist Excel egal. Hab in der Datei Passwörter liegen und wollte das nicht so offensichtlich machen.

Ausserdem kann ich die Excel-Datei dann auch mit Passwort sichern sodas niemand so einfach an die Passwörter kommt und ich aber gut damit arbeiten kann.
76109
76109 01.04.2009 um 09:06:57 Uhr
Goto Top
Hallo Cadsys-Chemnitz,

manchmal sieht man vor lauter Wald die Bäume nicht.

Der Fehler ist, dass der Close-Befehl natürlich erst nach dem
Saved = True stehen muss, sonst macht Saved keinen Sinn.
Display.Alerts wird nicht gebraucht

Gruß Dieter