2014-01-20 47 views
0

所以我正在試驗關閉窗口/應用程序在我寫的VBA宏。許多帖子在網上建議從Windows API使用FindWindowExcel 2010 VBA宏關閉特定的記事本窗口。 (findwindow給出不匹配類型的錯誤??)

我開始慢,我試圖從我的宏關閉記事本窗口。 (它是我想要的幾件事情之一,但它似乎是最簡單的),我找到了一個解決方案,我忘記了它發佈的地方,它簡短而又甜蜜。

Sub CheckNotepad() 
Dim hwnd As Long 
hwnd = FindWindow("Notepad", vbNullString) 
If hwnd Then 
    MsgBox "Notepad is running, the window handle is " & hwnd 
Else 
    MsgBox "Notepad is not running" 
End If 
End Sub 

似乎很大,如何獲取記事本窗口句柄,並從那裏我能找到的代碼使用手柄來關閉窗口的開始。但它不適合我!

我發現的所有例子都使用了2個參數,其中一半使用vbNullString作爲第二個參數,其中一些使用字符串作爲特定窗口的標題。但它對我來說都不起作用。

唯一可行的是爲第二個參數提供0(我假設這代替了vbNullString),但是如果我嘗試使用vbnullstring或實際字符串,則會出現類型不匹配錯誤。如果我嘗試使用任何其他數字,則Excel停止工作。 (可愛的「程序已停止工作」消息出現

因此,可以給我一些建議,爲什麼發生這種情況?我可以只使用0,但我猜我的用戶將有其他記事本窗口打開我希望能夠提供一個參數來查找特定的記事本窗口(它將成爲一個臨時窗口,在宏觀期間彈出,隨後關閉,因爲我不想讓它留給他們看)

在此先感謝

回答

1

我剛想出解決方案,它很笨,我想哭。今天肯定是星期一。

當我放入聲明時(我不能爲了我的生活弄清楚它是如何發生的,因爲我發現我在哪裏得到的代碼,它沒有錯誤)我宣佈的API:

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

有人看到這個問題嗎?我把As Long旁邊的ByVal lpWindowName顯然應該是字符串。啊!另外,我發現了一個有趣的關於Windows 7 32和64位/ VBA7兼容性的發言,我想發佈。顯然,Windows 7 64位中的大多數API函數應該使用ptrSafe來聲明。

Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

繼承人的地方,我發現的鏈接::http://msdn.microsoft.com/en-us/library/ff700513(v=office.11)

一個提到VBA7,這一個提到32,從而例如,如果我是usign 64位I應該聲明,API vs 64位窗口:http://www.jkp-ads.com/articles/apideclarations.asp

非常感謝您的任何意見和考慮!

+0

這就是爲什麼我總是從MSDN複製API參考。不能出錯(特別是錯字):-) ...很好,您的問題已解決。 –

2

我想你忘了申報API。請嘗試以下(在一個模塊)

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

Sub CheckNotepad() 
Dim hwnd As Long 
hwnd = FindWindow("Notepad", "HOUSE.txt - Notepad") 
If hwnd Then 
    MsgBox "Notepad is running, the window handle is " & hwnd 
Else 
    MsgBox "Notepad is not running" 
End If 
End Sub 

這將爲您提供在記事本中打開的HOUSE.txt文件的句柄。

+0

感謝您的回答,(包括使用字符串來獲取特定文件名),但我並沒有忘記聲明api。 - 我會在幾秒後發佈發生的事情 – user1759942