新規にメモ帳を起動して「test」と入力し、保存せずに終了する方法

このQ&Aのポイント
  • 新規にメモ帳を起動して「test」と入力する方法について説明します。
  • メモ帳を起動し、「test」というテキストを入力する方法について説明します。
  • メモ帳を起動し、テキストを入力後に保存しない方法について説明します。
回答を見る
  • ベストアンサー

新規にメモ帳を起動して、「test」と入力したい

新規にメモ帳を起動して、「test」と入力したいです。そして保存はしたくないです。 Sub Sample() Dim rc As Long rc = Shell("notepad.exe", vbNormalFocus) End Sub これだと、新規にメモ帳は起動できますが、書き込みができません。 Sub Sample2() Dim strList As String Dim adoSt As ADODB.Stream Set adoSt = CreateObject("ADODB.Stream") With adoSt .Type = adTypeText .Charset = "UTF-8" .Open End With adoSt.WriteText "test", adWriteLine adoSt.SaveToFile "c:\test.txt", adSaveCreateOverWrite adoSt.Close Set adoSt = Nothing End Sub これだとメモ帳を作成して書き込めますが、保存されてしまいます。 新規にメモ帳を起動→文字を書き込む までをvbaで行い、その後は×ボタンで消せる状態にしたいのですが、 どうすればいいか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

メモ帳をイミディウェイトウィンドウ代わりに使ってやろうかと以前に作成したものです。 ・メモ帳のウィンドウサイズを小ぶりに設定し、最前面表示させています。 ・二重起動するとおかしな事になりますが、未対策です。 ご参考まで。 使用例 ☆標準モジュール Sub test() Dim myDebug As myDebugPrintClass Set myDebug = New myDebugPrintClass myDebug.debugprint "てすと" myDebug.debugprint "ついき" End Sub ☆クラスモジュール myDebugPrintClass ※VBEで挿入/クラスモジュールで生成されるClass1に貼り付けて、Class1から改名して下さい。 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _ ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal Msg As Long, wParam As Long, lParam As Long) As Long Private Declare Function SendMessageAny Lib "user32.dll" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal Msg As Long, wParam As Long, lParam As Any) As Long Private Declare Function MoveWindow Lib "USER32" _ (ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, _ ByVal nWidth As Long, ByVal nHeight As Long, _ ByVal bRepaint As Long) As Long Private Declare Function 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) As Long Private Declare Function SetFocusAPI Lib "USER32" Alias "SetFocus" (ByVal hWnd&) As Long 'Edit Control 制御用定数 Private Const EM_GETSEL = &HB0 '選択開始位置と終了位置の取得 Private Const EM_SETSEL = &HB1 '選択開始位置と終了位置の設定 Private Const EM_REPLACESEL = &HC2 '選択文字列を指定の文字列に置換 Private Const WM_SETTEXT = &HC 'テキストの設定 Private Const WM_GETTEXT = &HD 'テキストの取得 Private Const WM_GETTEXTLENGTH = &HE 'テキストの長さの取得(NULLを含まず) Private Const WM_IME_CHAR = &H286 Private Const SWP_NOMOVE = 2 Private Const SWP_NOSIZE = 1 Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE Private Const HWND_TOPMOST = -1 Private Const HWND_NOTOPMOST = -2 Private lnghWnd As Long 'hWnd of top level (Parent) window Private lnghWndTarget As Long 'hWnd of target (Child) window Private myText As String Private Sub Class_Initialize() Dim lngRc As Long lngRc = Shell(Environ("WINDIR") & "\NOTEPAD.EXE", vbNormalFocus) Sleep 100 lnghWnd = FindWindowEx(0, 0, "Notepad", "無題 - メモ帳") lnghWndTarget = FindWindowEx(lnghWnd, 0, "Edit", "") lngRc = SetWindowPos(lnghWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS) lngRc = MoveWindow(lnghWnd, 0, 10, 300, 200, 1) End Sub Public Sub debugprint(newValue As Variant) Dim lngRc As Long Dim ndx As Long Dim newText As String If TypeName(newValue) = "String" Then newText = newValue Else newText = CStr(newValue) End If 'Editへの追記 ndx = SendMessage(lnghWndTarget, WM_GETTEXTLENGTH, 0, 0&) If ndx <> 0 Then SetFocusAPI lnghWndTarget lngRc = SendMessage(lnghWndTarget, EM_SETSEL, ndx, ndx) newText = vbCrLf & newText lngRc = SendMessageAny(lnghWndTarget, EM_REPLACESEL, 0, ByVal newText) Else lngRc = SendMessageAny(lnghWndTarget, WM_SETTEXT, 0, ByVal newText) End If End Sub

NFNFEMNDXCJP
質問者

お礼

ご回答ありがとうございます。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

後半のソース > これだとメモ帳を作成して書き込めますが、保存されてしまいます。 なぜ > adoSt.SaveToFile "c:\test.txt", adSaveCreateOverWrite は必要なんですか?

NFNFEMNDXCJP
質問者

お礼

ご回答ありがとうございます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

メモ帳は使いたいわけなんですよね? たとえばメッセージボックスで表示するのは却下? 1案のメモ帳を立ち上げてからだと Sendkeys で文字列を送る方法がありますが タイミングが合わないと全く別の所へ送ってしまうことがあります。 また、NumLock キーが外れる場合があるのはよくしられた事です。 Sub NoteP() Dim rc As Long rc = Shell("notepad.exe", vbNormalFocus) Application.Wait (Now + TimeValue("0:00:1")) SendKeys "test" End Sub この場合だと×点で閉じようとすると保存するか聞いてきます。 2案でしたらメモ帳で開いた後にファイルを Kill してしまえば ×点で閉じようとした場合に確認メッセージは出ません。 前略 adoSt.Close Set adoSt = Nothing Shell("notepad.exe" & " " & "c:\test.txt") kill "c:\test.txt" End Sub 用途に合わせてどうぞ。

NFNFEMNDXCJP
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • .Charset = "UTF-8"

    新しいテキスト ドキュメント.txtの中身は、 test テスト なのですが、 その中身をVBAで取得したく、 Sub Sample() Dim strList As String Dim adoSt As New ADODB.Stream Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") With adoSt .Type = adTypeText .Charset = "UTF-8" .Open .LoadFromFile (WSH.SpecialFolders("Desktop") & "\新しいテキスト ドキュメント.txt") Do While Not (.EOS) strList = .ReadText(adReadLine) Debug.Print strList Loop .Close End With End Sub と言うコードを作ったのですが、 返り値が文字化けしてしまいます。 test ?e?X?g が返ってきます。 .Charset = "UTF-8"が原因なのかもしれませんが ネットからコピペしたコードを使っている為 どのように変えればいいのかわかりません。 ご教授よろしくお願いします。

  • VBAでUTF-8文字を読込、Excelに出力する方法

    タイトルの通りです。 簡単なプログラムを作ってみました。 このような事は出来ないのでしょうか。 教えてください。 宜しくお願いします。 ☆サンプルプログラム☆    ↓ Sub test() Dim Stm As Object Dim sText As String Const adCRLF = -1 Const adReadAll = -1 Const adTypeText = 1 sText = "あああ" Set Stm = CreateObject("ADODB.Stream") Stm.Open Stm.Charset = "UTF-8" Stm.WriteText sText ActiveSheet.Range("A1").Value = Stm.ReadText() Stm.Close Set Stm = Nothing End Sub

  • ADODB.Streamを使って新規にファイルを作

    ADODB.Streamを使って新規にファイルを作成することは可能ですか? --------------------------------------------- Sub test1() Dim n As Long n = FreeFile Open "C:\sample.html" For Output As #n Print #n, "テキスト" Close #n End Sub これで、新規にhtmlファイルを作れるのですが --------------------------------------------- Sub test2() Dim st As Object Dim Sample As String Set st = CreateObject("ADODB.Stream") オブジェクトに保存するデータの種類を文字列型に指定する st.Type = adTypeText 文字列型のオブジェクトの文字コードを指定する st.Charset = "UTF-8" st.Open 'オブジェクトのインスタンスを作成 st.WriteText Sample, adWriteLine 'ココでエラー オブジェクトの内容をファイルに保存 st.SaveToFile ("c:\sample.html"), adSaveCreateOverWrite オブジェクトを閉じる st.Close メモリからオブジェクトを削除する Set st = Nothing End Sub --------------------------------------------- この方式で新規にファイルを生成して保存することは可能ですか? 該当部分でエラーが発生します。

  • 文字コードを指定すると文字化けする理由は?

    HTMLのソースが入ったテキストデータをエクセルに書き出したいのですが 文字コードは何を指定すればいいのでしょうか? Sub Sample() Dim i As Long Dim j As Long Dim strList As String Dim strSplit() As String Dim adoSt As New ADODB.Stream i = 1 With adoSt .Type = adTypeText ' .Charset = "UTF-8" ' .Charset = "euc-jp" ' .Charset = "Shift_JIS" .Open .LoadFromFile ("C:\test.html") Workbooks.Add Do While Not (.EOS) strList = .ReadText(adReadLine) strSplit = Split(strList, ",") For j = LBound(strSplit) To UBound(strSplit) Cells(i, j + 1) = strSplit(j) Next i = i + 1 Loop .Close End With End Sub どの文字コードを指定してもエラーになります。 Cells(i, j + 1) = strSplit(j) の部分で、エラーになります。 実際のソースの文字コードはeuc-jpになっています。 なぜソースと同じ文字コードを指定してるのにエラーになるのでしょうか? .Charsetで 文字コードを何も指定しなければ、問題なくソースを書き出せます。

  • ADODB.Streamを使用してUTF-8を出力

    こんちには。VBA初心者です。 Excelのワークシートの値をUTF-8形式のテキスト(.csvで保存します)形式でエクスポートするため、以下のようなコードを書いてみたのですが、「.Type = adTypeText」のところで、「実行時エラー 3001:引数が間違った型、許容範囲外、または競合しています。」のエラーになってしまいます。 ADO関係はほとんど知識がなく、「http://msdn.microsoft.com/ja-jp/library/cc408239.aspx」こういうところで調べても、よく理解できないことが多いので困っています。 どなたか助言をいただけないでしょうか。 (後学のために多少の解説もいただけると助かります) Sub exportToCsv() Dim myBook As String Dim mySheet As String Dim myLastRow As Long Dim i As Integer myBook = "sample.xlsm" mySheet = "sample" Workbooks(myBook).Worksheets(mySheet).Activate myLastRow = Cells.SpecialCells(xlLastCell).Row Set myStream = CreateObject("ADODB.Stream") With myStream .Type = adTypeText .Charset = "UTF-8" .Open .WriteText End With For i = 1 To myLastRow myStream.WriteText Cells(i, 1) & vbLf Next i myStream.SaveToFile "D:\sample.csv" myStream.Close Set myStream = Nothing End Sub

  • VBAでフリーソフトを起動する事は可能でしょうか?

    Sub Sample1() Dim rc As Long rc = Shell("notepad.exe", vbNormalFocus) If rc = 0 Then MsgBox "起動に失敗しました" End Sub でメモ帳は開けるのですが、 QR Code Editorというソフトを入れていて、 それをVBAで開きたいのですがどうすればいいでしょうか? QR Code Editorは、 "C:\Program Files (x86)\Psytec\QR Code Editor\PsQREdit.exe" に入っています。 Sub Sample1() Dim rc As Long rc = Shell("PsQREdit.exe", vbNormalFocus) End Sub にすると、ファイルが見つかりません。 (Error 53)になってしまいます。 ご教授よろしくお願いします。

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

  • ワークシートをUTF-8のテキストファイルとしてエクスポートする方法

    ワークシートをUTF-8のテキストファイルとしてエクスポートする方法 こんにちは。VBA初心者です。 このサイトで質問しながら、以下のようなコードを書いてみました。 しかし最後の(3)の手順でS-JISになってしまうので、UTF-8で読み込んだ意味がなくなってしまいます。 このページ「http://msdn.microsoft.com/ja-jp/library/cc408235.aspx」を見て、ADODB.StreamのWriteTextを使えばいいのかなとも思いましたが、どうやら違うみたいです(というか使い方がよく理解できないです)。 読み込みから出力までUTF-8で行うにはどうしたらよいでしょうか。 どうかよろしくお願いします。 下記のコードの処理内容: 1)ADODB.Streamを使用してUTF-8のテキストを新規ワークシートにインポート(同時に「//」でコメントアウトされた行を削除 2)ダミー文字挿入()プロシージャで「@:TEXT_」で始まる行以下に2行連続して空行があった場合は、[dummy]という文字列を挿入 3)Openステートメントでテキストファイルを作成し、そこにWriteステートメントでワークシート内のテキストを書き込む Sub test() Dim mystream As Object Dim i As Long Dim tempText As String Dim myFileNo As Integer Const adTypetext As Long = 2 Const adReadLine As Long = -2 Set mystream = CreateObject("ADODB.Stream") With mystream .Type = adTypetext .Charset = "UTF-8" .Open .LoadFromFile ("D:\test\sample.txt") End With Worksheets.Add after:=Worksheets(Worksheets.Count) i = 1 Do Until mystream.EOS Cells(i, 1).Value = mystream.ReadText(adReadLine) If Cells(i, 1).Value Like "//*" Then Cells(i, 1).Delete End If i = i + 1 Loop mystream.Close Set mystream = Nothing Call ダミー文字挿入(i) myFileNo = FreeFile Open "D:\test\sample_02.txt" For Output As #myFileNo For i = 1 To i + 1 Write #myFileNo, Cells(i, 1).Value Next i Close #myFileNo End Sub ============================= Sub ダミー文字挿入(i As Long) Dim myCellUnit(2) As String For i = 1 To i If Cells(i, 1) Like "@:TEXT_*" Then myCellUnit(0) = Cells(i, 1).Value myCellUnit(1) = Cells(i + 1, 1).Value myCellUnit(2) = Cells(i + 2, 1).Value If myCellUnit(1) = "" And myCellUnit(2) = "" Then Cells(i + 1, 1) = "[dummy]" End If End If Next End Sub

  • エクセルVBA 文字化けします。

    初心者ですみません、ネットで調べたコードなのですが、 読み込みたいHTMLファイルがUTF-8です。 文字化けしてしますのですが、どうしたらよいでしょうか? Option Explicit Sub sample2() Dim f As Variant Dim lines() As String Dim c As Integer Cells.Clear c = 1 f = Dir("C:\実験\*.html") Do While f <> "" With CreateObject("Scripting.FileSystemObject").GetFile("C:\実験\" & f).OpenAsTextStream lines = Split(.ReadAll, vbCrLf) .Close End With Cells(1, c).Resize(UBound(lines) + 1, 1).Value = WorksheetFunction.Transpose(lines) f = Dir c = c + 1 Loop End Sub どこかに With CreateObject("ADODB.Stream") End With を入れたらいいのでしょうか?

  • 文字コード変換で文字コード取得

    文字コードと改行コードを変更するマクロなのですが今のコードだと 読み込み元の文字コードがUTF-8のLFでないと正しい形で取り込むことができません。 そこで文字コードがUTF-8か改行コードがLFの時という条件を組みたいのですが色々試したのですができません 皆様のお力をおかしください。 Sub UTF8_LF→SJIS_CRLF() Dim strFilePath As String Dim objReadStream As Object Dim objWriteStream As Object Dim bytData() As Byte Const adTypeText = 2 Const adTypeBinary = 1 Const adReadLine = -2 Const adWriteLine = 1 Const adLF = 10 Const adCRLF = -1 Const adSaveCreateOverWrite = 2 Dim opnFile As Variant Dim fFilter As String Dim i As Integer fFilter = "xml Files ,*.xml" opnFile = Application.GetOpenFilename(FileFilter:=fFilter, MultiSelect:=True) If IsArray(opnFile) Then For i = 1 To UBound(opnFile) strFilePath = opnFile(i) Set objReadStream = CreateObject("ADODB.Stream") Set objWriteStream = CreateObject("ADODB.Stream") ' 読み込み元(Shift_JIS,CRLF) With objReadStream .Open .Type = adTypeText .Charset = "UTF-8" .LineSeparator = adLF .LoadFromFile strFilePath End With ' 書き込み先(UTF-8,LF) With objWriteStream .Open .Type = adTypeText .Charset = "Shift_JIS" .LineSeparator = adCRLF End With ' 1行ずつ変換 Application.DisplayStatusBar = True 'ステータスバーの表示 Application.StatusBar = Dir(opnFile(i)) & "を取得中・・・" 'ステータスバーに文字列表示 Do Until objReadStream.EOS objWriteStream.WriteText objReadStream.ReadText(adReadLine), adWriteLine Loop Application.StatusBar = False 'ステータスバーの制御を通常に戻す objReadStream.Close With objWriteStream .Position = 0 .Type = adTypeBinary .Position = 0 bytData = .Read .Close .Open .Position = 0 .Type = adTypeBinary .Write bytData .SaveToFile strFilePath, adSaveCreateOverWrite .Close End With Next Else MsgBox "キャンセルしました" End End If 宜しくお願いします。

専門家に質問してみよう