Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro - falsche Arbeitsmappe wird verwendet

Makro - falsche Arbeitsmappe wird verwendet
30.05.2008 13:33:43
David
Hallo zusammen,
ich auch mal wieder als Fragesteller bei einem VBA-Problem.
Folgendes Makro lief bisher ganz gut, nach einigen Änderungen zwecks Erweiterung auf ein zweites Arbeitsblatt hakt's aber.
Hier der aktuelle Code:

Sub Actual_Budget_2008_anpassen()
Application.ScreenUpdating = False
Dim wkb As Workbook
Dim wks1, wks2 As Worksheet
Set wkb = Workbooks("Actual_Budget_2008.xls")
Set wks1 = Worksheets("Europe by Country")
Set wks2 = Worksheets("SFG")
wkb.Activate
wks1.Activate
With wkb
For i = 1 To 2
wks1.Range("A1").EntireColumn.Insert
wks1.Range("A1").EntireRow.Insert
Next i
Range("C5").EntireRow.Insert
End With
With wks1
Dim spalte As Integer, vergleich As String
For spalte = 1 To .Cells(2, .Columns.Count).End(xlUp).Column
vergleich = .Cells(3, spalte)
If Left(vergleich, 1) = "Q" Then
Cells(1, spalte + 1).EntireColumn.Insert
ElseIf vergleich = "01.01.2008" Then
Cells(1, spalte).EntireColumn.Insert
spalte = spalte + 1
End If
Next
End With
wks2.Activate
For i = 1 To 2
Range("A1").EntireColumn.Insert
Next i
Range("C5").EntireRow.Insert
With wks2
For spalte = 1 To .Cells(2, .Columns.Count).End(xlUp).Column
vergleich = .Cells(3, spalte)
If Left(vergleich, 1) = "Q" Then
Cells(1, spalte + 1).EntireColumn.Insert
ElseIf vergleich = "01.01.2008" Then
Cells(1, spalte).EntireColumn.Insert
spalte = spalte + 1
End If
Next
End With
Workbooks.Open ("L:\Finanz\manacs\manacs 2008\04-2008\Actual_Budget_2008 (neu).xls")
wks1.Activate
Cells.Copy
Windows("Actual_Budget_2008.xls").Activate
wks1.Activate
Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
X   Windows("Actual_Budget_2008 (neu).xls").Activate
X   wks2.Activate
Cells.Copy
Windows("Actual_Budget_2008.xls").Activate
wks2.Activate
Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Dim monat As Double, file_new, tmonat As String
Do Until monat >= 1 And monat 


Die problematische Stelle ist folgende (oben mit X am Anfang gekennzeichnet):
Windows("Actual_Budget_2008 (neu).xls").Activate
wks2.Activate
Die Ziel-Mappe hat die gleichen Tabellenblattnamen. Er aktiviert die ...(neu)-Datei und bei der nächsten Tabelle springt das Makro aber wieder zur ersten Datei. Warum, verstehe ich nicht.
Ich bin mir bewusst, dass sicher an den meisten (oder allen) Stellen das Activate wegkann, aber muss mich da immer schrittweise hinarbeiten, da reichen meine VBA-Kenntnisse sonst nicht. Auch über sonstige "Umständlichkeiten" dürft ihr gern hinwegsehen (Verbesserungsvorschläge trotzdem immer willkommen!).
Noch kurz zum Hintergrund: Ich bekomme jeden Monat eine Datei, die ich nach neuem Muster umformatiere. Dies soll das Makro automatisieren.
Für alle Hilfe vorab schon mal ein großes Dankeschön.
Gruß
David

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro - falsche Arbeitsmappe wird verwendet
30.05.2008 15:54:00
fcs
Hallo David,
entweder du arbeitst für die neue Datei mit eigenen Workbokk und Worksheet-Objektvariablen.
So hab ich das unten geändert.
Oder du muss die Objekte die du aktivieren willst jeweils bei ihrem Nahmen, z.B Worksheets("SFG") ansprechen.
Den Variablen wks1 und wks2 hast du mit der Set-Anweisung zu Beginn deiner Prozedur die beiden Tabellenblätter in der "alten" Datei zugewiesen, du hast diesen Variablen nicht die Namen der Blätter zugewiesen. Diese Zuweisung bis zu einer Änderung oder dem Ende der Prozedur erhalten.
Um die "häßlichen" Activates hab ich mich nicht gekümmert. Aber diese können bei konsequenter Verwendung der Objektvariabln für die Tabellen komplett rausfliegen.
Gruß
Franz

Sub Actual_Budget_2008_anpassen()
Application.ScreenUpdating = False
Dim wkb As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet              '####
Dim wkbNeu As Workbook                                '####
Dim wks1Neu As Worksheet, wks2Neu As Worksheet        '####
Set wkb = Workbooks("Actual_Budget_2008.xls")
Set wks1 = Worksheets("Europe by Country")
Set wks2 = Worksheets("SFG")
wkb.Activate
wks1.Activate
With wkb
For i = 1 To 2
wks1.Range("A1").EntireColumn.Insert
wks1.Range("A1").EntireRow.Insert
Next i
Range("C5").EntireRow.Insert
End With
With wks1
Dim spalte As Integer, vergleich As String
For spalte = 1 To .Cells(2, .Columns.Count).End(xlUp).Column
vergleich = .Cells(3, spalte)
If Left(vergleich, 1) = "Q" Then
Cells(1, spalte + 1).EntireColumn.Insert
ElseIf vergleich = "01.01.2008" Then
Cells(1, spalte).EntireColumn.Insert
spalte = spalte + 1
End If
Next
End With
wks2.Activate
For i = 1 To 2
Range("A1").EntireColumn.Insert
Next i
Range("C5").EntireRow.Insert
With wks2
For spalte = 1 To .Cells(2, .Columns.Count).End(xlUp).Column
vergleich = .Cells(3, spalte)
If Left(vergleich, 1) = "Q" Then
Cells(1, spalte + 1).EntireColumn.Insert
ElseIf vergleich = "01.01.2008" Then
Cells(1, spalte).EntireColumn.Insert
spalte = spalte + 1
End If
Next
End With
Set wkbNeu = _
Workbooks.Open("L:\Finanz\manacs\manacs 2008\04-2008\Actual_Budget_2008 (neu).xls") '### _
Set wks1Neu = wkbNeu.Worksheets("Europe by Country")    '####
Set wks2Neu = wkbNeu.Worksheets("SFG")                  '####
wks1Neu.Activate
Cells.Copy
Windows("Actual_Budget_2008.xls").Activate
wks1.Activate
Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
wkbNeu.Activate                         '####
wks2Neu.Activate                        '####
Cells.Copy
Windows("Actual_Budget_2008.xls").Activate
wks2.Activate
Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Dim monat As Double, file_new, tmonat As String
Do Until monat >= 1 And monat 


Anzeige
AW: Makro - falsche Arbeitsmappe wird verwendet
02.06.2008 09:36:00
David
Funzt perfekt, vielen Dank für deine Mühen. Konnte es eben erst testen, da deine Anwort am Freitag zu spät kam und ich schon Feierabend hatte.
Tja, mit dem Select und Activate hab ich noch so meine Probleme. Da ich mich vom Makrorekorder "hochgearbeitet" habe, sind da noch so einige Sachen hängen geblieben. Ich versuch's aber meist hinterher zu bereinigen. Auch mit den Variablen-Deklarationen und ähnlichem (z. Bsp. der With-Anweisung) hab ich noch so meine Schwierigkeiten.
Ist halt alles "Learning by Doing".
Also nochmal vielen Dank.
Gruß
David

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige