VBAのSendkeysでShift付の文字になる

このQ&Aのポイント
  • ExcelのVBAでGOM Playerを操作する際に、SendKeys関数を使用して時間指定のための画面を表示しようとすると、Shiftキー付きの文字が送られてしまう問題が発生しています。
  • 具体的には、「G」を送ると「Shift+G」の「オーディオキャプチャー設定」画面が表示されます。同様に「P」を送ると「Shift+P」が送られる問題も発生しています。
  • 手動で「G」や「P」を押す場合には問題がないため、VBA側での設定の問題と思われます。SendKeys関数の前にWait時間やCRを送るなどの対策を試しましたが、うまく動作しませんでした。お知恵をお貸しいただけませんでしょうか。
回答を見る
  • ベストアンサー

VBAのSendkeysでShift付の文字になる

ExcelのVBAでGOM Playerを動かそうと思っています。 動画の途中から時間指定で再生しようと思っていますが、再生時間を指定するための画面を出す文字コード「G」をSendKeysで送るとなぜかShiftキー付の文字コードが送られてしまっているようです。 GOM Playerでは「G」を押すと「移動先の時間を指定」画面が出るのですが、VBAで「G」を送ると、「Shift+G」で表示される「オーディオキャプチャー設定」画面が出てきてしまいます。 VBAではなく手で「G」キーを押すと何の問題もなく表示されます。 具体的に書きますと H列のセルを選ぶとH列に書いてある時間(「0:04」など)のところから再生が始まるプログラムになります。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set 指定セル範囲1 = Range("H2:H132") Set 共有セル範囲1 = Intersect(ActiveCell, 指定セル範囲1) If Not 共有セル範囲1 Is Nothing Then Shell "C:\Program Files (x86)\GRETECH\GomPlayer\GOM.EXE", 1   SendKeys "G"   SendKeys "00:0" & Cells(Rows.Count, 8).Value End If End Sub 「Shell・・」の行はExcelがアクティブの状態からGOM Playerがアクティブの状態にするために入れてあります。 Wait時間を入れてみたり、CRを送ってからGを送ったり 下記のように別のコートで送ってもダメでした。 SendKeys ("G") SendKeys vbKeyG SendKeys 71 また「G」だけではなく「P」を送っても「Shift+P」が送られた動作になってしまいます。 すみませんが、お知恵を貸していただけませんでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

試してみたところ、GOM Playerでは  SendKeys "G" → Shift+G  SendKeys "g" → G として認識されるようです。

gosyo0
質問者

お礼

Picosoftさん なるほど、Shift+g=G と言うことなんですね。 そこまでは頭が回りませんでした。 マクロを走らせたら動きました! 「たぶん無理なんだろうなぁ」と思っていましたのでうれしかったです。 ありがとうございました!!

関連するQ&A

  • VBA SendKeysステートメントについて

    お忙しいところ大変申し訳ありません、ご回答の程お願い申し上げます。 入力されるデータと列の数は毎回異なり入力された文字自体を修正するVBAを組みたいのですが、検索などで調べた結果「SendKeysステートメント」のコマンド「 SendKeys "{F2}"」というものを発見しました。 それで構文を組んでみたのですが、 Sub Macro1() Worksheets(1).Activate Range("A2").Activate SendKeys "{F2}" End sub で単一セルを修正する事はできました。 これを「列(列は毎回固定です)の空白セルまで」というプログラムは組めるのでしょうか? お忙しい中申し訳ありませんがご回答いただければ幸いです。

  • VBAでの SendKeysの変数指定方法

    エクセルVBAで、マクロを作成中なのですが、 別のアプリケーションを動作させなくてはいけないため、 SendKeysを使用します。 この SendKeys "○○○"で、 コマンドや文字を指定することは、できますが、 エクセルのある決まったセルに入っている文字をそのまま、 ここに指定(つまりは、変数)するのには、どういう記述方法になりますか? 例えば、A1のセルに「XYZ」と入っていたら、 SendKeys "XYZ"と送るイメージになりますが、このXYZ部分を、 A1セルの文字という変数にしたいです。 いろいろ調べたのですが、わかりませんでした。 すみませんが、みなさん、よろしくお願いいたします。

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • VBAでワークシートがアクティブにならない

    ExcelからGOM Playerを動かすマクロを作っています。 VBAでGOM Playerを起動して、任意の場所から動画を再生するところまではできました。 動画のシーンがExcel上に時系列で記載されてあり、現在再生されているのがどこのシーンなのかを時間を追うごとに自動で移動していくプログラムを書いているのですが、Excelシートがアクティブにならない(?フォーカスが移らない)ため、セルが選択されて表示されません。 Excelの最上部のタイトル部に表示されているファイル名がグレーになっている状態なので選択セルが表示されないようで、一度手動でExcelを選択してあげると、ファイル名の表示が黒になり、セルも選択され、順次移動していくのが見られます。 また、ファイル名がグレーの状態でも数式バーにはその選択されているセルの内容が順次表示はされています。 つまり、セル選択が表示されない以外は正常に動いています。 プログラムの概略は下記の通りです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set 指定セル範囲1 = Range("H2:J132") Set 共有セル範囲1 = Intersect(ActiveCell, 指定セル範囲1) If Not 共有セル範囲1 Is Nothing Then     途中省略(GOM Playerの起動プログラム)   Worksheets("aaa").Activate ddd:   VideoSelect = ・・・(ここで現在動画が再生されているセルの行数の計算をしている) Cells(VideoSelect, 11).Select     (再帰処理をしているため無限Loopにならないためのプログラムを挿入)     DoEvents   Sleep 100   GoTo ddd End If End Sub ワークシートをアクティブ、セレクト状態にするため下記のようなコマンドも入れてみましたがどうもうまく動きません。  Worksheets("aaa").Select  Workbooks("bbb.xlsm").Worksheets("aaa").Select どなたか、原因をお教えいただけないでしょうか。 よろしくお願いします。

  • VBAで「Shift+ctrl+↓」のようなコード

    毎度お世話になっております。 VBA初心者です、下記の内容お教えください。 Sub Sample02_3() Dim cnt As Long cnt = WorksheetFunction.CountIf(ActiveSheet.Range("A1:A11"), "") MsgBox "空白は、" & cnt & "件です。", vbInformation End Sub のようなコード A1からA11のセルの中から空白を数えるマクロを作成しました。 ただこの場合だとワークシート上で検索範囲がA12以降に増えた場合 ・A12以降を数えません。 ・列全部を範囲にした場合、表外の空白まで数えてしまいます。 手動でやる場合は 検索列先頭で「Shift+ctrl+↓」でデータの途切れるセルまで選択をするのですが VBAマクロでこれを自動でやることは出来ないでしょうか?。 以上宜しくお願いいたします。

  • Excel2013>VBA>sendkeys動ず

    Excel2013のVBAを使って自動更新をしようと思っています。    A  B   C 1  あ  AA  0 2  い  AB  1 3  う  AC  0 4  え  AA  1 5  お  AA  0 上記のようにシート内にデータはあります。B列「AA」C列の「ゼロ」を更新してC列の値を「1」にしようとしたときに、ピボットテーブルを使ってみようと思いました。 ピボットテーブルにてB列の「AA」、C列の「ゼロ」を抽出表示しました。   A  B  C 1 あ  AA  0 5 お  AA  0 思っていたように1行目と5行目が抽出されました。 後はゼロを別の値(仮に「2」とします)に変更するときに、カーソルの移動がうまくいきませんでした。 Range("C1").End(xlDown).Select Do ActiveCell.Offset(0, 0) = "2" ActiveCell.Offset(-1, 0).Select If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop しかし、これではカーソルが「C4」に移動してしまいました。 ピボットテーブルでたたんでしまっても、カーソルは見えないセルに移動するようです。 そこで、下記のように変更しました。 Range("C1").End(xlDown).Select Do ActiveCell.Offset(0, 0) = "2" Application.SendKeys "{UP}" If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop これは、カーソルがまったく動かずに最初の地点にいたままでした。 そこで、次はTABで移動することにしました。 Range("C1").Select Selection.SpecialCells(xlCellTypeVisible).Select Do ActiveCell.Offset(0, 0) = "2" Application.SendKeys "{tab}" If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop これでもカーソルは動きませんでした。 どうにかしてsendkeysの動かし方、もしくは更新でもっとうまいやり方をご存知の方、是非教えてください。よろしくお願いいたします。

  • Excel VBA: セルの参照方法

    Excel VBAで、セルの範囲を指定するときには、 Range("A2:B3") とやりますよね。 ここのとこで、B3セルではなくBxセルにしたいときにはどうすればいいです?。 つまり、xは変数です。 Range("A2:Bx")と書いていいのでしょうか。

  • VBAに関する質問

    現在、Excel上にてVBAを習得しているのですが、以下の操作ができないため質問致します。 条件式に関して、「現在のセルとB1セルが一致」のような場合、 ActiveCell.Value = Range("B1").Value などとすると思いますが、上式の右辺に範囲を指定(ex. Range("B1:D5"))する方法はないでしょうか? つまり、現在のセルと範囲指定したセル中の「いずれか1つ以上と一致する」場合と、「すべて異なる」場合とで場合分けしたいのですが・・・。 VBAを昨日から始めた初心者なため、言葉の定義が曖昧な部分もあるかと思いますがご了承ください。

  • Excel 2007 VBAで セル内数値の反映が出来ません

    Excel 2007 VBAで セル内数値の反映が出来ません プログラム中に、セルの数値を参照したいのですが、うまく行きません。 下記にて、コピー元セル指定の範囲指定が、+H3 が反映できません。                          ↓  Sheets("会員台帳").Select              Range(Cells(CopymotoRS, 62), Cells(CopymotoRS + H3 - 1, 71)).Select Application.CutCopyMode = False Selection.Copy

  • VBA 簡単な疑問

    Excel用に、VBAを書いています。初心者です。 素朴な疑問があります。 1.セルを指定する際に、Range()とCells()がありますが、 Range("D5") or Cells(5, 4) Rangeのカッコ内に指定する範囲(D5,A1など)に相当するCellsのカッコ内に指定する値(5,4 1,1など)を簡単に知る方法はないでしょうか? たとえば、Range("CT")をCellsで書く場合に、何行目(これは左の数値を見れば分かりますが)の何列目かを計算するのはできますが、ミスの原因になりそうです。 2. 単一セルについて、セルの選択とアクティブにするのは何か違いがあるのでしょうか? 複数のセルを選択であれば、その複数の中でどれをアクティブにするか意味がありそうですが、単一の場合は全く同じと考えて良いのでしょうか? お手数ですが、よろしくお願いします。

専門家に質問してみよう