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

Frage zu ThisWorkbook / activeWorkbook

Forumthread: Frage zu ThisWorkbook / activeWorkbook

Frage zu ThisWorkbook / activeWorkbook
28.08.2008 16:59:00
Thomas3
Hallo zusammen,
folgende Frage.
Ich habe zwei Dateien offen.
Datei 1 ist meine Datei, aus der ich mittels Macro verschiedene Ablauf starte. Diese ist bei mir definiert mit ThisWorkbook
Datei 2 ist eine Datei, in der das Macro aus Datei 1 eingreifen soll. Diese ist definiert bei mir als ActiveWorkbook.
Folgenden Ablauf habe ich im Macro geschrieben
in ThisWorkbook soll ein Sort laufen, nicht benötigte Zeilen werden gelöscht, die benötigten werden in den Zwischenspeicher geschoben.
Dann wird die zu bearbeitende Datei gesucht und geöffnet ( ab jetzt ActiveWorkbook ), letzte Zeile gesucht, der vorhin kopierte Bereich aus dem Zwischenspeicher in die Datei 2 kopiert
Wechsel wieder in ThisWorkbook ( Befehl lautet : ThisWorkbook.Sheet("Tabelle1").activate ), die kopierten Zeilen werden gelöscht
( Ab hier Problem )Wechsel in die Datei 2 ( Befehl lautet : ActiveWorkbook.Sheet("Liste"), um dann dort wieder was zu kopieren und das Kopierte in die Datei 1 zu transferieren.
Das geht auch wunderbar. Bis zu dem Punkt, an dem ich wieder in die Datei 2 will. Da hängt sich das Ganze auf und will nicht mehr.
Hat einer einer Idee, woran das liegen könnte ?
Viele Grüße
Thomas
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu ThisWorkbook / activeWorkbook
28.08.2008 17:06:00
ChrisL
Hallo Thomas
Könntest mal den Code (oder noch besser Beispielmappe) zeigen. Versprechen kann ich nichts, aber vielleicht lässt sich daran etwas erkennen. Generell scheint es mir schon unglücklich, dass du hin und her wechseln tust, sollte auch ohne Wechsel machbar sein.
Gruss
Chris
AW: Frage zu ThisWorkbook / activeWorkbook
28.08.2008 17:25:00
Thomas3
Hallo Chris,
Siehe Unten
Lieben Dank für jeden Hinweis
Thomas

Sub daten_übertragen()
Dim masterdatei As String
'Bildschirm einfrieren
Application.ScreenUpdating = False
'anzahl zeilen zählen
lzeileTW = Sheets("Arbeits_Tabelle").Cells(Rows.Count, 1).End(xlUp).Row
'Bereich zum Sortieren festlegen
Range(Cells(13, 1), Cells(lzeileTW, 20)).Select
'nach den markierten Änderungzeilen sortieren
Selection.Sort Key1:=Range("T14"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'übrige Zeilen löschen
lzeileTW_20 = Sheets("Arbeits_Tabelle").Cells(Rows.Count, 20).End(xlUp).Row
anzahl_zeilen_mit_x = lzeileTW_20 - 13
Range(Cells(14 + anzahl_zeilen_mit_x, 1), Cells(lzeileTW, 20)).Select
Selection.Clear
'Zeilen mit X kopieren
Range(Cells(14, 1), Cells(13 + anzahl_zeilen_mit_x, 17)).Select
Selection.Copy
'Dateiname Masterdatei festlegen
pfad = ThisWorkbook.Worksheets("Arbeits_Tabelle").Cells(8, 3).Value & "\"
datei = ThisWorkbook.Worksheets("Arbeits_Tabelle").Cells(9, 3).Value
masterdatei = pfad & datei
'

Function starten zum schauen, ob Masterdatei offen
iOpen = TestOpen(masterdatei)
neuer_versuch:
Select Case iOpen
'Fall 1 : Datei ist verfügbar
Case 0: GoTo weiter
'Fall 2 : Datei bereits offen
Case 1: GoTo neuer_versuch
End Select
weiter:
'Masterdatei öffnen
Workbooks.Open Filename:=masterdatei
Sheets("Liste").Activate
'letzte beschriebene Zeile definieren
lzeileAW = Sheets("Liste").Cells(Rows.Count, 1).End(xlUp).Row
Cells(lzeileAW + 1, 1).Select
'Bereich einfügen
ActiveSheet.Paste
'Daten sortieren
lzeileAW = Sheets("Liste").Cells(Rows.Count, 1).End(xlUp).Row
Range("A1").Select
Application.CutCopyMode = False
Range(Cells(1, 1), Cells(lzeileAW, 17)).Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:= _
Range("A2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal
'kopierte Zeilen löschen
ThisWorkbook.Sheets("Arbeits_Tabelle").Activate
Range(Cells(14, 1), Cells(13 + anzahl_zeilen_mit_x, 20)).Select
Selection.Clear
'gesamte neue Liste kopieren
ActiveWorkbooks(masterdatei).Activate              ---------- Laufzeitfehler 9
Range(Cells(2, 1), Cells(lzeileAW, 17)).Copy
ThisWorkbook.Worksheets("Arbeits_Tabelle").Activate
Cells(14, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'um die geöffnete Auslesedatei schließen zu können
'Dateinamen definieren
suche1 = ThisWorkbook.Sheets("Zu Beginn").Cells(12, 2).Value
Workbooks(suche1).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=True
'Bildschirm auftauen
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Frage zu ThisWorkbook / activeWorkbook
28.08.2008 18:27:15
ChrisL
Hallo Thomas
Ergänzend zu Dan
Vorteilhaft wär wenn alle Select und Activate weg wären d.h. aus...
ThisWorkbook.Sheets("Arbeits_Tabelle").Activate
Range(Cells(14, 1), Cells(13 + anzahl_zeilen_mit_x, 20)).Select
Selection.Clear
wird...
ThisWorkbook.Sheets("Arbeits_Tabelle").Range(Cells(14, 1), Cells(13 + anzahl_zeilen_mit_x, 20)).Clear
Und wenn du dann noch die Variablen definiert hast...
Dim WB As Workbook
Dim WS AS Worksheet
Set WB = ThisWorkbook
Set WS = WB.Sheets("Arbeits_Tabelle")
WS.Range(Cells(14, 1), Cells(13 + anzahl_zeilen_mit_x, 20)).Clear
(ist als Beispiel gedacht)
Gruss
Chris
Anzeige
AW: Frage zu ThisWorkbook / activeWorkbook
29.08.2008 12:11:00
Thomas3
Hallo Chris,
ja Wahnsinn...
Genau so ....
Es läuft auf mehreren Rechner "stabil" und passt also.
Ganz lieben Dank für die Hilfe
Thomas
AW: Frage zu ThisWorkbook / activeWorkbook
28.08.2008 17:36:00
dan
Hallo Thomas, ich weiss nicht, ob ich Dein Problem richtig verstanden habe aber laut Help:
ActiveWorkbook Property: Returns a Workbook object that represents the workbook in the active window (the window on top)
ThisWorkbook Property: Returns a Workbook object that represents the workbook where the current macro code is running
Mach es so, dass die beiden Workbooks mit einer Variable definiert sind.
Z.B.
dim bookSource as workbook
dim bookTarget as workbook
set bookSource = workbooks("sourceBookName")
set bookTarget = workbooks("targetBookName") ... bzw. set bookTarget = workbooks.open(...)
und dann benutze immer die Variablen bookSource und bookTarget.
Gruss Dan, cz.
Anzeige
AW: Frage zu ThisWorkbook / activeWorkbook
29.08.2008 12:12:00
Thomas3
Hallo Dan,
ganz herzlichen Dank. Das hat sehr geholfen
Thomas
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Umgang mit ThisWorkbook und ActiveWorkbook in Excel VBA


Schritt-für-Schritt-Anleitung

Um mit ThisWorkbook und ActiveWorkbook in Excel VBA effektiv zu arbeiten, befolge diese Schritte:

  1. Definiere die Variablen: Erstelle Variablen für die Arbeitsmappen. Dies verbessert die Lesbarkeit und reduziert Fehler.

    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Arbeits_Tabelle")
  2. Verwende ThisWorkbook für das laufende Makro: Wenn dein Makro in einer bestimmten Datei läuft, verwende ThisWorkbook, um sicherzustellen, dass du auf die richtige Datei zugreifst.

  3. Öffne ActiveWorkbook: Wenn du mit einer anderen Datei arbeitest, wie z.B. ActiveWorkbook, stelle sicher, dass du sie korrekt öffnest und darauf zugreifst.

    Workbooks.Open Filename:="C:\Pfad\zur\Datei.xlsx"
  4. Kopiere Daten zwischen Arbeitsmappen: Nutze den Zwischenspeicher für das Kopieren von Daten.

    ws.Range("A1:B10").Copy
    ActiveWorkbook.Sheets("Zielblatt").Range("A1").PasteSpecial Paste:=xlPasteValues
  5. Schließe die Dateien: Schließe die Arbeitsmappen am Ende deines Makros, um die Ressourcen freizugeben.

    ActiveWorkbook.Close SaveChanges:=True

Häufige Fehler und Lösungen

  • Fehler 9 - Index außerhalb des gültigen Bereichs: Dieser Fehler tritt auf, wenn du versuchst, auf ein Arbeitsblatt zuzugreifen, das nicht existiert. Überprüfe die Namen der Blätter.

  • Makro bleibt hängen: Wenn du zwischen ThisWorkbook und ActiveWorkbook hin und her wechselst, könnte das Makro hängen bleiben. Vermeide überflüssige Select und Activate Befehle. Nutze stattdessen direkt die Objekte, wie z.B.:

    wb.Sheets("Tabelle1").Range("A1").Value = "Test"

Alternative Methoden

  • Vermeidung von Select und Activate: Stattdessen kannst du direkt auf die Bereiche zugreifen. Zum Beispiel:

    ThisWorkbook.Sheets("Tabelle1").Range("A1").Value = "Neuer Wert"
  • Nutzung von Variablen: Definiere deine Arbeitsmappen und Arbeitsblätter zu Beginn deines Makros, um den Code klarer und effizienter zu gestalten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit ThisWorkbook und ActiveWorkbook arbeiten kannst:

Sub DatenTransfer()
    Dim wbSource As Workbook
    Dim wbTarget As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet

    Set wbSource = ThisWorkbook
    Set wsSource = wbSource.Sheets("Arbeits_Tabelle")

    Set wbTarget = Workbooks.Open("C:\Pfad\zur\Zieldatei.xlsx")
    Set wsTarget = wbTarget.Sheets("Zielblatt")

    wsSource.Range("A1:A10").Copy
    wsTarget.Range("A1").PasteSpecial Paste:=xlPasteValues

    wbTarget.Close SaveChanges:=True
End Sub

Tipps für Profis

  • Optimierung der Leistung: Deaktiviere die Bildschirmaktualisierung mit Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit zu erhöhen.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Probleme während der Ausführung zu vermeiden:
    On Error GoTo FehlerHandler
    ' ... dein Code ...
    Exit Sub
    FehlerHandler:
    MsgBox "Fehler: " & Err.Description

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen ThisWorkbook und ActiveWorkbook? ThisWorkbook bezieht sich auf die Arbeitsmappe, in der das Makro ausgeführt wird, während ActiveWorkbook die aktuell aktive Arbeitsmappe darstellt, die möglicherweise eine andere Datei sein kann.

2. Wie kann ich sicherstellen, dass ich die richtige Arbeitsmappe anspreche? Verwende immer ThisWorkbook für die Arbeitsmappe, in der dein Makro läuft, und definiere ActiveWorkbook nur, wenn du mit einer anderen Datei arbeitest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige