Datei schließen über VBA / Hilfe bei Code
17.08.2005 12:19:15
Torsten K.
eine Datei ("Blanco_INVBU.xls")/("wb1") möchte ich unter anderem Namen ("IT_Budget_2005.xls")/("wb2") speichern, diese Kopie dann öffnen, einige WS löschen, überflüssigen VBA-Code und Buttons löschen, als Mail-Anhang direkt aus Excel versenden, wieder schließen und dann die Kopie wieder löschen. Mit folgendem Code habe ich das meiste bereits realisiert. Nur das Schließen der Kopie schlägt jedesmal Fehl:
Private Sub cmb_SEND_Click()
If Sheets("ENTBUDIT").Range("G7").Value = "" Then
If MsgBox("Soll die Datei jetzt gesendet werden?", vbYesNo) = vbYes Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb1 As Workbook
Dim wb2 As Workbook
Set wb1 = ThisWorkbook
ThisWorkbook.SaveCopyAs "C:\Dokumente und Einstellungen\IT_Budget_2005.xls"
' *** Hier wird IT_Budget_2005.xls zum ActiveWorkbook !!!
Workbooks.Open "C:\Dokumente und Einstellungen\IT_Budget_2005.xls"
' *** Es werden Makros beim Öffnen der Datei gestartet.
' *** Diese müssen zunächst beendet werden !
Set wb2 = Workbooks("IT_Budget_2005.xls")
wb2.RunAutoMacros xlAutoClose
wb2.Sheets("ENTBUDIT").Unprotect Password:="maze"
With wb2.Sheets("ENTBUDIT").Range("C1:D5")
.Copy
.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
With wb2
.Sheets("START").Delete
.Sheets("ENTBUD").Delete
.Sheets("ENTNONBUD").Delete
.Sheets("PROTOC").Delete
End With
Application.DisplayAlerts = True
Dim wks As Worksheet
Dim cb As Object
With Sheets("ENTBUDIT")
.Unprotect Password:="maze"
.Activate
End With
Set wks = ActiveSheet
'Löschen des Codes aus "Diese Arbeitsmappe"
With wb2.VBProject
With .VBComponents("DieseArbeitsmappe").CodeModule
.DeleteLines 1, .CountOfLines
End With
End With
'Löschen des VBA-Codes aus dem aktiven WS
With wb2.VBProject _
.VBComponents(wks.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
'Löschen aller cmb_Buttons im aktiven WS
For Each cb In wks.OLEObjects
If TypeName(cb.Object) = "CommandButton" Then
cb.Delete
End If
Next cb
'Löscht Module im aktiven WB
With wb2.VBProject
.VBComponents.Remove .VBComponents("Modul1")
.VBComponents.Remove .VBComponents("Modul3")
End With
wb2.Sheets("ENTBUDIT").Protect Password:="maze"
wb2.Sheets("ENTBUDIT").Range("A1").Select
wb2.Save
Dim dummy As Variant
Dim irow As Integer
dummy = SendNotesMail("IT_Bedarf 2005 / " & Sheets("ENTBUDIT").Range("C5").Value _
& " / " & Sheets("ENTBUDIT").Range("C4").Value, _
"C:\Dokumente und Einstellungen\IT_Budget_2005.xls", "tkreuer@grundfos.de", "", True)
wb2.Save
' Umschalten auf das ursprüngliche Workbook
wb1.Activate
' Löschen der temporären Datei
Application.DisplayAlerts = False
wb2.Close
Kill "C:\Dokumente und Einstellungen\IT_Budget_2005.xls"
End Sub
Excel steigt an der Stelle "wb2.Close" aus mit folgendem Fehler:
"Laufzeitfehler 9: Index außerhalb des gültigen Bereichs". Dann wird Excel komplett geschlossen. Wenn ich dann die Datei im Anschluß wieder öffnen möchte, erhalte ich den Hinweis, daß diese bereits geöffnet sei. Ich muß den rechner also komplett runter- und dann wieder rauffahren, um an meine Datei zu kommen.
Was mache denn hier noch falsch?
Für Eure Hilfe im voraus besten Dank.
Gruß
Torsten