記事本是另外一個程式自動打開的,我事先并不知道該文本的名稱和路徑,所以不可以用Open ...for...陳述句來操作。
我是想通過VBA發現系統打開了一個記事本之后,將里面的內容復制到Excel中,然后將該記事本關閉。
請教各位高手該如何寫代碼,謝謝!
uj5u.com熱心網友回復:
http://www.autohotkey.comuj5u.com熱心網友回復:
不需要用“打開”這個動作,只需要“讀取”。把檔案中的內容都讀取完了,就行了
uj5u.com熱心網友回復:
vb還是vba?excel ,vba的話不能關閉外部程式
vb的話,提供下思路
定時搜索記事本的表單,然后getwindowstext,接著打開excel輸入資料,然后關閉記事本.
uj5u.com熱心網友回復:
搜索當前所有視窗,判斷是不是記事本,是的話,取子視窗,再發訊息取回文本。uj5u.com熱心網友回復:
Option Explicit
Private Const WM_DESTROY As Long = &H2
Private Const WM_NCDESTROY As Long = &H82
Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim lLength As Long
Dim sText As String
Dim hEdit As Long
'獲取表單標題,判斷是否為記事本'
lLength = GetWindowTextLength(hwnd)
If lLength = 0 Then GoTo NextWindow
sText = Space(lLength)
GetWindowText hwnd, sText, lLength + 1
If Not (sText Like "* - 記事本") Then GoTo NextWindow
Debug.Print Hex(hwnd) & " : " & sText
'取得編輯框文本'
hEdit = FindWindowEx(hwnd, 0&, "Edit", vbNullString)
lLength = GetWindowTextLength(hEdit)
If lLength = 0 Then
sText = vbNullString
Else
sText = Space(lLength)
GetWindowText hEdit, sText, lLength + 1
End If
Debug.Print Hex(hEdit) & " : " & sText
'關閉記事本'
PostMessage hwnd, WM_DESTROY, 0&, 0&
PostMessage hwnd, WM_NCDESTROY, 0&, 0&
StopEnum:
EnumWindowsProc = False
Exit Function
NextWindow:
EnumWindowsProc = True
End Function
Public Sub f()
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
End Sub
運行上面的宏 f 即可。
EnumWindowsProc 里面取得的記事本內容(sText),你可以直接輸出到 Excel 中。
uj5u.com熱心網友回復:
可以用我幾年前寫的一個類clswindow,非常方便。clswindow介紹:http://blog.csdn.net/sysdzw/article/details/9083313
下面代碼測驗通過。
Sub 按鈕1_Click()
Dim w As New clsWindow
Range("A1") = w.GetWindowByTitleEx("記事本", 1).GetElementTextByClassName("edit")
w.CloseWindow'關閉記事本視窗
End Sub
如果一個程式有多個視窗的話關閉用w.CloseApp
視窗關倍訓可以用淡出特效:w.FadeOut , True '慢慢消失最后關閉視窗
uj5u.com熱心網友回復:
上面代碼的測驗檔案已上傳,下載地址:http://download.csdn.net/detail/sysdzw/9401598轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/81853.html
標籤:VBA
