我用CreateObject的方法打开了一个Excel.然后想用 Visible = True 的方法让该Excel跳到屏幕的最前面.
可是往往是Excel在任务栏上闪来闪去的.就是不肯跑到屏幕的最前面.请问该如何解决这个问题?谢谢大家!

解决方案 »

  1.   

    有的时候可以,有的时候不行,特别是编译成Exe文件,到别人的计算机上后更是不行.
      

  2.   

    先用findwindow获得Excel主窗口的句柄,然后调用SetWindowPos使窗口置前
      

  3.   

    大致就是这样:
    Option ExplicitConst HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2
    Const SWP_NOSIZE = &H1
    Const SWP_NOMOVE = &H2
    Const SWP_NOACTIVATE = &H10
    Const SWP_SHOWWINDOW = &H40
    Private Declare Sub 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)
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click()
    Dim a As New Excel.Application
    a.Visible = True
    a.Workbooks.Add
    Dim mhwnd As Long
    mhwnd = FindWindow("XLMAIN", vbNullString)
    SetWindowPos mhwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End Sub
      

  4.   

    赞同rainstormmaster大哥不过,可能用SetForegroundWindow代替SetWindowPos 更符合楼主的要求楼主自己看哪个合适用哪个了
      

  5.   

    多谢rainstormmaster.这个方法是不错.不过参数稍需要微改一下.我不是要TopMost.
    如果没有好的方法,我明天就结贴了.
      

  6.   

    用SetForegroundWindow代替SetWindowPos ,看看符合你的要求吗修改一下rainstormmaster大哥的代码:Option Explicit
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click()
        Dim a As New Excel.Application
        a.Visible = True
        a.Workbooks.Add
        Dim mhwnd As Long
        mhwnd = FindWindow("XLMAIN", vbNullString)
        SetForegroundWindow mhwnd
    End Sub