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

Problem mir Private declare

Problem mir Private declare
12.11.2003 17:48:21
chris b.
Hallo Excelprofis, ich weiß nicht weiter :(
Hoffe es gibt eine Lösung und ihr könnt mir helfen.. es geht um folgendes ich habe eine Userform
dieser Code Leuft jetzt habe ich auch aus dem forum einen code bekommen mit dem ich die userform dauerhaft im vordergrund halten kann. Dieser code->

Option Explicit

Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "User32" (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 wFlags As Long) As Long


Private Sub CommandButton1_Click()
Unload Me
End Sub




Private Sub UserForm_Activate()
SetWindowPos FindWindow(vbNullString, Me.Caption), -1, 0, 0, 0, 0, 83
End Sub




Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = 1
End Sub



jetzt das Probelm in meiner userform habe ich auch schon Declare Anweisungen stehen auch eine die FindWindow heißt und die beisen sich.
einmal diese aus dem neuen Code ->

"Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long"

und noch die alte die ich schon hatte->

"Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long"

die unterscheiden sich hier habe ich gesehen
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long"
in der einen sagt der code dim as string und im andere steht dim as long.

Wenn ich nur eine Declare anweisung von den beiden benutze kommt auch ein fehler...
Ich hoffe es gibt eine einfache lösung und ihr könnt mir helfen..
Vielen Dank Christian

p.S hier ist noch falls benötigt der alte code der schon in der userform ist...:>

Public x1 As String

Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal wIndx As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Const GWL_STYLE = (-16)
Const WS_VISIBLE = &H10000000
Const WS_BORDER = &H800000
Dim m1

Public cb As String
Dim whandle





Private Function GetWindowTitle(ByVal hWnd As Long) As String
Dim lResult As Long, sTemp As String
lResult = GetWindowTextLength(hWnd) + 1
sTemp = Space(lResult)
lResult = GetWindowText(hWnd, sTemp, lResult)
GetWindowTitle = Left(sTemp, Len(sTemp) - 1)
End Function





Private Sub CommandButton2_Click()
cb = ComboBox1.Value
Cells(1, 1) = cb
'Unload UserForm1
'UserForm1.Hide
If OptionButton1.Value = True Then Call vordergrund
If OptionButton2.Value = True Then Call hintergrund
Label1.Caption = "Fertig"
NeueStunde = Hour(Now())
NeueMinute = Minute(Now())
NeueSekunde = Second(Now()) + 1
WarteZeit = TimeSerial(NeueStunde, NeueMinute, NeueSekunde)
Application.Wait WarteZeit
Label1.Caption = ""
End Sub




Private Sub CommandButton3_Click()
Unload UserForm1
UserForm1.Hide
Application.Visible = True
End Sub





Private Sub UserForm_Initialize()
Dim hWnd As Long, sTitle As String, lStyle As Long
hWnd = GetWindow(FindWindow(ByVal 0&, ByVal 0&), GW_HWNDFIRST)
Do
lStyle = GetWindowLong(hWnd, GWL_STYLE) And (WS_VISIBLE Or WS_BORDER)
sTitle = GetWindowTitle(hWnd)
If (lStyle = (WS_VISIBLE Or WS_BORDER)) = True And Trim(sTitle) <> "" Then
'    MsgBox sTitle
ComboBox1.AddItem sTitle
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop Until hWnd = 0
End Sub




Private Sub CommandButton4_Click()
Unload UserForm1
UserForm1.Hide
Load UserForm1
UserForm1.Show
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mir Private declare
12.11.2003 20:17:03
Nepumuk
Hallo Chris,
wirf die Funktion, die die Variablen als Long übergibt, raus und ändere die Zeile:

hWnd = GetWindow(FindWindow(ByVal 0&, ByVal 0&), GW_HWNDFIRST)

so:

hWnd = GetWindow(FindWindow(vbNullString, vbNullString), GW_HWNDFIRST)

Der Hintergrund, in VB bekommst du von der Form (Userform in VBA) die Fensternummer (hWnd = handle Window) als Long geliefert. In VBA muss nach der Caption des Fensters gesucht werden. Daher die verschiedenen Versionen, die aber auf die selbe Funktion zugreifen.

Noch ein Tipp, die Wait - Anweisung in VBA legt das Betriebssystem ziemlich lahm. Verwende folgende Alternative:


Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Test_warten()
Beep
Sleep 3000 '3 Sekunden warten
Beep
End Sub



Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk
Anzeige
AW: Problem mir Private declare
13.11.2003 14:49:13
chris b.
danke Nepumuk !!!!
AW: riesen prb brings nicht mehr hin ;(
13.11.2003 18:04:07
chris b.
Hallo Nepumuk , sorry jetzt klappt gar nix mehr :((
Würde mich riesig freuen wenn du dir noch etwas Zeit nimmst und ne hilfe schreibst !
Was ich möchte ist wie es schon teilweise im code funktioniert ist das die userform dauerhaft sichtbar bleibt und die Fenster die ich dann über die Combobox auswähl ? Wäre super wenn du mir noch einmal hilfst,
Vielen dank Christian !!!!!
AW: riesen prb brings nicht mehr hin ;(
13.11.2003 21:46:47
Nepumuk
Hallo Chris,
damit ich nicht unter dem Druck stehe, dein Problem vor der Archivierung deiner Anfrage zu lösen, wäre es vorteilhaft, wenn du mir eine E-Mail schreibst und wir das privat abwickeln. Der dabei entstehende Code wird für die meisten Forumsbesucher so wie so unverständlich sein. Wenn er funktioniert, können wir ihn veröffentlichen.
Gruß
Nepumuk
P.S. Die Adresse findest du in der Profilliste.
Anzeige
AW: riesen prb brings nicht mehr hin ;(
14.11.2003 07:54:19
chris b
Hallo Nepumuk , es funktioniert doch wieder , sorry habe deinen Beitrag erst jetzt gelesen.
Habe nur noch ein Problem mit dem Excel 97 bei 2000 funkt es. Aber da habe ich gerade bevor ich diesen Beitrag gelesen habe schon einen Verfasst..
Zur info, :)
bald hab ich wieder DSL ab Dez oder Januar und dann spätestens kenne ich mich mit den Profilen usw.. hier auf der Seite aus :)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige