Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
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

Code im ganzen Pojekt anwenden

Code im ganzen Pojekt anwenden
30.07.2020 17:31:51
Eberhard
Hallo zusammen
Ich möchte unterstehender Code für das ganze Projekt anwenden. Dieser Code löscht die Überschrift bei einer UserForm. Nun möchte ich, dass ich bei anderen UserFormen dies auch anwenden könnte. Möchte aber den Code nicht immer schreiben müssen! Gibt es da eine Möglichkeit? Danke für Eure Hilfe.
Gruss Daniel
Option Explicit
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLongPtrA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtrA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _
ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function SendMessageA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal wMsg As Long, _
ByVal wParam As LongPtr, _
ByRef lParam As Any) As LongPtr
Private Declare PtrSafe Function ReleaseCapture Lib "user32.dll" () As Long
Private Declare PtrSafe Function IsThemeActive Lib "uxtheme.dll" () As Long
Private Const GC_CLASSNAMEMSFORM As String = "ThunderDFrame"
Private Const GWL_STYLE As Long = -16&
Private Const WS_CAPTION As LongPtr = &HC00000
Private Const HTCAPTION As LongPtr = 2&
Private Const WM_NCLBUTTONDOWN As Long = &HA1
Private mlngptrHwnd As LongPtr

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code im ganzen Pojekt anwenden
30.07.2020 17:34:25
Hajo_Zi
Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.
Sollte die Datei verlinkt werden?
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
änderrn.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
Code in ein Modul.

Anzeige
AW: Code im ganzen Pojekt anwenden
30.07.2020 17:38:58
onur
"unterstehender Code" ?
Unten steht GAR KEIN Code - Das sind nur Deklarationen!
AW: Code im ganzen Pojekt anwenden
30.07.2020 17:50:40
Mullit
Hallo,
ganz einfach, Du mußt Deinen ganzen Api-Kram in ein Standard-Modul auslagern und dann von den Formen aus die Einsprungsprozedur aufrufen...;-)
Gruß, Mullit
AW: Code im ganzen Pojekt anwenden
31.07.2020 20:13:40
Eberhard
Hallo Karl_Heinz, hallo Mullit
Vielen Dank für die nette Beschreibung. Als Neuling klingt dies recht kompliziert. Unten findest du der ganze Code. Vielleicht kannst Du damit etwas helfen. Sollte es zu kompliziert werden, ist es auch nicht schlimm. Besten Dank. Gruss Daniel
Option Explicit
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLongPtrA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtrA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _
ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function SendMessageA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal wMsg As Long, _
ByVal wParam As LongPtr, _
ByRef lParam As Any) As LongPtr
Private Declare PtrSafe Function ReleaseCapture Lib "user32.dll" () As Long
Private Declare PtrSafe Function IsThemeActive Lib "uxtheme.dll" () As Long
Private Const GC_CLASSNAMEMSFORM As String = "ThunderDFrame"
Private Const GWL_STYLE As Long = -16&
Private Const WS_CAPTION As LongPtr = &HC00000
Private Const HTCAPTION As LongPtr = 2&
Private Const WM_NCLBUTTONDOWN As Long = &HA1
Private mlngptrHwnd As LongPtr
Private Sub UserForm_Activate()
Dim lngptrStyle As LongPtr
mlngptrHwnd = FindWindowA(GC_CLASSNAMEMSFORM, Caption)
lngptrStyle = GetWindowLongPtrA(mlngptrHwnd, GWL_STYLE)
lngptrStyle = lngptrStyle And Not WS_CAPTION
Call SetWindowLongPtrA(mlngptrHwnd, GWL_STYLE, lngptrStyle)
Call DrawMenuBar(mlngptrHwnd)
If IsThemeActive = 1 Then
Height = Height - 30
Else
Height = Height - 14
End If
Label1.Caption = "Bitte etwas Geduld..." & vbCrLf & "Suche die Datei " & DateiName
End Sub
'Private Sub UserForm_MouseDown(ByVal Button As Integer, _
'        ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'    If Button = 1 Then
'        Call ReleaseCapture
'        Call SendMessageA(mlngptrHwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
'    End If
'End Sub
'Private Sub CommandButton1_Click()
'    Call Unload(Me)
'End Sub

Anzeige
AW: Code im ganzen Pojekt anwenden
31.07.2020 21:39:45
volti
Hallo Daniel,
es ist nicht kompliziert.
In anliegender Datei habe ich mal zwei Userformen reingebracht, die jetzt beide den gleichen Code zum Abschalten des Caption nutzen.
Die Declares bleiben Private, weil die Userformen jetzt die entsprechende Sub mit Übergabe der aufrufenden Userform aufrufen.
Im Userformcode bleibt praktisch je Userform nur der Aufruf übrig. So kann die Funktionalität von beliebig vielen UF genutzt werden.
https://www.herber.de/bbs/user/139407.xlsb
viele Grüße
Karl-Heinz
AW: Code im ganzen Pojekt anwenden
30.07.2020 18:14:50
volti
Hallo,
ergänzend zu Mullit's Aussage noch zwei Tipps:
Da ich Deinen Restcode hier nicht sehe...
Falls innerhalb der relevanten Sub's die Userform angesprochen werden sollte, kann das außerhalb der UF nicht mit z.B. Me erfolgen, sondern Du musst hier die Userform direkt angeben.
Ggf. kann dies bei mehreren UF's über eine Parameterübergabe ganz einfach passieren.
Falls Du nach wie vor die jeweile Sub in Deinem UF-Code behalten willst, mache alle ausgelagerten Declares zu Public statt Private.
Falls Du Probeleme haben solltest, poste mal den kompletten Code....
viele Grüße
Karl-Heinz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige