Userform op voorgrond

Status
Niet open voor verdere reacties.

dopekoe

Gebruiker
Lid geworden
8 feb 2002
Berichten
37
Hallo,

Ik heb een sjabloon gemaakt die ge-opend wordt vanuit een andere applicatie.
In deze sjabloon zit een userform welke vraagt om enkele gegevens en deze vervolgens in het document zet.
Het probleem is echter dat wanneer de externe applicatie het sjabloon opent dat het formulier niet naar de voorgrond komt.
Je moet er met <ALT>+<TAB> naar toe gaan voordat je het formulier ziet ?

Weet iemand de code om dit formulier naar de algehele voorgrond te brengen ?

Oh ja, het gaat hier om Word 2007.
 
Zet hier eens de code waarmee Word geaktiveerd, en het userform geopend wordt. Vanuit welke applicatie ?
 
Dit is de code waarmee, bij het openen van het sjabloon voor het maken van een nieuw document, het formulier mee ge-opend wordt (Niets bijzonders)


Code:
Sub Document_New()
        Medewerker.Show
End Sub

Het sjabloon wordt aangeroepen in MS Dynamics AX waarna er een nieuw document gemaakt wordt op basis van dat sjabloon waarna dat document gekoppeld is aan de entry in Dynamics.
 
Wanneer je vanuit Excel Word aktiveert met
Getobject of createobject moet de eigenschap van het programma expliciet op visible worden ingesteld.
Het lijkt mij logischer om via het oproepende programma gegevens op te vragen van de gebruiker met een userform en deze dan als variabele(argumenten) in het word document te plaatsen.
 
En wat heeft dat te maken met het wel of niet naar de voorgrond komen van een form ?
 
Als een applicatie niet zichtbaar is, is een userform dat ook niet.
 
Wanneer ik het sjabloon aanroep dan komt de userform niet in beeld maar op de achtergrond.
Wanneer ik dan naar het userform ga en de textvelden invul en dan op ok klik dan komt het word document dat gemaakt is op basis van het sjabloon tevoorschijn.
Dat is op zich helemaal geen probleem.

Het enige waar ik mee zit is dat het userform naar voren moet komen bij het aanroepen vanuit dynamics en niet dat ik er zelf naartoe moet gaan met alt+tab.

Voor de rest werkt de macro en het sjabloon helemaal perfect.
 
Ik gebruik onderstaande Functie vanuit Microsoft Access om een sjabloon met userform aan te roepen. Bij mij staat met deze functie het userform netjes op de voorgrond. Nadat ik in het userform op OK heb gedrukt komt het Word-document op de voorgrond.

Ik hoop dat je er misschien wat aan hebt.

'-------------------------------------------------------------------------------------------------------------------
'*** Functie om .dot bestanden als nieuw document te openen
Public Sub DOTstarten(strTemplate As String)

On Error GoTo Err_Handler

Dim blnError As Boolean
Dim blnNewApp As Boolean

On Error Resume Next
Set WordApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Err.Clear
Set WordApp = CreateObject("Word.Application")
If Err.Number <> 0 Then
blnError = True
MsgBox "Error bij het starten van Word.", vbCritical, "Error"
GoTo Exit_Handler
Exit Sub
Else
blnNewApp = True
End If
End If

' Switch normal error handling back on
On Error GoTo Err_Handler

Set WordDoc = WordApp.Documents.Add(strTemplate)

WordApp.Visible = True
WordApp.Browser.Target = 1
Application.Echo True, ""

WordApp.WindowState = wdWindowStateNormal
WordApp.Activate

WordDoc.Activate
WordDoc.ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitFullPage

Exit_Handler:
If Not WordDoc Is Nothing Then
Set WordDoc = Nothing
End If

If Not WordApp Is Nothing Then
If blnError And blnNewApp Then
WordApp.Quit
End If
Set WordApp = Nothing
End If

Exit Sub

Err_Handler:
DoCmd.Hourglass False
blnError = True
MsgBox Err.Description, vbExclamation, "Error No: " & Err.Number
Resume Exit_Handler

End Sub
'-------------------------------------------------------------------------------------------------------------------
 
Dank je wel voor de code maar helaas werkt het niet.....
Maar dat zou kunnen omdat ik de code misschein op de verkeerde plaats neerzet.

Het volgende is bij mij van toepassing, zie screenshot : voorgrond.jpg
 
Met behulp van zogenaamde API-declares kun je de Windows-API benaderen.
De functie SetForegroundWindow maak het bijv. mogelijk een specifieke window naar de voorgrond te forceren.
Wanneer je onderstaande code in je userform plakt zou e.e.a. moeten werken.


'API-declares
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long


Private Sub UserForm_Initialize()

Dim lHandle As Long

'Forceer hett scherm naar de voorgrond
lHandle = FindWindow(vbNullString, Me.Caption)
Call SetForegroundWindow(lHandle)

End Sub

Suc6!
 
Helaas komt de userform nog steeds niet naar de voorgrond.
Jouw code staat als eerste gedefinieerd in het formulier, ik moet echter nog steeds alt-tab doen voordat het scherm naar voren komt.

Het is wel absoluut noodzakelijk dat hij naar voren komt!
 
Heb je de eigenschap startupposition van het userform wel op 1 (center Owner) staan.

In de bijlagen:
1 Word sjaboon
1 excelbestand, waarin een macro tst om uit te voeren als wat jij wil.

De praktijk bij mij leert dat de volgende macro voldoende is om het userform te tonen:

Code:
Sub tst()
    Application.WindowState = xlMinimized
    With CreateObject("Word.application")
        .documents.Add "E:\Of\__medewerker.dot"
        .Quit
    End With
End Sub

In het Word-sjabloon staat alleen de code

Code:
Private Sub Document_New()
  scherm.show
End Sub

Suggestie:
zet het wordbestand in een directory "E:\OF
open het Excel-bestand; start de macro 'tst' met Alt-F8
 

Bijlagen

  • __medewerker.xls
    15,5 KB · Weergaven: 65
  • __medewerker.dot
    25 KB · Weergaven: 57
Laatst bewerkt:
!!! Let op voor Office 2007 onder Vista !!!

Ik had al gereageerd met een stukje code. Deze code werkt wel voor Office 2003 onder XP maar mij lukt het ook inderdaad niet in Office 2007 onder Vista. :eek:

Met bovenstaande oplossing wordt het probleem ook niet verholpen. Weet iemand misschien inmiddels hoe het moet.
 
Ik heb ook nog steeds geen oplossing gevonden....

Heb nu een vraag uitstaan bij Microsoft, zodra ik een antwoord heb zal ik hem hier posten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan