Excel WebBrowser Control ausserhalb UserForm
#1
Guten Tag miteinander
Ich habe direkt in eine Userform ein WebBrowser-Control eingebaut und der funktioniert. Doch sobald ich dieses Formular mit Userform.show (vbModeless) Start ist der WebBrowser ausserhalb der Userform in linken oberen Ecke vom Windows-Fenster. Wie kriege ich das wieder zurück in die UserForm bzw. warum kann so etwas geschehen. Wenn ich die Userform händisch starte, ist der Webbrowser wie gewünscht in der Userform. Weiss hier jemand Rat? Vielen Dank für Eure Unterstützung.
Antworten Top
#2
Versuche das:
   
Antworten Top
#3
Guten Tag
Ja, die Eigenschaft einstellen geht. Aber es sind mehrere Nutzer und deshalb kann ich das nicht generell für diese Arbeitsmappe einrichten. Gibt es keine andere Möglichkeit?

Dynamisch habe ich es versucht mit :

Private WithEvents WebBrowserInfo As WebBrowser

Private Sub UserForm_Initialize()
Dim objMSweb AS Object
Set objMSweb = Me.Controls.Add("Shell.Explorer.2", "x", True)
With objMSWeb
 .Top = 6
 .Left = 6
 .Height = 15
 .Width = 507
 .Name = "WebBrowserInfo"
 .Visible = True
 .Object.Navigate CON_MTHL
 .Object.Document.Body.Scroll = "no"
 .Object.Document.Body.Style.Border = "Bone"
End With
Set objMSweb = Nothing
End Sub

Private Sub WebBrowserInfo_WindowClosing(ByVal IsChildWindow As Boolean, Cancel As Boolean)
Cancel = True
End Sub

WebBrowserInfo geht gar nicht mehr mit dem dynamisch erstellten WebBrowser? Step-by-step-VBA Ausführung zeigt keine Probleme mit der Darstellung und Navigation. Sobald ich die Navigation zufügen ist es beim Aufruf UserForm_Initialize vorbei, dann kommt eine Fehlermeldung. Eigenartig.  Ist das WebBrowser-Steuerelement vorbei?
Antworten Top
#4
Ach, es geht, aber ich bringe diese verflixten Scroll-Balken nicht raus? Ich bekomme einen Fehler bei .Document.Body.Scroll = "no" und .. Style.Border = "Bone"???
Antworten Top
#5
Guten Tag miteinander

Nachdem das direkte Einbinden des WebBrowser-Steuerelementes in einer UserForm kläglich gescheitert ist, weil der WebBrowser trotz .Top und .Left-Vorgaben immer am oberen linken Windows-Fenster klebte, habe ich erfolgreich die dynamische Vba-Einbindung eingerichtet. Gleichzeitig konnte ich noch die leider notwendige Zoom-Einstellungen der Breite (.Width) des WebBrowsers einrichten, weil auch hier der WebBrowser einfach nicht mitmacht und stur seine ursprüngliche Breite beibehält, wenn der Windows-Zoom verändert wird. Die Einstellungen werden sowieso erst beim Neustart wirksam, was jedoch verkraftbar ist.

Nun habe ich den Code im Excel- und Word-VBA eingebaut. Im Word funktioniert nun das Laufband einwandfrei, doch im Excel ist mit dem identischen VBA nur der blaue Hintergrund sichtbar, jedoch nicht den Text (Laufband, Besp. "Guten Tag. xxx" im WebTicker.html, den ich hier nicht dargestellt auch per VBA dynamisch anpassen kann). Hilfe, was ist da bloss los? Was muss ich hier einstellen, das es auch im Excel funktioniert. Das ist doch nicht möglich? Was fehlt hier vielleicht, was Excel noch braucht? Ich kenne mich in der Html/Style/CSS nicht so aus.

Vielen Dank für Eure Unterstützung.

Gruss
Stefan1

Code:
'-----------------------------------------------------------------------
Private WithEvents WebBrowserInfo As WebBrowser
Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As LongPtr, ByVal hdc As LongPtr) As Long
Private Const LOGPIXELSX As Long = 88
Private Sub WebBrowserInfo_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    With WebBrowserInfo
        '.Document.body.Scroll = "no"
        '.Document.body.Style.Border = "none"
    End With
End Sub
Private Sub UserForm_Initialize()
Dim hdcScreen As LongPtr
Dim hWnd As LongPtr
Dim lDPI As Long
Dim lZoom As Long
    'WebBrowser
    Set WebBrowserInfo = Me.Controls.Add("Shell.Explorer.2", "x", True)
    With WebBrowserInfo
        .Top = 6
        .Left = 19
        .Height = 35
        .Width = 665
        'Windows Display Zoom
        hWnd = GetActiveWindow(): hdcScreen = GetDC(hWnd): lDPI = -1
        If (hdcScreen) Then lDPI = GetDeviceCaps(hdcScreen, LOGPIXELSX): ReleaseDC hWnd, hdcScreen
        If lDPI > 0 Then lZoom = Round(lDPI * 665 / 96)
        If lDPI = 96 Then
            .Width = 665        '100 %
        Else
            .Width = lZoom
        End If
        '96 – Smaller 100% = Width: 665
        '120 – Medium 125%
        '144 – Larger 150%
        '192 – Extra Large 200%
        '240 – Custom 250%
        '288 – Custom 300%
        '384 – Custom 400%
        '480 – Custom 500%
        '.Width = Round(Me.Width * 124.3 / 100, 0)
        .Navigate CON_HTML_01
    End With
End Sub
Private Sub WebBrowserInfo_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim sHTML As String
    On Error Resume Next
    With WebBrowserInfo
        '.Document.Body.setAttribute "scroll", "no"
        .Document.body.Scroll = "no"
        '.Document.Body.Style.Border = "none"
        '.Document.body.setAttribute "TopMargin", "5"
        'If URL = "about:blank" Then
            'margin-top:-0.5em;
            'sHTML = "<!DOCTYPE html><html>'"<p style=""background-color:powderblue; margin-top:-0.5em;"">" & Now() & ", " & getUser() & "</p></html>"
            '.Document.body.innerhtml = sHTML
        'End If
    End With
    On Error GoTo 0
End Sub
Private Sub WebBrowserInfo_WindowClosing(ByVal IsChildWindow As Boolean, Cancel As Boolean)
    'Hier wird verhindert, dass das Control von der Form gelöscht wird!
    Cancel = True
End Sub
'--------------------------------------------------------------------
'WebTicker.html
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="refresh" content="40;">
<body>
<DIV ID="TICKER" STYLE="margin-top:-0.5em; overflow:hidden; width:100%; onmouseover="TICKER_PAUSED=true" onmouseout="TICKER_PAUSED=false">01.11.2024 14:50 - ** Guten Tag. xxx. ""
</DIV>
<script type="text/javascript" src="webticker_lib.js" language="javascript"></script>
<body bgcolor=#8DB4E2>
</body>
</html>
'--------------------------------------------------------------------
'Webticker_lib.js
// WebTicker by Mioplanet
// www.mioplanet.com
TICKER_CONTENT = document.getElementById("TICKER").innerHTML;
TICKER_RIGHTTOLEFT = false;
TICKER_SPEED = 1;
TICKER_STYLE = "font-family: Arial; font-size:14px; font-weight: bold; color:white";
TICKER_PAUSED = false;
ticker_start();
function ticker_start() {
            var tickerSupported = false;
            TICKER_WIDTH = document.getElementById("TICKER").style.width;
            var img = "<img src=ticker_space.gif width="+TICKER_WIDTH+" height=0>";
            // Firefox
            if (navigator.userAgent.indexOf("Firefox")!=-1 || navigator.userAgent.indexOf("Safari")!=-1) {
                        document.getElementById("TICKER").innerHTML = "<TABLE  cellspacing='0' cellpadding='0' width='100%'><TR><TD nowrap='nowrap'>"+img+"<SPAN style='"+TICKER_STYLE+"' ID='TICKER_BODY' width='100%'>&nbsp;</SPAN>"+img+"</TD></TR></TABLE>";
                        tickerSupported = true;
            }
            // IE
            if (navigator.userAgent.indexOf("MSIE")!=-1 && navigator.userAgent.indexOf("Opera")==-1) {
                        document.getElementById("TICKER").innerHTML = "<DIV nowrap='nowrap' style='width:100%;'>"+img+"<SPAN style='"+TICKER_STYLE+"' ID='TICKER_BODY' width='100%'></SPAN>"+img+"</DIV>";
                        tickerSupported = true;
            }
            if(!tickerSupported) document.getElementById("TICKER").outerHTML = ""; else {
                        document.getElementById("TICKER").scrollLeft = TICKER_RIGHTTOLEFT ? document.getElementById("TICKER").scrollWidth - document.getElementById("TICKER").offsetWidth : 0;
                        document.getElementById("TICKER_BODY").innerHTML = TICKER_CONTENT;
                        document.getElementById("TICKER").style.display="block";
                        TICKER_tick();
            }
}
function TICKER_tick() {
            if(!TICKER_PAUSED) document.getElementById("TICKER").scrollLeft += TICKER_SPEED * (TICKER_RIGHTTOLEFT ? -1 : 1);
            if(TICKER_RIGHTTOLEFT && document.getElementById("TICKER").scrollLeft <= 0) document.getElementById("TICKER").scrollLeft = document.getElementById("TICKER").scrollWidth - document.getElementById("TICKER").offsetWidth;
            if(!TICKER_RIGHTTOLEFT && document.getElementById("TICKER").scrollLeft >= document.getElementById("TICKER").scrollWidth - document.getElementById("TICKER").offsetWidth) document.getElementById("TICKER").scrollLeft = 0;
            window.setTimeout("TICKER_tick()", 30);
}
Antworten Top
#6
Hallo Stefan,

