Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Prüfen ob Sheet vorhanden und wenn ja löschen

Prüfen ob Sheet vorhanden und wenn ja löschen
22.01.2015 17:54:23
Elias
Hallo zusammen
Ich habe einen Updater. An und für sich funktioniert dieser. Jedoch muss ich jetzt noch eine zusätzliche Funktion einbauen, die mir immer einen Fehler anzeigt.
Aber zuerst mal hier der Code:
-------------------------------------------------
Private Sub CommandButton1_Click()
Dim wkbUpdate As Workbook
Dim wkbAlt As Workbook, wksData As Worksheet
Dim varAuswahl As Variant, arrSheet() As String, intI As Integer
On Error GoTo Beenden
'Dateiauswahldialog anzeigen
varAuswahl = Application.GetOpenFilename( _
Filefilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb),*.xls;*.xlsx;*.xlsm;*.xlsb", _
Title:="Bitte bestehende Datei auswählen")
If varAuswahl = False Then
MsgBox "Die Aktualisierung der bestehnden Datei wurde abgebrochen! " & vbLf _
& "Bitte Update nochmals starten!", _
vbInformation + vbOKOnly, "U P D A T E"
GoTo Beenden
End If
'Main-Datei-Objekte setzen
Set wkbUpdate = ActiveWorkbook
Application.ScreenUpdating = False
'alte Datei schreibgeschützt öffnen
Set wkbAlt = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)

Workbooks(varAuswahl).Sheet("Ansichtspinne").Visible = True
Workbooks(varAuswahl).Sheet("Gesamtansicht").Visible = False
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
If ws.Name = "GesamtansichtTotal" Then
ActiveWorkbook.Sheets("GesamtansichtTotal").Delete
End If
Next ws

With wkbAlt
'Sicherungskopie der alten Datei erstellen
.SaveCopyAs Filename:=.Path & "\" _
& "Update-Sicherheitskopie_" & Format(Now, "YYYY-MM-DD hhmmss") & .Name
i = Sheets.Count
For Z = 1 To i
Sheets(Z).Unprotect
Next Z
If .Sheets.Count >= 8 Then
'Namen der zu kopierende Blätter in Array sammeln
ReDim arrSheet(8 To .Sheets.Count)
For intI = 8 To .Sheets.Count
arrSheet(intI) = .Sheets(intI).Name
Next
.Sheets(arrSheet).Copy after:=wkbUpdate.Sheets(wkbUpdate.Sheets.Count)
Erase arrSheet
Else
MsgBox "Keine Datentabellen in Datei vorhanden"
End If
'Daten-Datei wieder schließen
.Close savechanges:=False
End With
Set wkbAlt = Nothing
wkbUpdate.Activate
Application.ScreenUpdating = True
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Bitte Update-Datei unter neuem Namen speichern"
.InitialFileName = "AktualisierteDatei"
.FilterIndex = 2 '1= xlsx (Standard), 2 = xlsm
If .Show = -1 Then
wkbUpdate.SaveAs Filename:=.SelectedItems(1), addtomru:=True
MsgBox "Datei wurde erfolgreich aktualisiert", _
vbInformation + vbOKOnly, "U P D A T E"
ActiveWorkbook.Sheets("Ansichtspinne").Activate
Sheets("Ansichtspinne").Unprotect
Sheets("Ansichtspinne").Range("A1").Select
Sheets("Ansichtspinne").Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
True
Me.Hide
For ii = 8 To Sheets.Count
Sheets(ii).Cells.Replace What:=" ", Replacement:="", LookAt:=xlWhole
Next ii
Else
MsgBox "Speichern der aktualisierten Datei wurde abgebrochen!"
End If
End With
Beenden:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
If Not wkbAlt Is Nothing Then wkbAlt.Close savechanges:=False
End Select
End With
Application.ScreenUpdating = True
End Sub

--------------------------------------------------------
Das kursiv markierte habe ich jetzt noch selbst eingefügt. Es sollte folgendes bewerkstelligen: In der zuvor per Auswahlfenster geöffneten Datei sollte das Blatt "Ansichtspinne" sichtbar und dafür das Blatt "Gesamtansicht" unsichtbar werden. Als letzte Vorbereitung sollte in dieser Datei geprüft werden, ob ein Tabellenblatt mit dem Namen "GesamtansichtTotal" vorhanden ist, und wenn ja sollte es gelöscht werden.
Momentan wird mir aber immer ein Fehler Nr. 9 angezeigt...
Vielen Dank schon mal im Voraus für alle Hilfe...

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Sheet vorhanden und wenn ja löschen
22.01.2015 20:26:15
Luschi
Hallo Elias,
als Erstes deaktiviere mal diesen Befehl:
On Error GoTo Beenden
denn der würgt ja alles ab und Du weist garnicht, in welcher Zeile der Fehler einsteht;
nämlich hier: Workbooks(varAuswahl).Sheet("Ansichtspinne").Visible = True
Die Variable 'varAuswahl' enthält neben den Dateinamen auch den gesamten Zugriffspfad, also
'C:\Irgendwo\HierVielleicht\abc.xlsx"
Der Befehl muß aber so aufgerufen werden:
Workbooks("abc.xlsx").Sheet("Ansichtspinne").Visible = True
Aber Du kannst das viel einfacher haben: wkbAlt.Sheet("Ansichtspinne").Visible = True
Da Du aber nicht konntrollierst, ob auch die richtige Datei ausgewählt wurde, muß die Datei ja gar kein Tabellenblatt 'Ansichtspinne' besitzen. Deshalb mach es so:
Dim ws as Worksheet
On Error Resume Next
Set ws = wkbAlt.Worksheets("Ansichtspinne")
On Error Goto Beenden
If ws Is Nothing Then
   Msgbox "falsche Datei ausgewählt!",64
GoTo Beenden
End If
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Prüfen ob Sheet vorhanden und wenn ja löschen
22.01.2015 21:03:07
Elias
Hi Luschi
Vielen herzlichen Dank für deine Antwort.
Ich habe nur den Code, der Kursiv ist, geschrieben. Der Rest war schon vorhanden und funktionierte auch so. Du hast mir aber schon sehr weitergeholfen dass varAuswahl der ganze Pfad ist. Würde es nicht reichen, irgendwie aus diesem varAuswahl den Dateinamen zu extrahieren? Und da das ausgewählte Dokument ja schreibgeschützt geöffnet wurde, ist es überhaupt möglich dort Blätter zu löschen oder ein-/auszublenden?
Es ist so, dass alle Dateien, die geupdated werden, die "Ansichtspinne" und die "Gesamtansicht" haben. Es ist aber nicht klar, ob diese Dateien das Blatt "GesamtansichtTotal" haben.

Anzeige
AW: Prüfen ob Sheet vorhanden und wenn ja löschen
22.01.2015 21:55:51
Luschi
Hallo Elias,
dann stimmt etwas mit der Objekt-Zuordnung der Arbeitsmappen nicht:
- bevor man 1 neue Mappe öffnet, sollte man die Mappe qualifizieren in der der Vba-Code steht
- Set wkbUpdate = ActiveWorkbook oder genauer
- Set wkbUpdate = ThisWorkbook
- dann die öffnende Mappe zuordnen
- Set wkbAlt = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
- ab sofort immer mit den Objektvariablenj 'wkbUpdate' & 'wkbAlt' arbeiten
- 'ActiveWorkbook' oder 'Workbooks(varAuswahl)' sind dann tabu
- aber auch sowas ist total schwer zuzuordnen: i = Sheets.Count
- warum nicht: wkbAlt.Sheets.Count
Man kann in Mappen, die man schreibgeschütz öffnet, neue Tabellen erzeugen oder vorhandene auch löschen, Daten in den Zellen eintragen usw - mann kann nur die Änderungen daran nicht abspeichern.
Ich würde die Datei aber so öffnen:
Dim wkbNeu As Workbook
Set wkbNeu =Workbooks.Add("C:\Users\Fuer_Jeden\Downloads\95181.xlsx")
Dann dient diese Datei nur als Vorlage für eine neue Datei.
Soviel erst mal dazu; es ist noch viel zu Tun.
Gruß von Luschi
aus klein-Paris
Anzeige

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige