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

Fenstertitel eine Dialog-Box auslesen ...

Fenstertitel eine Dialog-Box auslesen ...
10.11.2018 13:18:45
Matthias
Hallo Excelfreunde
Ist es möglich den Fenstertitel
einer über VBA aufgerufenen DialogBox auszugeben.
Wenn ich also mit folgendem Code: Application.Dialogs(26).Show
diesen Dialog aufrufe, möchte ich den Fentertitel auslesen.
Ist das überhaupt machbar und wenn dann wie?
Ich möchte den Text direkt aus dem Fenster auslesen!
Userbild
Danke schon mal fürs Lesen.
Gruß Matthias

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fenstertitel eine Dialog-Box auslesen ...
10.11.2018 14:24:04
Karl-heinz
Hallo Matthias,
m.E. nach ist das nicht machbar. Dazu ein paar Erklärungen:
Grundsätzlich wäre das Auslesen von Fenstertiteln auch von Excel-Dialogboxen möglich. Das geht über die entsprechenden API-Funktionen. Hierzu benötigt man allerdings das Fenster-Handle. Um dieses zu erhalten, gibt es auch wieder API-Funktionen, die ich jetzt aber nicht weiter ausführen möchte.
Denn, wenn Du über VBA eine Dialogbox aufgerufen hast, ist diese an Excel gebunden und Dein VBA-Makro läuft nicht weiter, bis sie beendet wurde. D.H. Du kannst den Fenstertitel zumindest von der aktuellen Execlinstanz nicht auslesen.
viele Grüße
Karl-Heinz
Anzeige
Danke ... owT
10.11.2018 14:58:38
Matthias
AW: Fenstertitel eine Dialog-Box auslesen ...
10.11.2018 14:26:05
onur
Den Titel kann man seltsamerweise ÄNDERN, aber nicht auslesen (oder ich bin auf dem Holzweg).
Habe zwar keine Ahnung, wofür du etwas auslesen musst, was du bereits kennst, aber vielleicht hilft es dir ja, wenn du ihn änderst.
Danke ... owT
10.11.2018 14:59:00
Matthias
AW: Danke ... owT
10.11.2018 16:28:01
Mullit
Hallo,
das geht mit dem Api-Timer, dazu 'test' laufen lassen, wird hier im Direkt-Fenster ausgegeben...
Option Explicit

Private Declare Function GetWindowTextA Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Function GetWindowTextLengthA Lib "user32.dll" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
    
Public Sub test()
  Call prcStartTimer
  Call Application.Dialogs(xlDialogFont).Show
End Sub

Private Sub prcStartTimer()
Call SetTimer(Application.hWnd, 0&, 10&, AddressOf TimerProc)
End Sub

Private Sub prcStopTimer()
Call KillTimer(Application.hWnd, 0&)
End Sub

Private Sub TimerProc(ByVal pvlngHwnd As Long, ByVal pvlngnIDEvent As Long, _
    ByVal pvlnguElapse As Long, ByVal pvlnglpTimerFunc As Long)
Dim strTemp As String
Dim lngHwnd As Long, lngTextLength As Long
Call prcStopTimer
lngHwnd = GetActiveWindow
If lngHwnd <> 0 Then
  lngTextLength = GetWindowTextLengthA(lngHwnd)
  strTemp = Space$(lngTextLength)
  Call GetWindowTextA(lngHwnd, strTemp, lngTextLength + 1)
  Debug.Print strTemp
Else
  Call MsgBox("Das Fenster wurde nicht gefunden....!", vbExclamation)
End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
Der Hintergrund ...
10.11.2018 18:08:52
Matthias
Hallo Mullit
Danke für Deine Hilfe.
Ich bekomme leider immer den gleichen Text im Direktfenster. Oder ich habs nicht richtig verstanden?!
Es ist so, das ich nicht immer das gleiche Fenster öffne.
Ziel des Ganzen ist ja zu erfahren welcher (ich nenns mal [Index]), welches Dialog-Fenster öffnet.
Tabelle1

 AB
1BezeichnungXlDialog
2Öffnen2
3 3
4 4
5 5
6Speichern unter6
7Löschen7
8Drucken8
9Drucker einrichten9
10 10
11 11
12 Fenter anordnen12
13 13
14 14
15 15
16 16
17Makro17
18 18
19 19
20 20
21 21
22 22
23Drucktitel festlegen23
24 24
25 25
26Schriftarten26
27Bidschirmanzeigeoption27
28Blattschützen28
29 29


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Ich Öffne den Dialog mit Doppelklick in eine Zeile
Die Zeilennummer ist dann immer die Nummer des Dialogs
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Application.Dialogs(ActiveCell.Row).Show
End Sub
Ich möchte nun beim Öffnen des Dialogs, das mir VBA den Titelfenster-Text in die Zelle der Spalte("A") schreibt.
Der Dialog wird immer mit "Abrechen" geschlossen.
Klick ich also auf Zeile(12) - Application.Dialogs(12).Show
möchte ich in A12 den Dialog-Fenstertitel von Dialogs(12) schreiben.
Klick ich also auf Zeile(26) - Application.Dialogs(26).Show
möchte ich in A26 den Dialog-Fenstertitel von Dialogs(26) schreiben.
Da ich Autodidakt bin, hat das nur den einen Hintergrund zu lernen!
Wäre echt beeindruckt, wenns da eine Lösung gibt.
Oder dafür gibts wirklich keine Lösung?
Danke an Alle ...
Gruß Matthias
Anzeige
AW: Der Hintergrund ...
11.11.2018 18:09:57
Mullit
Hallo Matthias,
ja gut, da hast Du jetzt 'n paar Zusatzinfos hinterhergeschoben...;-)...Ist jetzt so'n bißchen die Frage, ob man das braucht, denn um die Apis wirst Du da nicht umherkommen, aber ok...
Ich hab hier 'n Bsp. das i. Pr. läuft, da wird allerdings die ErrNumber im Timer abgefragt, da Du ja auf Verdacht die Dialoge öffnen willst, das könnte so'n bißchen Bauchschmerzen verursachen, besser wär's wohl, Du gehst vorher ein fixe Liste mit den Konstanten der mögl. Dialoge durch und vermeidest den erzw. Fehler...
' ********************************************************************** 
' Modul: Tabelle1 Typ: Klassenmodul des Tabellenblattes 
' ********************************************************************** 

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 2 Then '// Doppelclickevent feuert hier nur in Sp. 2, mußt Du bei Bedarf ändern...//// 
   Cancel = True
   Call test(Target.Row)
End If
End Sub

' ********************************************************************** 
' Modul: Modul1 Typ: Standardmodul 
' ********************************************************************** 

Option Explicit

Private Declare Function GetWindowTextA Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Function GetWindowTextLengthA Lib "user32.dll" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
    
Private llngRow As Long
Private llngErrNumber As Long

Public Sub test(ByVal pvlngRow As Long)
    llngRow = pvlngRow
    Call prcStartTimer
    On Error Resume Next
    Call Application.Dialogs(pvlngRow).Show
    llngErrNumber = Err.Number
End Sub

Private Sub prcStartTimer()
Call SetTimer(Application.hWnd, 0&, 10&, AddressOf TimerProc)
End Sub

Private Sub prcStopTimer()
Call KillTimer(Application.hWnd, 0&)
End Sub

Private Sub TimerProc(ByVal pvlngHwnd As Long, ByVal pvlngnIDEvent As Long, _
    ByVal pvlnguElapse As Long, ByVal pvlnglpTimerFunc As Long)
Static sstrTemp As String
Static slngHwnd1 As Long
Dim lngTextLength As Long
If llngErrNumber = 0 Then
    If slngHwnd1 = 0 Then
        slngHwnd1 = GetActiveWindow
        If slngHwnd1 <> 0 Then
             If sstrTemp = vbNullString Then
                lngTextLength = GetWindowTextLengthA(slngHwnd1)
                sstrTemp = Space$(lngTextLength)
                Call GetWindowTextA(slngHwnd1, sstrTemp, lngTextLength + 1)
             End If
        Else
              Call prcStopTimer
              Call MsgBox("Das Fenster wurde nicht gefunden....!", vbExclamation)
              sstrTemp = vbNullString
              slngHwnd1 = 0
        End If
    ElseIf slngHwnd1 <> GetActiveWindow Then
        Call prcStopTimer
        Cells(llngRow, 1).Value = sstrTemp
        sstrTemp = vbNullString
        slngHwnd1 = 0
    End If
Else
    Call prcStopTimer
    sstrTemp = vbNullString
    slngHwnd1 = 0
    llngErrNumber = 0
    Call MsgBox("Dialog nicht vorhanden....!", vbExclamation)
End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
Vielen Dank, Mullit ...
11.11.2018 20:01:57
Matthias
Hallo Mullit
Danke für Deine Mühe.
Es ist genau so, wie ich es mir gewünscht habe :-)

DANKE !!!


Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige