1

現在開いているExcelファイルのタイトルを取得する次のコードがあります。このコードは正常に機能しています。タイトルが変更され、リスト1に新しいタイトルが追加された場合、10秒ごとにタイマーを使用します。

質問は、タイトルが変更された場合に私のコードが機能するかどうかを検出する方法またはイベントがあるかどうかです。このコードを実行すると、10 秒ごとにタイマー チェックが実行され、PC の動作が遅くなります

Private Const GW_HWNDNEXT = 2

Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, _
ByVal wCmd As Long) As Long

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

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount 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

Sub ListWins(Optional Title = "*", Optional Class = "*")
    Dim hWndThis As Long

    hWndThis = FindWindow(vbNullString, vbNullString)

    While hWndThis
        Dim sTitle As String, sClass As String
        sTitle = Space$(255)
        sTitle = Left$(sTitle, GetWindowText(hWndThis, sTitle, Len(sTitle)))

        sClass = Space$(255)
        sClass = Left$(sClass, GetClassName(hWndThis, sClass, Len(sClass)))

        If sTitle Like Title And sClass Like Class Then
            Debug.Print sTitle, sClass
            List1.AddItem (sTitle)
        End If

        hWndThis = GetWindow(hWndThis, GW_HWNDNEXT)
    Wend
End Sub

Private Sub Timer1_Timer()
    ListWins "*.xls*"
End Sub
4

2 に答える 2

0

答えはNoです。私の知る限り、vb6には、Excelまたは他のウィンドウでタイトルの変更をトラップするイベントはありません。また、残念ながら10秒のタイマーは良くないかもしれません。タイトルが 2 秒ごとに変わるとどうなりますか? すべてのタイトルを取得するわけではありません

ただし、Timer Control を使用しないこの代替手段を試してください。あなたのPCがまだ遅いかどうかを確認してください...

Sub Sample()
    '
    ' ~~> Rest of your code
    '

    Wait 2 '<~~ Wait for 2 seconds

    '
    ' ~~> Rest of your code
    '
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub
于 2013-09-15T14:10:11.557 に答える