mal eine ganz andere Frage: Warum muß das in Excel mit einer Userform umgesetzt werden? Ich sehe da keine Verbindung, eine einfache HTML Seite würde hier doch ausreichen.
Antworten Top
#7
Guten Tag knobbi38
Ja, auch das habe ich überlegt, doch für eine einzeilige Laufband-Durchsage schon etwas überfunktional und nach Beenden von Excel soll es auch wieder verschwinden. Ich dachte zudem, dass ein Spezialist vielleicht erkennt, welche Einstellung im WebBrowser oder der Html/Style fehlt, dass es Excel einfach nicht kann, was in Word ohne Probleme funktioniert. Wieso diese Unterschiede für die gleiche Sache und VBA-Programmierung? Ich gehe davon aus, dass das WebBrowser-Steuerelement dynamisch erstellt in Word und Excel identisch sind. Es kann also nicht sein, dass ich mich mit den Eigenschaften des WebBrowser-Steuerelementes etwa vertan hätte. Ich habe allen notwendigen Code hier eingestellt, dass vielleicht ein Spezialist nachbauen könnte um den Fehler/Mangel zu erkennen?
Gruss
Stefan1
Antworten Top
#8
Guten Tag miteinander
Oje, bleibt wahrscheinlich auch wieder unbeantwortet.  Angry
Antworten Top
#9
Hallo Stefan,

warum sollte ein "Spezialist" sich die Mühe machen, deine Problemstellung nachzubauen? 
Durch das Hochladen eines Beispiels, das das Problem verdeutlicht, kann zumindest die Hilfsbereitschaft erhöht werden.
Antworten Top
#10
Hallo knobbi38

Gut, ich habe den Code für alle Elemente hier am 03.11.2024 13:33 hochgeladen und schon deshalb, weil ich auch der Meinung bin, dass gefundene Lösungen auch zurückgemeldet werden sollten. Wie gesagt, läuft es unter Word einwandfrei und in Excel auch, ausser dass das Laufband nicht läuft. Mit dem geprosteten Code lässt sich das einigermaßen leicht nachbauen und kann auch denen helfen, die so ein dynamisches und zoom-angepasstes WebBrowser-Element möchten. 

Das Problem von dem "starten" WebBrowser in Excel kann ich mir nicht erklären. Das muss doch auf die gleiche Bibliothek wie Word zugreifen? Es ist sowas wie ein fehlendes Aktualisieren oder so. Refresh nützt jedoch nicht (habe ich auch versucht). Wahrscheinlich braucht der WebBrowser in Excel irgendeine Einstellung oder Aktivierung mehr als es im Word notwendig zu sein scheint. Dateien kann ich nicht hochladen. 

Gruss und Danke für jede Unterstützung
Stefan1
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste