Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Splash screen

Splash screen
14.06.2018 11:06:10
Eisi
Hallo Nepumuk,
Hallo zusammen,
im ms-office-forum.net habe ich gestern per Zufall einen alten Code von Dir gefunden.
An wenigen Stellen habe ich diesen angepasst. Das bedeutet: Starte Screen mit dem Aufrufen der Datei und zeige Screen immer auf dem ersten Bildschirm. Und ein anderes Bild kommt auch rein.
Der Code ist schön übersichtlich und gefällt mir super.
Zum Code habe ich bitte noch folgende Fragen:
1. Ist der Code nach heutigem Maßstab optimal zusammen gestrickt? Weil manchmal die Meldung kommt: "Nicht genügend Speicher."
2. Wie und wo kann ich die Laufzeit des Balkens verändern, damit der Bildschirm etwas länger zu sehen ist?
Die Fragen könnte natürlich Nepumuk am besten beantworten, er hat mir vor Jahren bereits super bei meinem Projekt geholfen, aber ich weiss jetzt nicht, ob er diese Nachricht liest.
Könnt Ihr bitte mal über den Code drüber schauen, hier die Datei als Zip zum laden.
War nicht so einfach diese von 320 Kb auf 300 Kb zu bekommen.
https://www.herber.de/bbs/user/122115.zip
Herzlichen Dank.
Schöne Grüße
Eisi :-)

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Splash screen
14.06.2018 13:02:14
Eisi
Vielleicht den Code noch, damit man einen Blick drauf werfen kann:
Diese Arbeitsmappe:
Option Explicit
Private Sub Workbook_Open()
Call Init
End Sub
frmSplashScreen:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000
Private wHandle As Long
Private Sub UserForm_Activate()
Me.Repaint
Call SetInitValues
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim lStyle As Long
Dim frm As Long
If Val(Application.Version) >= 9 Then
wHandle = FindWindow("ThunderDFrame", Me.Caption)
Else
wHandle = FindWindow("ThunderXFrame", Me.Caption)
End If
If wHandle = 0 Then Exit Sub
lStyle = GetWindowLong(wHandle, GWL_STYLE)
Me.Caption = ""
lStyle = lStyle And Not WS_SYSMENU
lStyle = lStyle And Not WS_MAXIMIZEBOX
lStyle = lStyle And Not WS_MINIMIZEBOX
lStyle = lStyle And Not WS_CAPTION
SetWindowLong wHandle, -20, frm
SetWindowLong wHandle, GWL_STYLE, lStyle
DrawMenuBar wHandle
Me.Width = Image1.Width
Me.Height = Image1.Height
Me.StartUpPosition = 3 ' Bildschrimmitte 2
End Sub

Public Sub Progress(ByVal intMode As Integer, Optional ByVal sngStep As Single, Optional ByVal  _
lngCnt As Long)
Static ssngS As Single, ssngStep As Single
Static slngCnt As Long, ssngWidth As Single
If intMode = 1 Then ' Run
ssngS = ssngS + ssngStep
fraProgress.Width = (ssngS / slngCnt) * ssngWidth
ElseIf intMode = 0 Then ' Init
slngCnt = lngCnt
ssngStep = sngStep
ssngWidth = fraProgress.Width
ElseIf intMode = 2 Then ' Reset
ssngS = 0
ssngStep = 0
slngCnt = 0
ssngWidth = 0
fraProgress.Width = 0
End If
End Sub
Modul1:
Option Explicit
Public Sub Init()
Load frmSplashScreen
With frmSplashScreen
.Top = Application.Top + (Application.Height - .Height) / 2
.Left = Application.Left + (Application.Width - .Width) / 2
End With
frmSplashScreen.Show
End Sub
Sub Auto_Open()
Load frmSplashScreen
End Sub
Public Sub SetInitValues()
Dim i As Long
Dim k As Long
Const c As Long = 10 ^ 5
Application.ScreenUpdating = False
Call frmSplashScreen.Progress(0, 100, c)
For i = c To 1 Step -1
Tabelle1.Cells(c - i + 1, 1).Value = i
If i Mod 100 = 0 Then Call frmSplashScreen.Progress(1)
Next
Call frmSplashScreen.Progress(2)
Application.ScreenUpdating = True
End Sub
Tabelle1 (Codeblatt)
Hier wird automatisch eine Zahlenkolonne in die Spalte A geschrieben.
Anzeige
Splash screen --> Nepumuk
14.06.2018 14:18:41
Eisi
Hallo Nepumuk,
wenn ich Deinen alten Code in mein Programm einbauen möchte, kommt nachfolgende Fehlermeldung.
Wenn es zu viel Arbeit macht, dann lassen wir das lieber. Soll ja keine Doktorarbeit werden.
Ach ja, das Programm alleine läuft aber schon.
Herzlichen Dank. LG Eisi :-)
Kompilierungs-Fehler in verborgenem Modul:
Zusatzinfo
Ein geschütztes Modul enthält einen Kompilierungsfehler. Da sich der Fehler in einem geschützten Modul befindet, kann er nicht angezeigt werden.
Dieser Fehler tritt im Allgemeinen auf, wenn Code mit der Version oder der Architektur dieser Anwendung inkompatibel ist (wenn Code in einem Dokument beispielsweise für 32-Bit-Microsoft-Office-Anwendungen gilt, jedoch versucht wird, den Code unter 64-Bit-Office auszuführen).
Dieser Fehler hat die folgende Ursache und Lösung:
Ursache des Fehlers:
Der Fehler wird ausgegeben, wenn im VBA-Code in einem geschützten (verborgenen) Modul ein Kompilierungsfehler vorhanden ist. Dieser spezielle Kompilierungsfehler wird nicht angezeigt, da das Modul geschützt ist.
Mögliche Lösungen:
Wenn Sie auf den VBA-Code im Dokument oder Projekt zugreifen können, heben Sie den Dokumentschutz auf, und führen Sie dann den Code erneut aus, um den fraglichen Fehler anzuzeigen.
Wenn Sie keinen Zugriff auf den VBA-Code im Dokument haben, wenden Sie sich an den Autor des Dokuments, um den Code in dem verborgenen Modul aktualisieren zu lassen.
Anzeige
AW: Splash screen --> Nepumuk
15.06.2018 13:52:25
Nepumuk
Hallo Eisi,
ich habe deinen Code mal umgestrickt:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Open()
    Call Init
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub Init()
    
    Load frmSplashScreen
    
    With frmSplashScreen
        .Top = Application.Top + (Application.Height - .Height) / 2
        .Left = Application.Left + (Application.Width - .Width) / 2
    End With
    
    frmSplashScreen.Show
    
