Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从excel VBA打开并写入记事本_Vba_Excel_Project_Notepad - Fatal编程技术网

从excel VBA打开并写入记事本

从excel VBA打开并写入记事本,vba,excel,project,notepad,Vba,Excel,Project,Notepad,我需要打开记事本,将宏中的结果写入记事本。我想打开记事本并向其写入内容,让用户查看,如果他或她想保存,则将其保存到他们喜欢的任何位置。而不是写它和保存在计算机上所有的代码 谢谢使用以下代码打开记事本并键入: Dim myApp As String myApp = Shell("Notepad", vbNormalFocus) SendKeys "test", True 与塔里克的回答类似,我可能会使用以下内容: In a class module called NotepadManage

我需要打开记事本,将宏中的结果写入记事本。我想打开记事本并向其写入内容,让用户查看,如果他或她想保存,则将其保存到他们喜欢的任何位置。而不是写它和保存在计算机上所有的代码


谢谢使用以下代码打开记事本并键入:

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

与塔里克的回答类似,我可能会使用以下内容:

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

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

我建议浏览此页面:此外,这不是一个要求他人为您编写代码的论坛。您应该提供您尝试过的代码以及您在代码中遇到的确切问题,有人会很乐意帮助您找出问题并解决它。@我认为问题已经足够集中在他所面临的一个他不知道的特定问题上。我有代码,但我想修改它,所以我不是保存它的人别人的电脑。我希望他们能够选择是否保存它。代码与其他帖子非常相似,所以我没有发布。我的问题不是修复代码,而是如何在不保存文件的情况下打开和查看文件的语法。谢谢!我会试试看。是的,这就是我遇到的问题,如果焦点从记事本上掉下来,不管是什么原因,按键都会被发送到其他地方。非常有用的代码!Thanks@David您可以将消息作为文本文件写入,然后在命令行上将其路径传递到记事本。
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