Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: workbook activate

workbook activate
21.08.2007 15:33:33
Rainer
Guten nachmittag allerseits
ich habe trotz der ausführlichen aktivitäten zu diesem Thema nicht genau das gefunden was ich brauche. Ich habe ein etwas spezielleres problem.
Ich öffne mit einer Datei ("Tool_Master") zwei andere. Der Pfad und Dateiname dieser zwei neuen Dateien, nennen wir sie A und B, liegen im Tabellenblatt "Pfade Originaldateien" im File "Tool_Master.xls.
Pfad Datei A: Zelle B8
Dateinamen Datei A: C8
Pfad Datei B: Zelle B9
Pfad Datei C: Zelle C9
In der Spalte D sind Pfad und dateinamen zusammengehängt in einer Zelle
Das öffnen klappt ganz prima. Nur möchte ich die Files danach auch wieder schliessen. Und bei meinem bescheidenen Wissensstand von VBA habe ich versucht, zuerst das zu schliessende File zu aktivieren,, um es dann zu schliessen. Aber genau das habe ich nicht hingekriegt.
Hier habe ich noch meinen Code (ich hoffe es wird euch nicht grad schlecht falls es krüpplig programmiert ist. Ich habe einfach mal soviel ich konnte zusammengebastelt ;-)

Sub CashDiscount()
Public wksQuelle As Worksheet
Public wksZiel As Worksheet
Public wbkQuelle As Workbook
Public wbkZiel As Workbook
For Each wbkQuelle In Application.Workbooks
If LCase(wbkQuelle.Name) = LCase(Range("D8")) Then Exit For
Next
If wbkQuelle Is Nothing Then
Set wbkQuelle = Workbooks.Open(Worksheets("Pfade Originaldateien").Range("D8"))
End If
Workbooks("Tool_Master.xls").Activate
Sheets("Pfade Originaldateien").Select
For Each wbkZiel In Application.Workbooks
If LCase(wbkZiel.Name) = LCase(Range("D9")) Then Exit For
Next
If wbkZiel Is Nothing Then
Set wbkZiel = Workbooks.Open(Worksheets("Pfade Originaldateien").Range("D9"))
End If
Set wksQuelle = wbkQuelle.Worksheets("Tabelle2")
Set wksZiel = wbkZiel.Worksheets("Tabelle1")
lngBisZeile = wksZiel.Cells(Rows.Count, lngSpalteZielA).End(xlUp).Row
'hier käme noch mehr Funktionalität, aber das sollt keine Rolle spielen, denn der Fehler ist  _
der selbe wenn ich's ausgeklammert habe.
Application.Workbooks("wbkQuelle").Activate
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub


bei deisem Code sagt er mir, der Index läge ausserhalb des gültigen bereichs. Ich denke es stimmt etwas mit dieser Syntax nicht: "Application.Workbooks("wbkQuelle").Activate
". liege ich da richtig?
ich würde mich über einen Tipp freuen
Viele Grüsse
Rainer

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: workbook activate
21.08.2007 15:38:00
Rudi
Hallo,
du hast doch schon so schön Objektvariablen verwendet.
Anstatt
Application.Workbooks("wbkQuelle").Activate
ActiveWorkbook.Save
ActiveWorkbook.Close
einfach
wbkQuelle.close true
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
du bist super!
21.08.2007 16:24:52
Rainer
danke, hat bestens geklappt.
ps: ja, ich gebe mir ja auch mühe! ;-)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Workbook Aktivieren und Schließen in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA ein Workbook zu aktivieren und anschließend zu schließen, kannst du folgende Schritte befolgen:

  1. Workbook öffnen: Stelle sicher, dass du das gewünschte Workbook öffnest, bevor du es aktivierst.

    Set wbkQuelle = Workbooks.Open(Worksheets("Pfade Originaldateien").Range("D8"))
  2. Workbook aktivieren: Verwende die Activate-Methode, um das Workbook aktiv zu machen.

    wbkQuelle.Activate
  3. Änderungen speichern und schließen: Speichere das Workbook und schließe es anschließend.

    ActiveWorkbook.Save
    ActiveWorkbook.Close

Stelle sicher, dass du die richtigen Referenzen verwendest, um Fehler zu vermeiden.


Häufige Fehler und Lösungen

Fehler: Index liegt außerhalb des gültigen Bereichs

  • Ursache: Dies passiert häufig, wenn du versuchst, ein Workbook zu aktivieren, das nicht geöffnet ist oder nicht existiert.
  • Lösung: Überprüfe, ob das Workbook tatsächlich geöffnet ist. Anstelle von Application.Workbooks("wbkQuelle").Activate, verwende einfach wbkQuelle.Activate.

Fehler bei der Verwendung von ActiveWorkbook

  • Ursache: Wenn kein Workbook aktiv ist, führt der Befehl ActiveWorkbook.Save zu einem Fehler.
  • Lösung: Verwende stattdessen die spezifische Workbook-Referenz, z.B. wbkQuelle.Save.

Alternative Methoden

Wenn du ein Workbook aktivieren möchtest, ohne die Activate-Methode zu nutzen, kannst du auch die Set-Anweisung verwenden, um die Referenz direkt zu setzen:

Dim wbk As Workbook
Set wbk = Workbooks.Open("Pfad\zu\deinem\Workbook.xlsx")
' Arbeiten mit wbk anstelle von ActiveWorkbook
wbk.Save
wbk.Close

Diese Methode ist weniger fehleranfällig und ermöglicht eine klarere Programmstruktur.


Praktische Beispiele

Hier ein Beispiel, das zeigt, wie du mehrere Workbooks öffnen, aktivieren und schließen kannst:

Sub ManageWorkbooks()
    Dim wbkA As Workbook
    Dim wbkB As Workbook

    ' Workbook A öffnen und aktivieren
    Set wbkA = Workbooks.Open("Pfad\zu\deinem\WorkbookA.xlsx")
    wbkA.Activate

    ' Workbook B öffnen und aktivieren
    Set wbkB = Workbooks.Open("Pfad\zu\deinem\WorkbookB.xlsx")
    wbkB.Activate

    ' Änderungen speichern und Workbooks schließen
    wbkA.Save
    wbkA.Close
    wbkB.Save
    wbkB.Close
End Sub

In diesem Beispiel werden die Workbooks nacheinander geöffnet, aktiviert und anschließend geschlossen.


Tipps für Profis

  • Verwende Objektvariablen: Es ist ratsam, Objektvariablen für Workbooks zu verwenden, anstatt ActiveWorkbook direkt zu nutzen. Dies erhöht die Lesbarkeit und verringert die Wahrscheinlichkeit von Fehlern.
  • Fehlerbehandlung implementieren: Nutze On Error Resume Next, um potenzielle Laufzeitfehler abzufangen und den Code robuster zu machen.
  • Dokumentiere deinen Code: Schreibe Kommentare, um die Funktionalität deines Codes zu erklären, insbesondere, wenn du mit mehreren Workbooks arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich ein Workbook in VBA aktivieren? Um ein Workbook zu aktivieren, kannst du die Activate-Methode verwenden. Beispiel:

Workbooks("DeinWorkbook.xlsx").Activate

2. Was ist der Unterschied zwischen ActiveWorkbook und einer Workbook-Referenz? ActiveWorkbook bezieht sich auf das derzeit aktive Workbook, während eine Workbook-Referenz (z.B. wbkA) direkt auf ein bestimmtes Workbook verweist. Es ist sicherer, eine Referenz zu verwenden, um unerwünschte Fehler zu vermeiden.

3. Wie schließe ich ein Workbook ohne zu speichern? Du kannst ein Workbook schließen, ohne zu speichern, indem du wbk.Close False verwendest:

wbkA.Close False

Nutze diese Informationen, um effizient mit Workbooks in Excel VBA zu arbeiten.

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