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

Forumthread: Per VBA Workbook in den Vordergrund holen

Per VBA Workbook in den Vordergrund holen
08.10.2015 10:45:44
Kai
Liebe Forumsgemeinde,
das ist mein erster Beitrag; ich bitte bei groben Fehlern um Nachsicht und Hilfe.
Ich versuche gerade folgendes:
Ich habe eine Arbeitsmappe mit einem leeren Tabellenblatt und rufe per Makro eine userform auf. _
Über diese userform wird eine zweite Arbeitsmappe über

Set oFileDialog = Application.FileDialog(msoFileDialogOpen)

geöffnet und über die Auswahl von verschiedenen Buttons manipuliert. Mit einem Button-Klick soll die userform ausgeblendet und die zweite geöffnete Arbeitsmappe zu direkten Eingabe in den Vordergrund geholt werden. Gerade das klappt aber nicht. Es ist immer die Arbeitsmappe, aus der heraus ich das Makro starte, im Vordergrund.
Folgende Versuche brachten Fehler bzw. gar keinen Effekt:
Private Sub btn_LV_Click()
Dim LastRow As Integer
LastRow = 3
If AktWorkbook Is Nothing Then
MsgBox ("Bitte zuerst Auftrag laden/erzeugen")
Exit Sub
Else
AktWorkbook.Worksheets("LV").Activate
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(LastRow + 1, 1).Select
'AktWorkbook.Activate => kein Effekt
'Windows(AktWorkbook.Name).WindowState = xlMaximized => Kein Effekt
'AppActivate AktWorkbook.Name => Fehlermeldung
'AppActivate Application.Caption => Fehlermeldung
Me.Hide
End If
End Sub
Hat jemand eine Idee, wie ich das hinbekomme?
Vielen Dank im Voraus
Kai

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per VBA Workbook in den Vordergrund holen
08.10.2015 11:05:57
Tino
Hallo,
wo und wie wird AktWorkbook eine Excelmappe zugewiesen?
Evtl. ist es ja die falsche!
Gruß Tino

AW: Per VBA Workbook in den Vordergrund holen
08.10.2015 11:35:48
Kai
Hallo Tino,
AktWorkbook ist deklariert als
Public AktWorkbook as Workbook und wird über:
Private Sub btn_load_Auftrag_Click()
'Hier die Möglichkeit, einen Auftrag für die weitere Be-/Abarbeitung zu laden.
'Dabei soll in der zu ladenden Datei geguckt werden, ob die zwingenden Daten sprich Tabellen  _
vorhanden sind
Dim oFileDialog As FileDialog
frm_menu.Hide
Set oFileDialog = Application.FileDialog(msoFileDialogOpen)
With oFileDialog
.Title = "Auftrag einlesen"
.Filters.Add "XLS-Dateien", "*.xls", 1
If .Show = -1 Then
Application.ScreenUpdating = False
Set AktWorkbook = Workbooks.Open(.SelectedItems(1))
Application.ScreenUpdating = True
If Not WorksheetEx(AktWorkbook, "INI") Then
MsgBox "Kein gültiger Auftrag"
AktWorkbook.Close
End If
End If
End With
If Not AktWorkbook Is Nothing Then
frm_menu.Caption = "Hauptdialog " & AktWorkbook.Name
frm_auftrag.Caption = "Auftragsbearbeitung " & AktWorkbook.Name
End If
frm_menu.Show
End Sub
zugewiesen. Ich habe auch die Korrektheit über

MsgBox AktWorkbook.Name
geprüft. Es ist definitiv die richtige Arbeitsmappe.
Daran kann es eigentlich nicht liegen.
Hast Du noch weitere Ideen?
Danke auf jeden Fall für Deine Antwort!
Tschüss
Kai

Anzeige
kann es nicht nachvollziehen ... (offen)
08.10.2015 12:05:29
Tino
Hallo,
kann es bei einem kleinen Test bei mir nicht nachvollziehen.
Ich lass die Frage mal offen!
Gruß Tino

AW: kann es nicht nachvollziehen ... (offen)
09.10.2015 11:18:01
Kai
Hallo Tino,
ich habe den Code, den ich einsetze, einmal auf die wesentliche Problematik runtergebrochen und 2 Dateien erstellt.
  1. Datei Modulentester.xlsm mit den Makros
  2. Datei TT.xls mit Musterdaten

Beide Dateien findet man gezippt unter
https://www.herber.de/bbs/user/100678.zip
Das geplante Vorgehen soll soll sein:
  1. Ich starte Excel und öffne die Datei "Modulentester.xlsm" und rufe ich das Makro "init_frm" auf
  2. In der userform klicke ich auf den Schalter "Auftrag laden" und lade die Arbeitsmappe "TT.xls"
  3. Wenn ich nun den Schalter "LV bearbeiten" klicke, soll die userform ausgeblendet werden (funktioniert) und die Arbeitsmappe "TT.xls" mit ausgewählter freier Zelle für weitere Eingaben im Vordergrund erscheinen.

Das klappt jedoch nicht. Irgendwie stelle ich mich da zu dumm an.
Ich hoffe auf Hilfe
Tschüss Kai

Anzeige
AW: kann es nicht nachvollziehen ... (offen)
09.10.2015 11:21:21
Kai
Sorry, ganz vergessen zu erwähnen. Ich arbeite mit Excel 2016

