Standard VB.Net App startet Excel -> Excel nicht im Vordergrund

netbuster

Grand Admiral Special
Mitglied seit
03.07.2001
Beiträge
6.887
Renomée
39
Standort
Berlin
Hallo,
ich habe ein Programm in VB.Net geschrieben, welches über mehrere Buttons verschiedene Excel Arbeitsblätter öffnet. Das Problem ist nun folgendes:

Ich starte das Programm, klicke einen Button, es öffnet sich Excel und das entsprechende Dokument. Jedoch leider im HINTERGRUND, hinter dem Vb.Net Application Fenster.

Klicke ich nun in Excel und beende es, lasse die Vb App aber weiterlaufen, öffnet sich von nun an bei jedem klick auf einen Button das entsprechende Excel Dokument im Vordergrund ÜBER der Application. So soll es sein.

Leider funktioniert das aber immer erst, nachdem man einmal ein Dokument geöffnet und wieder geschlossen hat.

Meine Vermutung ist, dass es sich hier um eine Sicherheitsfunktion von vb.net handelt, die verhindern soll, dass Programme sich in den Vordergrund über andere legen und so den Rechner blockieren, wenn keine Usereingabe erfolgt ist. Über die API Schnittstelle habe ich es bereits in 1000 Varianten versucht, die vb.net app bleibt IMMER beim ERSTEN mal im Vordergrund.

Hier ist der Code zum öffnen des Excels:

Code:
Public Class Navigator
    Dim wb As Microsoft.Office.Interop.Excel.Workbook
    Dim ws As Microsoft.Office.Interop.Excel.Worksheet
    Dim Excel1 As New Microsoft.Office.Interop.Excel.Application

Code:
Private Sub HeadcountRepCharts_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HeadcountRepCharts.Click
        Fname = "\\dwdf207\REP-CONS-DE\Monatsreporting\" + reportingperiod + "\02_FTE_Reports\Headcount_Reporting" + reportingperiod + ".xls"
        wb = Excel1.Workbooks.Open(Fname)
        Excel1.Visible = True
        Excel1.Sheets(1).activate()
    End Sub


Vielleicht kann mir da irgendwer helfen. Der Code oben ist nur ein Beispielhafter Auszug
 
das ist echt wichtig, ich muss dieses problem lösen, am besten sogar vor morgen. hat da niemand eine idee zu?
 
Was Du brauchst ist vermutlich

Code:
Declare Function SendMessage Lib "user32.dll" _
  Alias "SendMessageA" ( _
  ByVal hWnd As Long, _
  ByVal Msg As Long, _
  wParam As Any, _
  lParam As Any) As Long

Const WM_SETFOCUS As Int32 = &H7

Code:
SendMessage(Excel1.Hwnd, WM_SETFOCUS, 0, 0)

Hab's nicht getestet, sollte aber so in etwa funktionieren.
 
ja so hatte ich es kurzzeitig auch gelöst. habe es dann aber doch ganz anders hinbekommen:

excel1 schon vorher auf visible setzen, und in jedem funktionsaufruf wb neu lokal deklarieren, damit excel immer als neue instanz gestartet wird.
 
Zurück
Oben Unten