End Sub

Public Sub SetInitValues()
    
    Dim i As Long
    
    Dim k As Long
    
    Const c As Long = 1000
    
    Application.ScreenUpdating = False
    
    Call frmSplashScreen.Progress(0, 100, c)
    
    For i = c To 1 Step -1
        
        ' Tabelle1.Cells(c - i + 1, 1).Value = i
        
        If i Mod 100 = 0 Then Call frmSplashScreen.Progress(1)
        
        Call Sleep(10)
        
        DoEvents
    Next
    
    Call frmSplashScreen.Progress(2)
    
    Application.ScreenUpdating = True
    
End Sub

' **********************************************************************
' Modul: frmSplashScreen Typ: Userform
' **********************************************************************

Option Explicit

Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" (ByVal hwnd As LongPtr) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000
Private wHandle As LongPtr

Private Sub UserForm_Activate()
    Me.Repaint
    Call SetInitValues
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    Dim lStyle As LongPtr
    Dim frm As Long
    If Val(Application.Version) >= 9 Then
        wHandle = FindWindow("ThunderDFrame", Me.Caption)
    Else
        wHandle = FindWindow("ThunderXFrame", Me.Caption)
    End If
    If wHandle = 0 Then Exit Sub
    lStyle = GetWindowLong(wHandle, GWL_STYLE)
    Me.Caption = ""
    lStyle = lStyle And Not WS_SYSMENU
    lStyle = lStyle And Not WS_MAXIMIZEBOX
    lStyle = lStyle And Not WS_MINIMIZEBOX
    lStyle = lStyle And Not WS_CAPTION
    SetWindowLong wHandle, -20, frm
    SetWindowLong wHandle, GWL_STYLE, lStyle
    DrawMenuBar wHandle
    
    Me.Width = Image1.Width
    Me.Height = Image1.Height
    
    Me.StartUpPosition = 3 ' Bildschrimmitte 2
    
End Sub

Public Sub Progress(ByVal intMode As Integer, Optional ByVal sngStep As Single, Optional ByVal lngCnt As Long)
    Static ssngS As Single, ssngStep As Single
    Static slngCnt As Long, ssngWidth As Single
    
    If intMode = 1 Then ' Run
        ssngS = ssngS + ssngStep
        fraProgress.Width = (ssngS / slngCnt) * ssngWidth
    ElseIf intMode = 0 Then ' Init
        slngCnt = lngCnt
        ssngStep = sngStep
        ssngWidth = fraProgress.Width
    ElseIf intMode = 2 Then ' Reset
        ssngS = 0
        ssngStep = 0
        slngCnt = 0
        ssngWidth = 0
        fraProgress.Width = 0
    End If
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Splash screen --> Nepumuk
15.06.2018 15:08:27
Eisi
Hallo Nepumuk,
danke nochmal für Deine Hilfe. Ich bastel immer noch am selben Programm wie 2012 rum. Nur es wird immer größer. Da habe ich mir was angefangen. Mit Deiner / Eurer Hilfe geht das schon irgendwie. :-)
Dein Code läuft jetzt einwandfrei.
Habe aber noch nicht erkennen können, an welcher Stelle ich die Dauer des Screens einstellen kann.
Ich dachte es wäre: Call Sleep(10) aber da tut sich nichts. Oder wird die Dauer der Ansicht über die Größe des Balkens beeinflusst?
Herzlichen Dank, für die super Hilfe.
GLG Eisi :-)
AW: Splash screen --> Nepumuk
15.06.2018 16:58:26
Nepumuk
Hallo Eisi,
die Laufzeit kannst du entweder durch die Konstante c beeinflussen oder durch den Wert der Sleep-Methode, wobei du bedenken musst, das sind Millisekunden, eine Erhöhung von 10 auf 20 solltest du schon bemerken.
Gruß
Nepumuk
Anzeige
AW: Splash screen --> Nepumuk
15.06.2018 22:11:20
Eisi
Hallo Nepumuk,
herzlichen Dank für die nette Erklärung und unbezahlbare Hilfe.
LG Eisi :-)
AW: Splash screen --> Nepumuk
15.06.2018 19:22:43
Mullit
Hallo,
ja aber Eisi; Du bist doch momentan nicht mal in der Lage Recorder-Code umzuformen, wie willst Du dann mit solchen API-Codes klarkommen, wenns mal nich mehr so läuft, respektive Nepumuk nicht verfügbar ist....?
https://www.herber.de/cgi-bin/callthread.pl?index=1628249#1628249
Meinst Du nicht, Du solltest erstmal bei den Basics anfangen...
Gruß, Mullit
AW: Splash screen --> Nepumuk
15.06.2018 22:44:23
Eisi
Hallo Mullit,
was soll ich jetzt mit Deinen Weisheiten anfangen? Ist Dir langweilig? Oder stört es Dich, dass ich nicht Dein Niveau habe? Muss ich wirklich Dein Niveau haben?
Ich kann es Dir sagen: Muss ich nicht(!) Warum? Weil ich nicht VBA Programmierer werden möchte, sondern als Anwendungstechniker für meine Arbeitskollegen nur eine Arbeitsumgebung schaffen möchte, mit der sie einfacher und besser arbeiten können.
Was mache ich wenn ich keine Hilfe bekomme? Ganz einfach, ich suche mir einen anderen Weg. Dieser Splash Screen mit Laufzeit war ja nur ein Highlight für meine Kollegen, aber nicht lebenswichtig. Ich hatte mir schon eine einfache Lösung ohne Laufzeit gebastelt. Aber der Code vom Nepumuk wertet mein Programm optisch noch mal auf. Die Überschrift im Screen fängt an mit: Herzlich willkommen. Wünsche viel Freude mit ….. Zur Motivation meiner Kollegen. :-)
Ich bin natürlich um Menschen froh, wie den Nepumuk, die einem trotzdem helfen. Ohne den Oberlehrerfinger zu heben, oder beleidigt zu reagieren. Seine Kompetenz liegt z. B. in VBA, wobei ich das gar nicht beurteilen kann. Meine Kompetenz liegt in der Bautechnik und nicht in der IT. Liegt wohl daran, das ich meine Pläne noch mit Tusche gezeichnet habe und der erste PC ein Floppylaufwerk 5 1/4 Zoll war und zwar ohne Festplatte. (ha, ha) Natürlich bin ich auch um Deinen Hinweis dankbar: "Kümmere Dich mehr um die Basics", dann verstehst du grundsätzlich alles besser. Aber wollen wir es nicht übertreiben und bleiben wir nett zueinander. Respekt, Achtung und Freundlichkeit sollte unser erstes Ziel sein und nicht, was kannst Du und was können die Anderen nicht.
Also, wünsche uns allen Frieden, schönen Abend und bis zum nächsten Excelproblem. :-)
LG Eisi :-)
LG auch an alle anderen Mitglieder / Helfer, ich weis Eure Hilfe sehr zu schätzen. Wie gesagt unbezahlbar.
Anzeige
AW: Das ......
15.06.2018 23:02:54
Mullit

was soll ich jetzt mit Deinen Weisheiten anfangen?

....solltest Du selbst versuchen, rauszufinden....aber ok, nix für ungut, wird schon werden...
Gruß, Mullit
AW: Das ......
16.06.2018 10:53:58
Eisi
Sorry, habe wohl ein wenig zu heftig reagiert. VBA ist schon sehr hilfreich in der Arbeit, um Arbeitsabläufe zu optimieren. Habe schon ein neues (kleines) Projekt im Kopf, dass ich mit VBA angehen werden. VBA lässt mich also nicht los. Und habe mir bei Udemy auch eine VBA-Schulung gebucht. Macht natürlich sinn und ich möchte Euch mit meiner Blindheit nicht quälen. Das verstehe ich auch.
Also, liebe Grüße an alle und wünsche noch einen schönen Samstag.
:-) Eisi :-)
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige