Microsoft Excel

Herbers Excel/VBA-Archiv

Frage zu ThisWorkbook / activeWorkbook | Herbers Excel-Forum


Betrifft: Frage zu ThisWorkbook / activeWorkbook von: Thomas3
Geschrieben am: 28.08.2008 16:59:42

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

  

Betrifft: AW: Frage zu ThisWorkbook / activeWorkbook von: ChrisL
Geschrieben am: 28.08.2008 17:06:33

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


  

Betrifft: AW: Frage zu ThisWorkbook / activeWorkbook von: Thomas3
Geschrieben am: 28.08.2008 17:25:11

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




  

Betrifft: AW: Frage zu ThisWorkbook / activeWorkbook von: ChrisL
Geschrieben am: 28.08.2008 18:27:15

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


  

Betrifft: AW: Frage zu ThisWorkbook / activeWorkbook von: Thomas3
Geschrieben am: 29.08.2008 12:11:15

Hallo Chris,
ja Wahnsinn...
Genau so ....
Es läuft auf mehreren Rechner "stabil" und passt also.
Ganz lieben Dank für die Hilfe
Thomas


  

Betrifft: AW: Frage zu ThisWorkbook / activeWorkbook von: dan
Geschrieben am: 28.08.2008 17:36:56

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.


  

Betrifft: AW: Frage zu ThisWorkbook / activeWorkbook von: Thomas3
Geschrieben am: 29.08.2008 12:12:21

Hallo Dan,
ganz herzlichen Dank. Das hat sehr geholfen
Thomas