Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
848to852
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
848to852
848to852
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tab beim Schließen als neue Datei speichern

Tab beim Schließen als neue Datei speichern
03.03.2007 15:23:00
Fritz_W
Hallo VBA-Experten,
noch einmal bitte ich euch um Unterstützung.
Ich möchte, dass beim Schließen meiner EXCEL-Arbeitsmappe das Tabellenblatt "Auswertung" in eine neue Datei kopiert wird, wenn zu diesem Zeitpunkt in der "Tabelle3" der zu schließenden Datei in der Zelle "T18" eine 1 eingetragen ist. Die neue Datei sollte unter dem Namen der zu schließenden Datei mit dem Zusatz "-" und dem Zelleintrag aus Zelle "P18" der Tabelle3 im gleichen Ordner gespeichert werden.
Wäre toll wenn ihr mir dabei helfen könntet.
mfg
Fritz

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 16:08:28
Veit
Hallo Fritz,
folgender Code solte machen was Du willst:
' in "DieseArbeitsmappe", nicht Tabelle, nicht Modul
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet
Set wb1 = ThisWorkbook
Set ws1 = wb1.Sheets("Tabelle3")
If ws1.Cells(18, 20).Value = "1" Then
wb1.Sheets("Auswertung").Copy
Set wb2 = ActiveWorkbook
wb2.SaveAs (wb1.Path & "\" & Left(wb1.Name, Len(wb1.Name) - 4) & "-" & ws1.Cells(18, 16).Value)
End If
End Sub

Grüße
Ein Veit
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 16:41:00
Fritz_W
Hallo Veit,
vielen Dank, dass Du mir erneut deine Hilfe anbietest.
Das Makro funktioniert nicht ganz wie gewünscht. Es wird zwar das Tabellenblatt "Auswertung" als neue Datei unter dem korrekten Namen angelegt und gespeichert, aber die Ursprungsdatei bleibt geöffnet und beim zweiten Versuch, sie zu schließen kommt eine Fehlermedlung mit Hinweis auf die dafür wohl relevante Codezeile (gelb unterlegte Codezeile):
wb2.SaveAs (wb1.Path & "\" & Left(wb1.Name, Len(wb1.Name) - 4) & "-" & ws1.Cells(18, 16).Value)
Ich hoffe, ich hab die Probleme korrekt beschrieben und Du kannst mir noch einmal weiterhelfen.
Gruß
Fritz
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 17:30:51
Veit
Hallo Fritz,
der Fehler kam bei mir auch wenn ich nicht gespeichert habe.... jetzt neue Fassung
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet
Set wb1 = ThisWorkbook
Set ws1 = wb1.Sheets("Tabelle3")
test = Dir(wb1.Path & "\" & Left(wb1.Name, Len(wb1.Name) - 4) & "-" & ws1.Cells(18, 16).Value)
If test = "" Then
If ws1.Cells(18, 20).Value = "1" Then
wb1.Sheets("Auswertung").Copy
Set wb2 = ActiveWorkbook
On Error Resume Next
Application.DisplayAlerts = False
wb2.SaveAs (wb1.Path & "\" & Left(wb1.Name, Len(wb1.Name) - 4) & "-" & ws1.Cells(18, 16).Value)
Application.DisplayAlerts = True
wb2.Close Savechanges:=True
Set wb2 = Nothing
End If
End If
End Sub

Grüße
Ein Veit
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 17:51:00
Fritz_W
Hallo Veit,
jetzt läuft das Ganze wie gewünscht. Ich danke Dir vielmals für die Menge an Arbeit und Zeit, die Du für mich investierst.
Dennolch habe ich noch eine Frage:
In der Tabelle "Auswertung" sind Formeln auf andere Tabellen der (ursprünglichen) Datei enthalten, so dass nach dem Öffnen der neuen Datei Verknüpfungen zu der alten Datei bestehen. Dies ist deshalb ärgerlich und störend, weil der Bereich der Tabelle Auswertungen, der diese Formeln enthält, für die neuen Datei keinerlei Bedeutung hat. Der für die neue Datei eigentlich relevante Teil der Tabelle Auswertungen (A1:M30) enthält also keine Formeln, die einen Bezug auf andere Tabellenblätter haben.
Wie könnte man das lösen?
Für einen Lösungsansatz/Lösung wäre ich Dir dankbar.
Gruß
Fritz
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 18:05:00
Veit
Hallo Fritz,
kein Problem und gern geschehen... nur mein Kind fordert jetzt so langsam ihren Papa ein ;-)
also nur schnell mein Lösungsvorschlag. Kopiere das Blatt in der gleich Mappe, entferne alle Verknüpfungen bzw ersetze sie durch reine Werte (der Makrorekorder und "Bearbeiten/Inhalte einfügen..." helfen Dir da weiter... vielleicht gibt es ja nochwas eleganteres(?) sieh mal im Archiv nach, das Problem gab es sicher schon mal) und verschiebe diese Blatt dann in die neue Datei...
Wenn Du noch Hilfe brauchst... ich bin heute abend wenn meine Prinzessin im Bettchen ist, wieder da.
Bis dahin
Grüße
Ein Veit
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 18:39:00
Fritz_W
Hallo Veit,
vielen Dank, dass Du noch kurz geantwortet hast.
Vaterpflichten gehen vor, das ist selbstverständlich.
Habe folgenden Lösungsvorschlag, bei dem Du mir bei der weiteren Umsetzung (später!!) gerne weiterhelfen kannst (es eilt in keinem Fall!).
Ich habe ein Makro aufgezeichnet, das folgendes bewirkt:
Kopie des Tabellenblattes "Auswertungen" in der Datei und entsprechende Änderungen (Bereiche gelöscht bzw. kopiert und als Werte eingefügt). Die Kopie der Tabelle "Auswertungen trägt folglich den Namen "Auswertungen (2)". Das Makro trägt den Namen "Auswertung_kopieren"
Jetzt müsste man meinen Vorstellungen das bisherige Makro beim Schließen der Datei wie folgt ändern:
Wenn beim Schließen der Datei die Voraussetzungen für das Anlegen der neuen Datei erfüllt sind, müsste nun zuerst das Makro "Auswertung_kopieren" gestartet werden. Anschließend müsste dann nicht die Tabelle "Auswertung" sondern "Auswertung (2)" in die neue Datei (nicht kopiert sondern) verschoben werden (Dateibezeichnung wie bei der alten Lösung).
Kann man das so realisieren.
Bereits an dieser Stelle vielen Dank! Wie gesagt: zuerst Vaterpflichten erfüllen.
In diesem Sinne
Gruß
Fritz
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 18:56:00
Erich
Hallo Fritz,
die folgende Lösung entspricht zwar nicht deinem Vorgehen, funzt aber vielleicht auch:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim strW As String, wb2 As Workbook, lngZ As Long, intC As Integer
With ThisWorkbook
strW = Left(.FullName, Len(.FullName) - 4) & _
"-" & .Sheets("Tabelle3").Cells(18, 16) & ".xls"
If Dir(strW) = "" Then
If .Sheets("Tabelle3").Cells(18, 20) = "1" Then
With .Sheets("Auswertung")
lngZ = .UsedRange.Row + .UsedRange.Rows.Count - 1
intC = .UsedRange.Column + .UsedRange.Columns.Count - 1
'                                                     anlegen, kopieren (auch Formate)
.Copy
Set wb2 = ActiveWorkbook
'                                                     nur Werte, keine Formeln
If lngZ * intC > 0 Then _
wb2.Sheets(1).Range(Cells(1, 1), Cells(lngZ, intC)) = _
.Range(.Cells(1, 1), .Cells(lngZ, intC)).Value
End With
'                                                     speichern, schließen
wb2.SaveAs strW
wb2.Close
Set wb2 = Nothing
End If
Else
MsgBox strW & vbLf & "gibt es schon.", vbInformation
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 19:31:00
Fritz_W
Hallo Erich,
und wie das funktioniert, ganz toll. Besten Dank!
Noch eine störende Sache, die ich gerne geändert hätte und die ich durch das Makro in meiner Lösung hätte vermeiden können. In der Tabelle "Auswertung" befindet sich eine (einzige) Schaltfläche, mit der ich ein Makro starte. Diese Schaltfläche sollte in der Kopie (sprich neuen Datei) möglichst nicht erscheinen. Ist das möglich?
Gruß
Fritz
AW: Tab beim Schließen als neue Datei speichern
03.03.2007 20:13:00
Erich
Hi Fritz,
so?
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim strW As String, wb2 As Workbook, lngZ As Long, intC As Integer, objShape As Shape
With ThisWorkbook
strW = Left(.FullName, Len(.FullName) - 4) & _
"-" & .Sheets("Tabelle3").Cells(18, 16) & ".xls"
If Dir(strW) = "" Then
If .Sheets("Tabelle3").Cells(18, 20) = "1" Then
With .Sheets("Auswertung")
lngZ = .UsedRange.Row + .UsedRange.Rows.Count - 1
intC = .UsedRange.Column + .UsedRange.Columns.Count - 1
'                                                     anlegen, kopieren (auch Formate)
.Copy
Set wb2 = ActiveWorkbook
'                                                     Schaltflächen löschen
For Each objShape In ActiveSheet.Shapes
objShape.Delete
Next objShape
'                                                     nur Werte, keine Formeln
If lngZ * intC > 0 Then _
Range(Cells(1, 1), Cells(lngZ, intC)) = _
.Range(.Cells(1, 1), .Cells(lngZ, intC)).Value
End With
'                                                     speichern, schließen
wb2.SaveAs strW
wb2.Close
Set wb2 = Nothing
End If
Else
MsgBox strW & vbLf & "gibt es schon.", vbInformation
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Tab beim Schließen als neue Datei speichern
04.03.2007 09:08:00
Fritz_W
Hallo Erich,
ich freue mich sehr über Deine erneute Hilfe. Vielen Dank!!
Bitte entschuldige, dass ich erst so spät antworte, habe gestern noch überraschenden Besuch erhalten.
Ich habe Dein Makro in das Modul Arbeitsmappe kopiert.
Aus für mich nicht nachvollziehbaren Gründen habe ich jedoch das gleiche Ergebnis wie beim vorigen Code, d.h. die Schaltfläche ist in der kopierten Tabelle von Auswertung nach wie vor enthalten.
Woran kann das liegen?
Gruß
Fritz
Testergebnisse
04.03.2007 09:52:22
Fritz_W
Hallo Erich,
inzwischen habe ich weiter getestet und folgendes festgestellt:
Schließe ich die Originaldatei und ist dabei nicht die Tabelle "Auswertung" aktiviert, wird die Schaltfläche in die Kopie mitkopiert. Ist zu diesem Zeitpunkt in der Originaldatei die Tabelle "Auswertung" aktiviert, enthält die Kopie zwar auch die in der Tabelle "Auswertung" enthaltenen Schaltflächen, beim Speichern der Originaldatei werden diese aber offensichtlich in der Ursprungstabelle gelöscht.
Ich hoffe, dass Dir diese Informationen weiterhelfen und eine Korrektur des Codes in meinem Sinne möglich ist.
Einstweilen besten Dank
Viele Grüße
Fritz
Anzeige
AW: Testergebnisse
04.03.2007 10:15:26
Erich
Hi Fritz,
prima Test! Deine Infos halfen weiter - so läuft es jetzt hoffentlich sauber:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim strW As String, wb2 As Workbook, lngZ As Long, intC As Integer, objShape As Shape
With ThisWorkbook
strW = Left(.FullName, Len(.FullName) - 4) & _
"-" & .Sheets("Tabelle3").Cells(18, 16) & ".xls"
If Dir(strW) = "" Then
If .Sheets("Tabelle3").Cells(18, 20) = "1" Then
With .Worksheets("Auswertung")
lngZ = .UsedRange.Row + .UsedRange.Rows.Count - 1
intC = .UsedRange.Column + .UsedRange.Columns.Count - 1
'                                                     anlegen, kopieren (auch Formate)
.Copy
Set wb2 = ActiveWorkbook
'                                                     Schaltflächen löschen
For Each objShape In wb2.Sheets(1).Shapes
objShape.Delete
Next objShape
'                                                     nur Werte, keine Formeln
If lngZ * intC > 0 Then _
Range(Cells(1, 1), Cells(lngZ, intC)) = _
.Range(.Cells(1, 1), .Cells(lngZ, intC)).Value
End With
'                                                     speichern, schließen
wb2.SaveAs strW
wb2.Close
Set wb2 = Nothing
End If
Else
MsgBox strW & vbLf & "gibt es schon.", vbInformation
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort und: Schönen Sonntag noch!
Anzeige
AW: Testergebnisse
04.03.2007 10:34:00
Fritz_W
Hallo Erich,
ja super, das hast Du perfekt umgesetzt!
Bin so dankbar für deine kompetente Unterstützung, einfach toll!
Auch Dir einen schönen Sonntag noch
Gruß
Fritz
@ Erich G.
06.03.2007 18:11:26
Fritz_W
Hallo Erich,
ich bitte noch einmal in dieser Angelegenheit um Deine Hilfe.
Wie muss man das Makro verändern, dass die Kopie der Tabelle "Auswertung" mit einem passwortgeschützten Blattschutz (Passwort: "xXx") versehen wird?
Vielen Dank für die Hilfe!
Gruß
Fritz
AW: @ Erich G.
06.03.2007 19:26:00
Erich
Hi Fritz,
das ginge (hoffentlich) so:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim strW As String, wb2 As Workbook, lngZ As Long, intC As Integer, objShape As Shape
Dim ws2 As Worksheet
With ThisWorkbook
strW = Left(.FullName, Len(.FullName) - 4) & _
"-" & .Sheets("Tabelle3").Cells(18, 16) & ".xls"
If Dir(strW) = "" Then
If .Sheets("Tabelle3").Cells(18, 20) = "1" Then
With .Worksheets("Auswertung")
lngZ = .UsedRange.Row + .UsedRange.Rows.Count - 1
intC = .UsedRange.Column + .UsedRange.Columns.Count - 1
'                                                     anlegen, kopieren (auch Formate)
.Copy
Set wb2 = ActiveWorkbook
Set ws2 = wb2.Sheets(1)
'                                                     Schaltflächen löschen
For Each objShape In ws2.Shapes
objShape.Delete
Next objShape
'                                                     nur Werte, keine Formeln
If lngZ * intC > 0 Then _
Range(Cells(1, 1), Cells(lngZ, intC)) = _
.Range(.Cells(1, 1), .Cells(lngZ, intC)).Value
'                                                     Blattschutz für die Kopie
ws2.Protect "xXx"
End With
'                                                     speichern, schließen
wb2.SaveAs strW
wb2.Close
Set wb2 = Nothing
Set ws2 = Nothing
End If
Else
MsgBox strW & vbLf & "gibt es schon.", vbInformation
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: @ Erich G.
06.03.2007 19:42:48
Fritz_W
Hallo Erich,
klappt super!!
Vielen Dank und Dir noch einen schönen Abend
Gruß
Fritz

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige