• ベストアンサー

ExcelのInputBoxに入力

ExcelのVBAなどでInputBoxで入力待ちの状態に対して、例えばVBSなどの別のプログラムから 、その入力待ちの欄に値を入力することができますか? できるのであれば、どのようなコードになるのでしょうか? VBSやPowerShellなど、無料のものでお願いします。

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.8

こんにちは OS、Excelのバージョンの違いが影響しているかもですね。 質問者さんはExcelがアクティブにならないとおっしゃってますけど、 No2さんはアクティブにはなっているのでしょうか? Dim wsh Dim obj Dim i Set wsh = WScript.CreateObject("WScript.Shell") Set obj = WScript.GetObject("C:\temp\test.xlsm") On Error Resume Next Do Until wsh.AppActivate(obj.Application.Caption)   WScript.Sleep 1000   i = i + 1   If i > 5 Then     obj.Close     Set obj = Nothing     wsh.Quit     Set wsh = Nothing     Wscript.Quit   End If Loop Wscript.Sleep 1000 wsh.SendKeys "password" '日本語不可 Wscript.Sleep 1000 wsh.SendKeys "{tab}" Wscript.Sleep 1000 wsh.SendKeys "{ENTER}" wsh.Quit Set wsh = Nothing Wscript.Quit と、変更すると何か変わりますでしょうか?

kurosansan
質問者

お礼

wsh.AppActivate(obj.Application.Caption) で、Activeになったようです。 ちゃんと動作しました。 何度も、ありがとうございました。 御礼申し上げます。

その他の回答 (8)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.9

回答No.1のおっしゃるとおりでした! 仕事で使っているパソコンには、「Excel2010」も入っているので、「Excel2010」で試してみますと、最初に示されたプログラムでちゃんと、「InputBox()」に「password」の文字が入り、「OK」も押されました! 私は、プログラムの勉強をするときは、「Surface Pro 4」を使っていたのですが、仕事で使っている、デスクトップのパソコン(「Windows10 Pro 64bit」と環境は同じで、CPUは新旧の違いはあるものの、同じ「i5」、メモリも同じ8GB)だと、何と、「Excel2016」でも問題なく「password」が入り、「OK」が押されました! 「Surface Pro 4」の問題? 私は、「Surface」を買うとき、「Office2016」のライセンスを持っていたので、「Office」の入っていない、業務用の「Surface」を買いました。 そして、仕事で使っているデスクトップパソコンと「Surface」に同じ「Office2016」をインストールしたのに! 回答No.1の方には、大変失礼致しました。 問題なく、私の方で、動くことを確認しました。 そこで、何よりも問題なのは、質問者が動かない、ということです。 ここは、あくまでも質問者の問題を解決するサイトですから、私の問題が解決しても仕方がありません。 そこで、質問者の方に質問ですが、プログラムはそちらの環境に合わせて、どのように書き換えられましたか? もし、問題がなければ、できるだけそのまま教えて頂けないでしょうか? どこが問題だったのか、考えてみます。 本当にすみませんでした!

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.7

回答No.2です。 また、回答No.1の方への返事です。 今、確認しましたが、「InputBox()」が表示されている状態(しかも、文字を入力する窓で、カーソルが点滅した状態)で、後ろのエクセルのセルを手動でクリックすることはできない状態でした。 ちなみに、私の環境は、「Windows10 Pro 64bit」「Excel2016」の環境です。 実は、私も、回答No.1の方のやり方で出来る、と確信していたのですが、自分でやってみて出来なかったので、いろいろ調べていた次第です。 私も、絶対に「SendKeys」で入力出来ると思ったのですが・・・ しかし、私の環境では、出来なかったので、調べていくうち、インターネットエクスプローラーは、アクティブになっている状態、今回なら、グーグルの画面が表示され、検索窓にカーソルが点滅している状態でも、「SendKeys」が使えないことを知り、もしかしたら、「InputBox()」への入力も、「InputBox()」を要素としてとらえ、その要素に対して処理を行わないといけないのかな?と思っただけなのですが、それも、調べても何も出てきませんので、回答No.1の方がおっしゃるとおり、私の考え違いのようです。 しかし、どうすれば、確実に、どんな環境でも「InputBox()」に文字を入力出来るのか? 今のところ、私の方では、解決出来ていません。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.6

こんにちは \\は転記ミスです。 ExcelのVBAでInputBoxで入力待ちの状態した状態でシート上のセルは 手動で選択出来ますか?こちらでは出来ません。 その状態で、VBSをダブルクリックするとInputBoxにpasswordと入力されます。 他のアプリ(IE等)で隠れていても出来ました。 Windows7、Excel2010の環境です。 何かが違うのか、理由はこちらでは分かりませんが、 「インターネットエクスプローラーで、「Google」の検索サイトを開き、 検索窓に「ABC」と入力し、「検索ボタン」を押すプログラム」 と比べるのはちょっと筋違いかと思います。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.5

何度もすみません。 回答No.2です。 追伸です。 今、 Do Until wsh.AppActivate("OK_41.xlsm") WScript.Sleep 5000 Loop Wscript.Sleep 5000 と、スリープ時間を多く取り、「ファイル名を指定して実行」から、「VBScript」を実行し、すぐに、エクセルの「InputBox()」をマウスでクリックして、確実にアクティブになっている状態にして、もう一度試しましたが、やはりダメでした。 しかも、マウスを動かすことなく、いきなりキーボードから「a」と打つと、ちゃんと、「InputBox()」の入力窓に「a」と入りましたのでアクティブになっていたのは間違いないと思います。 「a」→「Enter」で、私のマクロが「MsgBox(s)」を入れているので、画面に「a」と表示されたあと、5秒後ぐらいに、「A1」に「password」と入り、あと、右→右と、全く同じ結果でした。 申し訳ございません。

kurosansan
質問者

お礼

詳細にご確認いただきまして、ありがとうございました。 私も同様に動きませんでした。 一人で悩まず、心強かったです。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

質問者を差し置いて、失礼します。 回答No.2です。 しかも、回答No.1の方のへの返事になります(ホント申し訳ございません)。 Dim wsh Dim obj Set wsh = WScript.CreateObject("WScript.Shell") Set obj = WScript.GetObject("D:\Programming\OK_41.xlsm") Do Until wsh.AppActivate("OK_41.xlsm") WScript.Sleep 1000 Loop Wscript.Sleep 1000 wsh.SendKeys "password" '日本語不可 Wscript.Sleep 1000 wsh.SendKeys "{tab}" Wscript.Sleep 1000 wsh.SendKeys "{ENTER}" 私の環境に合わせて、上記のように書き換えました。 まず、「"\\C:\temp\対象.xlsm"」でエラーが出ましたので、「\\」を削除しましたところ、エラーは出なくなりました(「\」を1つにしてもエラーが出ました)。 「OK_41.xlsm」の方は、もちろん、立ち上げた状態で、 Sub Test() Dim s As String s = InputBox("Question?") MsgBox (s) End Sub を、起動しています(エクセルの画面上に「Question?」と表示された「InputBox()」が表示された状態です)。 この状態で、上記の「VBScript」を実行したところ、待てど暮らせど、何も起こりません(2分以上待ちました)。 そこで、仕方なく、「InputBox()」に手入力で文字を入力すると、セル「A1」のところに、カーソルがあったので、「A1」に「password」と入力され、続いて、右横のセルに移動({Tab})、そして、最後にまた、その横のセルに移動({Enter})が実行されました。 もし、私が間違っていて、質問者の環境で回答No.1の方の「VBScript」が動けば、もちろん、私が悪いのですから、問題は無いのですが、私の方では動きませんでした。 なお、下記の「VBScript」は、インターネットエクスプローラーで、「Google」の検索サイトを開き、検索窓に「ABC」と入力し、「検索ボタン」を押すプログラムです。 このプログラムからも明らかなように、それぞれの入力やボタン押下には、その入力窓やボタンを取得してセレクトする、というような処理が必要と思われるのですが・・・ Set i = CreateObject("InternetExplorer.Application") Set w = CreateObject("WScript.Shell") i.Visible = True i.FullScreen = True i.Navigate "https://www.google.co.jp" Do While i.Busy = True Or i.readyState <> 4 Loop w.AppActivate i.LocationName WScript.Sleep(10000) i.Document.getElementsByName("q")(0).Value = "ABC" WScript.Sleep(2000) i.Document.all("btnG").Click WScript.Sleep(10000) i.Quit w.Run "Shutdown.exe -s -t 00" Set w = Nothing Set i = Nothing

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは No2さんはどのように試したのでしょうか? 「ExcelのVBAなどでInputBoxで入力待ちの状態」になっていれば 先のvbsで出来ましたよ。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

大変失礼ですが、回答No.1の方のプログラムはダメです。 「InputBox()」を選択しないと、回答No.1の方のやり方では、選択されているセルにしか、入力されません。 すなわち、「InputBox()」が実行されている状態では、回答No.1の方のプログラムでは、何も入力されず、手入力で「InputBox()」に入力すると、「password」という文字が、セル「A1」に入力され、「{Tab}」で、横のセルに移動し、「{Enter}」で、私の場合、カーソルの移動を「右」に設定しているので、右のセルに移動するだけです。 質問者の希望されている「InputBox()」には、何も入力されません。 私も、今調べているのですが、どうやら「Elements」のように、「InputBox()」が何という「Elements」で、その「Elements」を指定して、そこに入力するみたいなのですが、全然やり方が分かりませんでした。 もう少し、調べてみます。 質問者の回答でなくて、申し訳ございません。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 何のためにっていう疑問も有りますが、vbsで Dim wsh Dim obj Set wsh = WScript.CreateObject("WScript.Shell") Set obj = WScript.GetObject("\\C:\temp\対象.xlsm") Do Until wsh.AppActivate("対象.xlsm")   WScript.Sleep 1000 Loop Wscript.Sleep 1000 wsh.SendKeys "password" '日本語不可 Wscript.Sleep 1000 wsh.SendKeys "{tab}" Wscript.Sleep 1000 wsh.SendKeys "{ENTER}" みたいな感じで。

kurosansan
質問者

お礼

一番最初に、ご回答いただきまして、ありがとうございました。 ただ、私もNo.2の方と同様に、動きませんでした。 wsh.AppActivate で、ExcelがActiveにならないような感じでした。

関連するQ&A

  • VBSの InputBoxについて

    vbsにてInputBoxで複数の値を得るにはどうしたらいいでしょうか? ただInputBox("値入力")だけでは1つしか入力エリアがないですよね? 複数の値を欲しいときはどうしたらいいでしょうか? ちなみにvbsはあまり詳しくないです。 splitはあるようなので、例えば123,456等と入力してもらい「,」で分割してって感じになるのでしょうか?

  • エクセルVBA InputBoxで入力欄を*****

    VBAのInputBoxでパスワードを入力させるようにしているのですが、入力欄に入れた文字は当然ながらそのまま表示されます。 これをいかにもパスワードの入力のように入力数字を****と表示させることはできないものでしょうか?

  • VBAでInputBoxの再入力をさせるには?

    エクセルのVBAでInputBoxの間違えた入力をしてしまった時エラーが出てしまいます。 間違えた入力をした際、エラーではなく、再入力をさせるように促す処理をするにはどうしたらいいですか? 再入力システムにしたいのですが、できずに困っています。 わかる方がいましたら、教えていただけないでしょうか? よろしくお願いいたします。

  • エクセル inputboxの入力を編集モードで

    エクセルのvbaでinputboxで入力させているのですが規定値のすぐあとに続けて入力したいのですが、一回クリックしないとセルの入力のような編集モードになりません。何百と続けて入力したいのでその度クリックしないですむよにinputboxの入力が 編集モードにすることができますでしょうか? 例えば 2019/10/ が規定値で / のすぐあとに数字をいれたいのですが 2019/10/の部分が反転されているので一回クリックしなければなりません。

  • エクセルのInputBoxのことで

    InputBoxに入力された値を、セルに反映させるVBAを知りたいのですが。 a bbb c ddddd 上記のように、スペースで区切って入力し、上記のケースなら、 A1 に a 、A2 に bbb 、A3 に c、A4 に ddddd と反映されるようにしたいのですが。 よろしくお願い致します。

  • excelのInputBoxで日本語入力OFFにしたい

    タイトルの通りです excelのInputBoxで日本語入力OFFにしたいのですが、 VBAでIME(MS-IME)を制御できるのでしょうか。 セルへの入力であれば、入力規則で出来るので、 イメージとしては、そんな感じです。

  • InputBoxに入力した言葉をシート名にしたい!

    エクセルでInputBoxに入力した言葉をシート名に反映させるVBAを教えてください。 また、入力したくない場合はESCを押すとその作業を飛ばすというものも組み込んでいただくとありがたいです。 よろしくお願いします。

  • EXCEL VBAのInputBox

    VBA初心者のため、質問がうまくできないかもしれませんが よろしくお願いします。 ユーザーから文字列を入力してもらうためInputBoxを使用しました。キーボードのDを押したら、Input Boxを表示させるようにしたのですが、入力エリアにDが表示されてしまいます。また、プログラムを実行後から押されたキーの文字もすべて入力エリア表示されてしまいます。入力エリアを空白の状態で表示させたいのです。方法を教えてください。

  • VBSでInputBoxを使いテキストの中身を編集

    本家VBではなく、VBSなのですが、カテゴリがないので、ここに投稿させて頂きました。 <やりたいこと> 特定のパスにあるテキストファイルを開いて、 特定の文字列を探し、 InputBoxを表示し、変更したければそこに変更したい値を入力して[OK]。 (入力した値が参照した特定文字列と置換される) そのままで良ければ[キャンセル]。 を何カ所か行い終了。 <(特に)わからないこと> InputBoxを表示して、値を入力させた結果を置換させる 初心者(VBは未経験で、VBSも勉強を始めたばかりです)で何冊か本を調べたのですが分りませんでした。 Webで検索をかけてもvbsだとウィルスの情報ばかりで・・・。 よろしくお願いします。

  • InputBoxについて

    Sub test1() Dim tmp As String tmp = Application.InputBox("testです") End Sub Sub test2() Dim tmp As String tmp = InputBox("testです") End Sub この二つのコードを比較すると、 test1の方は、ダイアログボックスのタイトルに「入力」が表示され、 四角いインプットボックスが表示されます。 test2の方は、私がいつも使っているインプットボックスなのですが、 「tmp =」と 「InputBox」の間に何かコードが省略されてるのでしょうか? Application.を付ける事によって、形が変わってしまうのでしょうか? また、オブジェクトブラウザを見ると 【1】Function InputBox(Prompt As String, [Title], [Default], [Left], [T Excel.Application のメンバ 【2】Function InputBox(Prompt, [Title], [Default], [XPos], [YPos], [Help VBA.Interaction のメンバ がありましたが、 test1、test2それぞれどちらの事なのでしょうか?

専門家に質問してみよう