在Excel VBA中列出打开的窗口最简单的方法是什么?

时间:2013-03-15 03:45:16

标签: excel-vba vba excel

我知道我可以一直在Google上搜索,但我一直在生气,直到我不确定我应该搜索哪些条款。在这里听听你的建议会很有帮助。

示例:

Sub Macro1()
'
' Macro1 Macro
'

'
    Windows("FL_bounces.csv").Activate
    Windows("auto_dealers_FL.csv").Activate
    Windows("FL_bounces.csv").Activate
    Windows("auto_dealers_FL.csv").Activate
End Sub

除非我不知道窗户的名称是打开的。

编辑#2:

Sub Macro1()
'
' Macro1 Macro
'

'
    Dim wn, contacts, report As Excel.Window
    Dim windows(1 To 100) As Excel.Window
    Dim i As Integer

    i = 1
    For Each wn In Application.windows
        windows(i) = wn
        i = i + 1
    Next wn

    If IsEmailValid(windows(1).Cells(1, 1)) = True Then
        report = windows(1)
        contacts = windows(2)
    Else
        contacts = windows(1)
        report = windows(2)
    End If


End Sub

你在这次修改中看错了什么?

3 个答案:

答案 0 :(得分:1)

这将列出即时窗格中所有当前打开的窗口:

Sub ListWindows()
Dim wn As Excel.Window
For Each wn In Application.Windows
    Debug.Print wn.Caption
Next wn
End Sub

或者,如果您想激活它们,就像在示例代码中一样

Sub ActivateWindows()
Dim wn As Excel.Window
For Each wn In Application.Windows
    wn.Activate
    MsgBox wn.Caption & " Window Activated"
Next wn
End Sub

答案 1 :(得分:1)

尝试AutoIT。您需要参考AutoIT dll。 这里是您可以从哪里下载autoit dll http://www.autoitscript.com/site/autoit/

的链接

AutoIt中的variant数据类型本身支持窗口句柄(HWND)。窗口句柄是Windows在每次创建时分配给窗口的特殊值。当你有一个句柄时,你可以在任何使用标题/文本约定的函数调用中使用它来代替title参数。使用窗口句柄的优点是,如果打开一个应用程序的多个副本 - 具有相同的标题/文本 - 您可以在使用句柄时唯一标识它们。当您为title参数使用窗口句柄时,将完全忽略text参数。

WinGetHandle,WinList和GUICreate等各种函数返回这些句柄。重要的是要注意窗口句柄不被分类为数字或字符串 - 它是它自己的特殊类型。

Public Sub TestingAutoIT()
    Dim autoItObj As AutoItX3
    Set autoItObj = New AutoItX3

    With autoItObj    
        .WinActivate ("A Window Name")        
    End With

    Set autoItObj = Nothing
End Sub

答案 2 :(得分:0)

今天,我找到了解决方法posted by VBA Express。它将列出活动表上所有打开的窗口。

请注意,“窗口”不一定是用户通常想到的...某些窗口是Windows看到的许多窗口的集合。