268 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)

Hallo,

ich habe folgende Befehlsfolge in einer Anwendung und möchte ein anderes Tabellenblatt in einer anderen Datei aktivieren:

Workbooks.Open "C:\.....\..\Datei.xlsm"
Set MTG = Workbooks("Datei.xlsm").Sheets("Mitglieder")
MTG.Activate

Leider wird der Befehl nicht ausgeführt und das neue Tabellenblatt nicht aktiviert. Hat jemand einen Tipp, woran das liegen könnte?

Danke und Gruß

A.

8 Antworten

+1 Punkt
Beantwortet von
Wozu so umständlich ,besser so!

Workbooks.Open "C:\.....\..\Datei.xlsm").Sheets("Mitglieder").Activate

Sollte es dennoch zu einer Fehlermeldung kommen ,stimmt der Pfad nicht oder ein beliebiger Schutz ist Aktiv!
0 Punkte
Beantwortet von beverly_ Experte (3.4k Punkte)

Hi,

nach dem Öffnen einer Mappe ist diese immer die aktive - deshalb sollte eigentlich dieser Code ausreichend sein:

Workbooks.Open "C:\.....\..\Datei.xlsm"
Sheets("Mitglieder").Activate

Bis später, Karin

0 Punkte
Beantwortet von vbastler Mitglied (325 Punkte)

Hi,

"Wozu so umständlich" Der Einzeiler von Anonym macht doch genau den kurzen Weg ...

Grüße

d'r Bastler von den VBAsteleien.de

0 Punkte
Beantwortet von
Hallo,

allen dreien vielen Dank für euren Input!!!

Beim testen bin ich allerdings dann doch noch auf den möglichen Fehler gestoßen. Die Datei mit dem zu aktivierenden Tabellenblatt war schon offen, so dass der code workbooks.open... gar nicht ausgeführt wurde und die diese Datei dann auch nicht aktiv wurde. Ich muss jetzt vorher noch eine entsprechende Abfrage einbauen...

VG A.
0 Punkte
Beantwortet von vbastler Mitglied (325 Punkte)

Moin A.

das kannst du vielleicht einfach mit On Error Resume Next vor dem Open abfangen. Das Activate käme dann eine Zeile später.

Grüße d'r Bastler on den VBAsteleien.de

0 Punkte
Beantwortet von
OK, ich probiere das. Komisch war nur, dass ich bisher keine Fehlermeldung erhalten habe, wenn die Datei bereits geöffnet war und ich den workbooks. open... ausgeführt habe. Der Code hat den Befehl einfach ignoriert und hat das bisherige Tabellenblattes weiter aktiv gehalten.
Danke und Gruß A.
0 Punkte
Beantwortet von beverly_ Experte (3.4k Punkte)

Hi,

On Error Resume Next sollte man nur dann verwenden wenn es keine andere Möglichkeit der Prüfung gibt - alles andere gilt als unprofessionell. Und im gegebenen Fall kann man ganz einfach prüfen, ob eine Mappe bereits geöffnet ist, indem man in einer Schleife über alle Mappen läuft und ihre Namen vergleicht - und zwar z.B. so:

    Dim wkbMappe As Workbook
    Dim blnOffen As Boolean
    For Each wkbMappe In Workbooks
        If wkbMappe.Name = "Datei.xlsm" Then
            blnOffen = True
            Exit For
        End If
    Next wkbMappe
    If blnOffen = False Then Workbooks.Open "C:\.....\..\Datei.xlsm"
    Workbooks("Datei.xlsm").Sheet("Mitglieder").Activate

Übrigens: hier muss man vor Sheets("Mitglieder").Activate unbedingt noch den Mappennamen setzen, weil es sein könnte, dass eine ander Mappe als Datei.xlsm gerade aktiv ist und dann würde entweder das Tabellenblatt in der falschen Mappe aktiviert, falls diese ebenfalls ein Blatt namens "Mitglieder" hat, oder es gäbe einen Laufzeitfehler, falls sie kein gleichnamiges Blatt beinhaltet.

Bis später, Karin

0 Punkte
Beantwortet von
Hallo d'r Bastler on den VBAsteleien.de

Für dich eine Variante ohne On Error und ohne Schleife ,viel spass damit!

VBA7

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Sub DateiPrüfung()
    Dim WbName As String
    WbName = "Mappe1.xlsm"
    If IsWorkbookOpen(WbName) = True Then
     MsgBox WbName & " ist geöffnet!"
    Else
     MsgBox WbName & " ist nicht geöffnet!"
    End If
End Sub

Function IsWorkbookOpen(FileName As String) As Boolean
    Dim hwnd As LongPtr
    Dim WbName As String
    Dim fullWindowTitle As String
    WbName = Mid(FileName, InStrRev(FileName, "\") + 1)
    fullWindowTitle = WbName & " - Excel"
    hwnd = FindWindow("XLMAIN", fullWindowTitle)
    If hwnd = 0 Then
        IsWorkbookOpen = False
    Else
        IsWorkbookOpen = True
    End If
End Function
...