从excel VBA打开并写入记事本

我需要打开记事本,并从我的macros写我的结果。 我想打开记事本并写入,并让用户查看,如果他或她想保存它,然后保存在任何他们喜欢的地方。 而不是在代码中写入并保存在计算机上。

谢谢

类似Tarik的回答,我可能会使用类似下面的内容:

In a class module called NotepadManager: Option Explicit Private Const CAPTION$ = "Notepad" Private MHwnd As Long 'based on code lifted from: 'http://www.pbdr.com/vbtips/api/FindCloseAPI.htm Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _ (ByVal hWnd As Long, ByVal lpString As String, _ ByVal aint As Long) As Long Private Declare Function GetWindow Lib "user32" _ (ByVal hWnd As Long, ByVal wCmd As Long) As Long Private Declare Function EnumWindows Lib "user32" _ (ByVal wndenmprc As Long, ByVal lParam As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long Private Declare Function SetForegroundWindow Lib "user32" ( _ ByVal hWnd As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Const WM_CLOSE = &H10 Private Const GW_HWNDFIRST = 0 Private Const GW_HWNDLAST = 1 Private Const GW_HWNDNEXT = 2 Private Const GW_HWNDPREV = 3 Private Const GW_OWNER = 4 Private Const GW_CHILD = 5 Private Const GW_MAX = 5 Private mstrTarget As String Private mblnSuccess As Boolean Public Sub writeMessageToNotepad(ByRef message As String) focusNotepad Sleep 2000 SendKeys (message) End Sub Public Sub startNotepad() Dim ret ret = Shell("notepad", vbNormalFocus) End Sub Public Sub focusNotepad() If MHwnd = 0 Then MHwnd = hwndFindWindow(CAPTION$) End If If MHwnd = 0 Then MsgBox "Error: Cannot find notepad." Debug.Print SetForegroundWindow(MHwnd) End Sub Private Function hwndFindWindow(strApplicationTitle As String) As Long Dim hWndTmp As Long Dim nRet As Integer Dim TitleTmp As String Dim TitlePart As String Dim MyWholeTitle As String Dim mCounter As Long Dim hWndOver As Integer Dim sClassName As String * 100 hwndFindWindow = False TitlePart = UCase$(strApplicationTitle) 'loop through all the open windows hWndTmp = FindWindow(0&, 0&) Do Until hWndTmp = 0 TitleTmp = Space$(256) nRet = GetWindowText(hWndTmp, TitleTmp, Len(TitleTmp)) If nRet Then 'retrieve window title TitleTmp = UCase$(VBA.Left$(TitleTmp, nRet)) 'compare window title & strApplicationTitle If InStr(TitleTmp, TitlePart) Then hwndFindWindow = FindWindow(vbEmpty, TitleTmp) Exit Do End If End If hWndTmp = GetWindow(hWndTmp, GW_HWNDNEXT) mCounter = mCounter + 1 Loop End Function Private Function EnumCallback(ByVal app_hWnd As Long, _ ByVal param As Long) As Long Dim buf As String * 256 Dim title As String Dim length As Long ' Checks a returned task to determine if App should be closed ' get window's title. length = GetWindowText(app_hWnd, buf, Len(buf)) title = Left$(buf, length) ' determine if target window. If InStr(UCase(title), UCase(mstrTarget)) <> 0 Then ' Kill window. SendMessage app_hWnd, WM_CLOSE, 0, 0 mblnSuccess = True End If ' continue searching. EnumCallback = 1 End Function 

而在一个正常的模块中:

 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub test() Dim m As New NotepadManager m.startNotepad m.focusNotepad Sleep 2000 m.writeMessageToNotepad "My message" Debug.Print "done" End Sub 

但是,我经常发现,当用户与机器进行交互时,确保窗口焦点是最困难的事情。

使用下面的代码来打开记事本,并键入它:

 Dim myApp As String myApp = Shell("Notepad", vbNormalFocus) SendKeys "test", True