gibt es eine Möglichkeit eine Form in Excel VBA resizable
zu machen (oder noch besser in der Titelleiste auch die
Min/Max-Buttons anzeigen). Der Benutzer soll die
Möglichkeit erhalten die Grösse der Form selbst zu
bestimmen. Komischerweise gibt es zwar ein Resize-
Ereignis, aber ich finde keine Möglichkeit die Größe bei
der Programmausführung zu ändern (ausser natürlich über
eine Schaltfläche, die die Height und width -Einstellungen
verändert).
Danke
Mark
Gruß
stefan
>-----Originalnachricht-----
>.
>
"Mark Eisele" schrieb:
kein Problem!
Folgendes in das Klassenmodul der Userform:
Option Explicit
'Für Min-Max Schaltfläche und Resize
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 FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName _
As String) As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000
Private Sub MinMaxMenu()
Dim hwndForm As Long, lngStyle As Long
Dim Titel As String
Titel = Me.Caption
Me.Caption = "lhdsgterfsdt"
hwndForm = FindWindowA(vbNullString, "lhdsgterfsdt")
Me.Caption = Titel
lngStyle = GetWindowLong(hwndForm, GWL_STYLE)
lngStyle = lngStyle Or WS_MAXIMIZEBOX
lngStyle = lngStyle Or WS_MINIMIZEBOX
lngStyle = lngStyle Or WS_THICKFRAME
SetWindowLong hwndForm, GWL_STYLE, lngStyle
DrawMenuBar hwndForm
End Sub
Private Sub UserForm_Activate()
MinMaxMenu
End Sub
Private Sub UserForm_Resize()
MinMaxMenu
End Sub
MfG
Michael
--
-------------------------------------------
Michael Schwimmer
Home neu: http://michael-schwimmer.de
Option Explicit
'Für Min-Max Schaltfläche und Resize
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 FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName _
As String) As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000
Private hForm As Long
Private Sub MinMaxMenu()
Dim lStyle As Long
Dim sTitel As String
If hForm = 0 Then
sTitel = Me.Caption
Me.Caption = "lhdsgterfsdt"
hForm = FindWindowA(vbNullString, "lhdsgterfsdt")
Me.Caption = sTitel
End If
lStyle = GetWindowLong(hForm, GWL_STYLE)
lStyle = lStyle Or WS_MAXIMIZEBOX
lStyle = lStyle Or WS_MINIMIZEBOX
lStyle = lStyle Or WS_THICKFRAME
SetWindowLong hForm, GWL_STYLE, lStyle
DrawMenuBar hForm
End Sub
Private Sub UserForm_Activate()
MinMaxMenu
End Sub
Private Sub UserForm_Resize()
MinMaxMenu
End Sub
Ich habe die Bleistiftmappe mal auf meiner Homepage zum downloaden
bereitgestellt. Unter http://michael-schwimmer.de , ExcelSpecial und
dort unter Punkt 80.
wäre echt super wenn Du mir die Datei zumailen könntest!
me @ amtec-services.de
Danke
>-----Originalnachricht-----
>.
>
fkt super !
Vielen Dank
>-----Originalnachricht-----
>.
>
Gruß
stefan
>-----Originalnachricht-----
>.
>
"Mark Eisele" schrieb:
> fkt super !
freut mich :-)
Und danke für die Rückmeldung.
Ich habe aber noch kleines Problem am Rande:
Wenn ich die Userform minimiert habe kann ich die
Excel-Tabellen dennoch nicht bearbeiten ohne die Form
zu schließen. Hat jemand einen Tip parat?
Gruß
Peter
Problem ist gelöst, aber leider nur für Excel 2000:
Die Form muß zu diesem Zeck "nonmodal" sein.
Dazu wird der Show Methode "Falsch" mitgegeben:
userform.Show False
Das gilt für Excel 2000. Angeblich hat Excel 97
nicht diese "einfache" Funktionalität. Frage: Wie ist der
code wenn die Anwendung unter beiden Versionen
laufen soll?
Grüße
Peter
"Peter Ostermann" schrieb:
> > Ich habe aber noch kleines Problem am Rande:
> > Wenn ich die Userform minimiert habe kann ich die
> > Excel-Tabellen dennoch nicht bearbeiten ohne die Form
> > zu schließen. Hat jemand einen Tip parat?
> Problem ist gelöst, aber leider nur für Excel 2000:
> Die Form muß zu diesem Zeck "nonmodal" sein.
> Dazu wird der Show Methode "Falsch" mitgegeben:
> userform.Show False
> Das gilt für Excel 2000. Angeblich hat Excel 97
> nicht diese "einfache" Funktionalität. Frage: Wie ist der
> code wenn die Anwendung unter beiden Versionen
> laufen soll?
Option Explicit
'Für Min-Max Schaltfläche, Resize und modeless
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 FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName _
As String) As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EnableWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal bEnable As Long _
) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000
#If VBA6 = 0 Then
'*************************************
Private Sub UserForm_Activate()
Dim hXL As Long
hXL = FindWindowA(vbNullString, Application.Caption)
EnableWindow hXL, True
MinMaxMenu
End Sub
#Else
Private Sub UserForm_Activate()
MinMaxMenu
End Sub
#End If
Private Sub MinMaxMenu()
Dim hForm As Long, lStyle As Long
Dim Titel As String
Titel = Me.Caption
Me.Caption = "lhdsgterfsdt"
hForm = FindWindowA(vbNullString, "lhdsgterfsdt")
Me.Caption = Titel
lStyle = GetWindowLong(hForm, GWL_STYLE)
lStyle = lStyle Or WS_MAXIMIZEBOX
lStyle = lStyle Or WS_MINIMIZEBOX
lStyle = lStyle Or WS_THICKFRAME
SetWindowLong hForm, GWL_STYLE, lStyle
DrawMenuBar hForm
End Sub
Private Sub UserForm_Resize()
MinMaxMenu
End Sub
Die Userform muss nun noch abhängig von der Version mit der Methode Show
angezeigt werden. Dazu eine kleine Hilfsprozedur schreiben und diese
aufrufen, um die Userform anzeigen:
#If VBA6 = 0 Then
Private Sub UserFormAnzeigen()
DeineUserform.Show
End Sub
#Else
Private Sub UserFormAnzeigen()
DeineUserform.Show False
End Sub
#End If
Ich bin eben gerade von der Arbeit gekommen und konnte es deshalb nur
unter XL97 testen. Wenn es nicht funzt, sag bescheid, dann probiere ich
es heute Nacht mal unter anderen Versionen aus.
um die 97er Version zu testen, muß ich erst
auf dem Dachboden das alte Office suchen
und auf dem Nebenrechner installieren.
Ich brauche alles jedenfalls lauffähig unter
beiden Office Versionen.
Der code den Du früher in diesem thread
gepostet hattest funktioniert jedenfalls unter Office
2k und mußte nur um "USERFORM.show false"
erweitert werden.
- Was bedeuten die Doppelkreuze "#"
vor den if und end stmts.?
- Die Variable VBA6 ist bei mir nicht
bekannt. Wie kann ich sie mit der
Excel-Version "austatten"?
Grüße
Peter
"Michael Schwimmer" <schw...@t-online.de> schrieb im Newsbeitrag
news:c1uj7j$ipq$00$1...@news.t-online.com...
"Peter Ostermann" schrieb:
> um die 97er Version zu testen, muß ich erst
> auf dem Dachboden das alte Office suchen
> und auf dem Nebenrechner installieren.
> Ich brauche alles jedenfalls lauffähig unter
> beiden Office Versionen.
Unter XL97 brauchst du nicht zu testen. Dort funzt es.
Ich benutze daheim (aus Überzeugung) immer noch XL97.
> - Was bedeuten die Doppelkreuze "#"
> vor den if und end stmts.?
> - Die Variable VBA6 ist bei mir nicht
Such mal in der Onlinehilfe nach bedingter Kompilierung.
Je nach Wert der Konstanten VBA6 wird nur der Zweig Kompiliert, der auch
Wahr ist. Existiert die Konstante VBA6 (ab XL2000), wird die Methode
Show mit dem Parameter False benutzt.
Unter XL97 gibt es ohne die bedingte Kompilierung einen Fehler, wenn du
bei der Methode Show einen Parameter benutzt. Diesen Fehler kannst du
aber nicht abfangen.
> bekannt. Wie kann ich sie mit der
> Excel-Version "austatten"?
Du brauchst nichts ausstatten, das müsste ohne Änderung Funktionieren.
> > - Was bedeuten die Doppelkreuze "#"
>
> Such mal in der Onlinehilfe nach bedingter Kompilierung.
Danke für den Hinweis. Wieder was dazugelernt!
Ich hatte in verschiedenen VisualBasic Büchern
gesucht: In keinem Schlagwortverzeichnis ist "#"
erwähnt.
> Unter XL97 brauchst du nicht zu testen. Dort funzt es.
> Ich benutze daheim (aus Überzeugung) immer noch XL97.
>
Unter XL2k hat es auch funktioniert. Zwischen allen beim
Start geöffneten Mappen ist wechselweiser Zugriff möglich.
Jedoch: Das funktioniert so leider nicht unter XL97! Die Mappe
aus der das Userform gestartet wurde ist zwar mit allen Tabellen
im Zugriff. Wird jedoch eine der anderen Mappen "angefaßt" gibts
keinen Weg zurück; die erste Mappe ist jetzt gesperrt. Gibt es
auch dafür eine Lösung?
Grüße
Peter
"Peter Ostermann" schrieb:
> Jedoch: Das funktioniert so leider nicht unter XL97! Die Mappe
> aus der das Userform gestartet wurde ist zwar mit allen Tabellen
> im Zugriff. Wird jedoch eine der anderen Mappen "angefaßt" gibts
> keinen Weg zurück; die erste Mappe ist jetzt gesperrt. Gibt es
> auch dafür eine Lösung?
kann ich so nicht nachvollziehen. Mit Strg/F6 kannst du ohne Probleme
zwischen den Mappen wechseln.
Ich habe aber vergessen zu erwähnen, dass du die Menüs erst benutzen
kannst, wenn du einen doppelklick auf irgend ein Menü gemacht hast. Dann
geht das Popup Anpassen auf, wenn du das ohne Änderung geschlossen hast,
funzt auch der Rest. Ich habe auch noch keine Möglichkeit gefunden, das
zu umgehen.
> > Wird jedoch eine der anderen Mappen "angefaßt" gibts
> > keinen Weg zurück; die erste Mappe ist jetzt gesperrt.
>
Meine Aussage stimmt nicht ganz. Neue Erkenntnis: Wird
eine Schaltfläche im Userform betätigt, welche eine Routine startet,
die Aktionen mit der ersten Mappe durchführt, sie also aktiviert,
dann ist auch diese wieder für Mausklicks verfügbar. Eigentlich
logisch, hätte ich gleich erkennen sollen.
Danke für Deine Hinweise unten! Diese Tips und dann noch
Google/Groups - da ist man gut versorgt. ;-)
Grüße aus dem Norden
Peter
Home neu: www.pkf-ostermann.de
"Peter Ostermann" schrieb:
>Meine Aussage stimmt nicht ganz. Neue Erkenntnis: Wird
>eine Schaltfläche im Userform betätigt, welche eine Routine startet,
>die Aktionen mit der ersten Mappe durchführt, sie also aktiviert,
>dann ist auch diese wieder für Mausklicks verfügbar. Eigentlich
>logisch, hätte ich gleich erkennen sollen.
freut mich, dass es funktioniert.
> Danke für Deine Hinweise unten! Diese Tips und dann noch
> Google/Groups - da ist man gut versorgt. ;-)
Das interpretiere ich mal als Lob an diese NG, vielen Dank!