heute kann ich nicht mehr ... (offen)
09.10.2015 11:56:18
Tino
Hallo,
heute bin ich nicht mehr am Rechner, erst morgen wieder!
Gruß Tino

bei mir geht es wie beschrieben...
10.10.2015 07:39:17
Tino
Hallo,
bei mir funktioniert es wie beschrieben unter Win7 mit xl2010.
Ich würde evtl. beim zurückgehen in Modulentester.xlsm die UserForm wieder aktivieren da diese ausgeblendet bleibt.
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_Activate() 
Dim oAktUF As Object 
For Each oAktUF In UserForms 
    If oAktUF.Name = "frm_menu" Then 
        oAktUF.Show 
        Exit For 
    End If 
Next oAktUF 
End Sub 
 
Gruß Tino

Anzeige
AW: bei mir geht es wie beschrieben...
12.10.2015 07:49:06
Kai
Hallo Tino,
danke für die obige Sub. Was bei mir (und auf 2 anderen Rechnern) NICHT klappt, ist, dass die Arbeitsmappe TT.xls im Vordergrund ist nach dem klicken auf den Button "LV bearbeiten". Ich muss die Arbeitsmappe über Alt + Tab oder klicken in der Taskleiste in den Vordergrund holen.
Hast Du da eine Idee?
Danke und Tschüss
Kai
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Arbeitsmappe in den Vordergrund holen


Schritt-für-Schritt-Anleitung

Um eine Arbeitsmappe in den Vordergrund zu holen, kannst Du die folgenden Schritte befolgen:

  1. Deklariere die Arbeitsmappe: Stelle sicher, dass Du die Arbeitsmappe korrekt deklariert hast. Zum Beispiel:

    Public AktWorkbook As Workbook
  2. Öffne die Arbeitsmappe: Verwende einen FileDialog, um die Arbeitsmappe auszuwählen:

    Dim oFileDialog As FileDialog
    Set oFileDialog = Application.FileDialog(msoFileDialogOpen)
  3. Aktiviere die Arbeitsmappe: Um die Arbeitsmappe in den Vordergrund zu holen, kannst Du den folgenden Code verwenden:

    AktWorkbook.Activate
    Application.WindowState = xlMaximized
  4. UserForm ausblenden: Blende die UserForm aus, um die aktive Arbeitsmappe sichtbar zu machen:

    Me.Hide
  5. Überprüfe den Code: Stelle sicher, dass der Code keine Fehler enthält und die richtigen Objekte verwendet werden.


Häufige Fehler und Lösungen

  • Die Arbeitsmappe bleibt im Hintergrund: Wenn die Arbeitsmappe nach dem Aktivieren nicht im Vordergrund erscheint, kann es an der UserForm liegen. Du solltest sicherstellen, dass die UserForm korrekt ausgeblendet wird.

  • Fehler bei AppActivate: Wenn Du AppActivate verwendest und Fehler erhältst, kann es sein, dass die Anwendung nicht im Vordergrund ist. Versuche stattdessen:

    Windows(AktWorkbook.Name).Activate
  • Unzureichende Berechtigungen: Manchmal kann es an den Windows-Einstellungen liegen, die die Fensterverwaltung beeinflussen.


Alternative Methoden

Falls die oben genannten Schritte nicht funktionieren, kannst Du folgende alternative Methoden ausprobieren:

  1. SendKeys verwenden: Du kannst auch SendKeys verwenden, um die Anwendung in den Vordergrund zu bringen:

    SendKeys "%{TAB}"
  2. API-Funktionen: Verwende die Windows-API, um das Fenster zu aktivieren:

    Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    SetForegroundWindow Application.hwnd

Praktische Beispiele

Hier ist ein einfaches Beispiel, um eine Arbeitsmappe in den Vordergrund zu holen:

Sub BringWorkbookToFront()
    Dim AktWorkbook As Workbook
    Set AktWorkbook = Workbooks.Open("C:\Pfad\zu\deiner\Datei.xlsx")
    AktWorkbook.Activate
    Application.WindowState = xlMaximized
    Me.Hide
End Sub

Dieses Beispiel öffnet eine Arbeitsmappe und holt sie in den Vordergrund, während die UserForm ausgeblendet wird.


Tipps für Profis

  • Verwende die Option Explicit: Dies hilft Dir, Fehler bei der Variablendeklaration zu vermeiden.
  • Debugging: Nutze Debug.Print, um den Status von Variablen zu überwachen, wenn Du Probleme beim Aktivieren der Arbeitsmappe hast.
  • Code modularisieren: Halte Deinen Code sauber und modular, um die Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Frage
Warum erscheint die Arbeitsmappe nicht im Vordergrund?
Antwort: Dies kann an der UserForm liegen, die möglicherweise im Vordergrund bleibt. Stelle sicher, dass Du die UserForm korrekt ausblendest.

2. Frage
Kann ich die API-Funktion in jeder Excel-Version verwenden?
Antwort: Ja, die API-Funktion ist in den meisten Versionen von Excel verfügbar, jedoch sind die Deklarationen in 32-Bit und 64-Bit Versionen unterschiedlich. Achte darauf, die richtige Deklaration zu verwenden.

3. Frage
Wie kann ich sicherstellen, dass die Arbeitsmappe immer im Vordergrund bleibt?
Antwort: Du kannst regelmäßig das Fenster aktivieren, indem Du es in einer Schleife überprüfst, aber dies kann die Performance beeinträchtigen.

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