Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Userform Max Breite festsetzen

Userform Max Breite festsetzen
15.04.2008 08:28:40
chris
Hallo VBA Experten,
guten morgen.Ich habe eine userform in der ich gerne die größe bestimmen möchte.
Das heißt die Maximale breite der Form.
Habe ein Makro aus dem Forum mit dem ich während der Laufzeit die größe der Form mit der Maus verändern kann.
Wie kann ich jetzt festlegen das die Maximalbreite der Userform nicht überschritten werden darf.
Ich hoffe mein Problem einigermaßen verständlich erklärt zu haben und würde mich sehr über Hilfe freuen.
Vielen Dank gruß Chris

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Max Breite festsetzen
15.04.2008 08:36:00
Renee
Hi Chris,
Da wir deinen, bzw den Forums-Code, nicht sehen können, ist es schwierig dir einen Tip zu geben.
Ein UF hat die Eigenschaft .Width und bei der Manipulation derselben müsste die Codeänderung angesetzt werden.
GreetZ Renée

AW: Userform Max Breite festsetzen (code)
15.04.2008 08:56:00
chris
Hallo Renee hier ist der Code um den es sich handelt.
Mit diesem Code erstelle ich die Userform.
Was und wo muss ich einbauen das die größe nur auf eine bestimmte breite verändert werden darf ?
Vielen Dank noch einmal
Option Explicit
'Zum erstellen der Main Userform
'Für Resize Min Max buttons und Resize Form mit Maus
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 MoveWindow Lib "User32" (ByVal hwnd As Long, _
ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowPos Lib "User32" Alias "SetWindowPosA" ( _
ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, ByVal uFlags As Long) As Long
Private Declare Function SetWindowText Lib "User32" Alias "SetWindowTextA" ( _
ByVal hwnd As Long, ByVal lpString As String) As Long
Const MF_APPEND = &H100&
Const MF_BITMAP = &H4&
Const MF_BYPOSITION = &H400&
Const MF_CHECKED = &H8&
Const MF_DISABLED = &H2&
Const MF_GRAYED = &H1&
Const MF_SEPARATOR = &H800&
Const MF_STRING = &H0&
Const MIIM_CHECKMARKS As Long = &H8
Const MIIM_DATA As Long = &H20
Const MIIM_ID As Long = &H2&
Const MIIM_STATE As Long = &H1&
Const MIIM_SUBMENU As Long = &H4
Const MIIM_TYPE As Long = &H10
Const MIIM_STRING As Long = &H40
Const MIIM_BITMAP As Long = &H80
Const MIIM_FTYPE As Long = &H100
Const WS_BORDER As Long = &H800000
Const WS_CAPTION As Long = &HC00000
Const WS_CHILD As Long = &H40000000
Const WS_CLIPSIBLINGS As Long = &H4000000
Const WS_DLGFRAME As Long = &H400000
Const WS_MAXIMIZE As Long = &H1000000
Const WS_MAXIMIZEBOX As Long = &H10000
Const WS_MINIMIZEBOX As Long = &H20000
Const WS_OVERLAPPED As Long = 0
Const WS_POPUP As Long = &H80000000
Const WS_SIZEBOX As Long = &H40000
Const WS_SYSMENU As Long = &H80000
Const WS_THICKFRAME As Long = &H40000
Const WS_OVERLAPPEDWINDOW As Long = WS_OVERLAPPED Or _
WS_CAPTION Or _
WS_SYSMENU Or _
WS_THICKFRAME Or _
WS_MINIMIZEBOX Or _
WS_MAXIMIZEBOX
Const WS_EX_DLGMODALFRAME As Long = &H1
Const WS_EX_ACCEPTFILES As Long = &H10
Const WS_EX_STATICEDGE As Long = &H20000
Const WS_EX_TOOLWINDOW As Long = &H80
Const WS_EX_TRANSPARENT As Long = &H20
Const WS_EX_WINDOWEDGE As Long = &H100
Const MFT_STRING As Long = 0
Const MFT_BITMAP As Long = &H4&
Const MFT_MENUBARBREAK As Long = &H20&
Const MFT_MENUBREAK As Long = &H40&
Const MFT_OWNERDRAW As Long = &H100&
Const GWL_WNDPROC = (-4)
Const GWL_STYLE As Long = (-16)
Const GWL_EXSTYLE As Long = (-20)
Const SM_CXSCREEN As Long = 0
Const SM_CYSCREEN As Long = 1
Const WM_SETICON As Long = &H80&
Const WM_SYSCOMMAND As Long = &H112&
Const SC_MINIMIZE As Long = &HF020&
Const SC_MAXIMIZE As Long = &HF030&
Const SC_CLOSE As Long = &HF060&
Const SC_SCREENSAVE As Long = &HF140&
Const ICON_SMALL As Long = &H0&
Const ICON_BIG As Long = &H1&
Dim WithEvents myUserForm As MSForms.UserForm
Dim m_Handle&, hIcon&, Border&
Dim hMainMenu&, hSubMenu&, hSubSubMenu&
Dim FormCaption$
Dim MaxBox As Boolean, MinBox As Boolean
Dim UFIconImage As Object
Public Enum BorderStyles
xlSolid = 0
xlChangeable = 1
End Enum

Public Sub Create(UF As MSForms.UserForm)
Set myUserForm = UF
FormCaption = myUserForm.Caption
m_Handle = GetHandle
SetWindowLong m_Handle, GWL_STYLE, GetStyle Or WS_OVERLAPPEDWINDOW
SetWindowLong m_Handle, GWL_STYLE, GetStyle Or Border
If MaxBox Then SetWindowLong m_Handle, GWL_STYLE, GetStyle Or WS_MAXIMIZEBOX
If MinBox Then SetWindowLong m_Handle, GWL_STYLE, GetStyle Or WS_MINIMIZEBOX
SetWindowLong m_Handle, GWL_EXSTYLE, GetStyle And WS_EX_WINDOWEDGE
If (hIcon) Then SendMessage m_Handle, WM_SETICON, ICON_SMALL, hIcon
'10:
'   On Error GoTo 0
End Sub



Private Function GetHandle() As Long
Select Case Int(Val(Application.Version))
Case 8 'Excel 97
GetHandle = FindWindow("ThunderXFrame", vbNullString)
Case 9, 10, 11 'Excel 2000, XP, 2003
GetHandle = FindWindow("ThunderDFrame", vbNullString)
End Select
End Function


Public Property Get hwnd() As Boolean
hwnd = m_Handle
End Property
Public Property Get Caption() As String
Caption = FormCaption
End Property
Public Property Let Caption(Title As String)
SetWindowText m_Handle, Title
FormCaption = Title
End Property
Public Property Get MaxButton() As Boolean
MaxButton = MaxBox
End Property
Public Property Let MaxButton(Status As Boolean)
MaxBox = Status
End Property
Public Property Get MinButton() As Boolean
MinButton = MinBox
End Property
Public Property Let MinButton(Status As Boolean)
MinBox = Status
End Property
Public Property Let BorderStyle(Style As BorderStyles)
Select Case Style
Case 0: Border = 0
Case 1: Border = WS_SIZEBOX
End Select
End Property


Public Sub CloseForm()
Unload myUserForm
End Sub



Public Sub Maximize()
SendMessage m_Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0&
End Sub



Public Sub Minimize()
SendMessage m_Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0&
End Sub



Public Sub Screensaver()
SendMessage m_Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0&
End Sub



Private Function GetStyle() As Long
GetStyle = GetWindowLong(m_Handle, GWL_STYLE)
End Function



Private Sub Class_Initialize()
MaxBox = True
MinBox = True
End Sub


Anzeige
AW: Userform Max Breite festsetzen (code)
15.04.2008 09:12:58
Renee
Hi Chris,
Mit diesem Code erstellst du keine Userform.
Der Code ist von hier kopiert und es fehlt der Code der Userform selbst. Wenn du Hilfe brauchst, wende dich an den Author des Codes oder lade eine vollständige Mappe hoch.
GreetZ Renée

AW: Userform Max Breite festsetzen (code)
15.04.2008 09:36:00
chris
Es ist mir nicht möglich eine Vollständige Mappe hochzuladen.
ich dachte mir kann jemand helfen der sich auskennt und mir sagen wie es möglich ist die Max breite der Form festzulegen.
Bitte lasse meinen Thread offen.:(

Anzeige
AW: Userform Max Breite festsetzen (code)
15.04.2008 10:00:26
Matthias
Hallo chris b.
Hier mal unabhängig von Deinem geposteten Code ein kleines Beispiel
Im Userform ist die Eigenschaft .Widh auf 100 festgelegt (bei Start des Userform's)
die Eigenschaft .Tag ist auf 240 gesetzt.
Nun vergleiche den Wert von .Widh mit .Tag
Da bei der Änderung der Breite des Formulares die .Widh-Eigenschaft geändert wird,
hast Du einen ständigen Vergleichswert. Ist nun .Widh größer als .Tag setze die Breite auf .Tag
hier mal eine kleine Beispielmappe, wie es meine.
https://www.herber.de/bbs/user/51560.xls
Deinen Beitrag lasse ich wie gewünscht "offen".
Userbild

Anzeige
AW: Userform Max Breite festsetzen (code)
15.04.2008 10:06:00
Renee
Hi Chris,
Diese Event-Procedure zusätzlich in die UF:

Private Sub UserForm_Resize()
Dim dMaxWidth As Double
dMaxWidth = 300         ' Maximale Breite der UF
If Me.Width > dMaxWidth Then Me.Width = dMaxWidth
End Sub


GreetZ Renée

AW: Userform Max Breite festsetzen (code)
15.04.2008 11:26:04
chris
hey super,
Vielen Dank euch beiden !
Danke Renee und Matthias und schönen Tag euch !!!!!!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige