• ベストアンサー

VBAでALT+Cを押したい

EXCELのデータフォームよりデータの検索を行っているのですが、 データフォームでDBを変更することはないため(入力は別のファイルで行っている)、 データフォーム起動時に直ぐに検索条件の画面に変更したいと考えてします。 しかし、 Sub データフォームを表示する() ActiveSheet.ShowDataForm   SendKeys "%C", True End Sub と記述しても検索条件の画面に切り替わりません。 どのようにすればデータフォームを開くとデフォルトで検索条件の画面が表示されるのでしょうか? ご教示願います。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >今度はデータフォームが新規で入力出来るようになってしまいます。 昨日からずっといろいろな方法でやってみましたが、データフォームからは、どんなプロテクトをしても、[新規メニュー]で入力が可能になってしまいます。どうしてそうなるのか、バグなのか、修正の置き忘れなのか、良く分かりません。 このデータフォームの型自体がよほど古いものなのか、ダイアログ(Dialogs)にさえ出てきません。 Excelのアプリケーションを、特殊なプログラミングでハッキング(たぶん)して改造させて行う方法があるのだと思いますが、私には、そのような技術は持ちあわせていません。 ただ、検索だけの問題なら、UserForm 等で作ることは可能だとは思います。

shabushabu
質問者

お礼

Wendy02 様、何度も解答いただきまして本当にありがとうございました。データフォームから新規メニューが消えないということですので、シートに保護をかけた状態で毎回検索条件のボタンを押してもらうようにしたいと思います。 本当は100ポイントくらい差し上げたいくらいなのですが、上限がありますので20ポイントのみ付けさせていただきたいと思います。 何とか思っているようなDBが出来てきました。 本当にありがとうございました。 これからは自分でももっと勉強していきたいと思います。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >保護がかかっているためもちろん入力はできないのですが、 それも簡単なことですが、ワークブックが立ち上げるときに、以下のようにしてあげれば、そのまま、コードが使えます。 UserInterfaceOnly:=True というのは、ワークシート側から、保護されていますが、マクロからは自由に処理することが可能です。 例: '標準モジュール (これを一回設定すれば、開いている間有効です) Sub Auto_Open()  Worksheets("Sheet1").Unprotect  Worksheets("Sheet1").Protect UserInterfaceOnly:=True End Sub

shabushabu
質問者

お礼

解答、本当にありがとうございます。 教えていただいた方法で確かにシートに保護がかかっていても 検索条件の画面がデフォルトとして表示されるようになったのですが、 今度はデータフォームが新規で入力出来るようになってしまいます。 もう少しで考えていたものが出来そうなんです。 時間がございましたら是非もう一度教えていただけませんでしょうか? よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 それは、簡単なことですが、コードが逆ではありませんか?SendKey でコードを送りバッファに溜めてから、DataForm を立ち上げます。ただし、この方法は、すべてのバージョンで有効ではなかったような気がします。 Sub データフォームを表示する()  Application.SendKeys "%C"  ActiveSheet.ShowDataForm End Sub

shabushabu
質問者

お礼

何とも簡単に解決いたしました。 どうもありがとうございます。 もしよろしければ、もうひとつ教えてください。 シート全体が保護されている場合、同じマクロを実行しても 新規の画面が表示されてしまいます。 保護がかかっているためもちろん入力はできないのですが、 これも検索条件を初めから立ち上げることは可能なのでしょうか? よろしくお願いいたします。

関連するQ&A

  • Excel VBAを使って給紙方法を変更する(キーストローク使用)

    ExcelのVBAを使って印刷するものによって給紙方法を変えたいと思っています。 調べてみたところ'SendKeysステートメントを使うと設定できそうだったので、下記のような命令文を作ってみたのですがうまく動きません。 どなたか詳しい方いらっしゃいましたら教えていただけないでしょうか? OS:WindowsXP 使用ソフト:Microsoft Excel2003 使用プリンタ:NEC PR-2860N 【コマンドボタン】 本書印刷 → 印刷範囲:「一枚目」(あらかじめ設定してある名前)  給紙方法:自動  控え印刷 → 印刷範囲:「二枚目」        給紙方法:ホッパー2 Private Sub 控え印刷_Click() With ActiveSheet.PageSetup .PrintArea = "二枚目" End With MyPrinterSet ActiveSheet.PrintOut End Sub ―――――――――――――――――――――――――――――― Private Sub 本書印刷_Click() With ActiveSheet.PageSetup .PrintArea = "一枚目" End With MyPrinterSet2 ActiveSheet.PrintOut End Sub ――――――――――――――――――――――――――――――― Private Sub MyPrinterSet() 'SendKeysステートメントでプリンタ設定 '自動給紙から手差しへ変更 ActiveSheet.Select SendKeys "%FU"    'Excel画面でファイル(F)、ページ設定... SendKeys "%O"    ‘オプション SendKeys "{TAB 8}"  ‘一番端の[メイン]のタブに合わせる SendKeys "{RIGHT}" ‘一つ右の[用紙]タブへ移動 SendKeys "%S"    ‘給紙方法選択 SendKeys "{DOWN 2}" 'ホッパー2に設定 SendKeys "{ENTER}"  SendKeys "{TAB 5}" ‘[用紙]タブを選択 SendKeys "{LEFT}" ‘一つ左の[メイン]タブへ移動 SendKeys "{ENTER 2}"  ―――――――――――――――――――――――――――――― End Sub Private Sub MyPrinterSet2() 'SendKeysステートメントでプリンタ設定 '例、EPSON LP-****を手差しから自動へ変更 ActiveSheet.Select SendKeys "%FU" 'Excel画面でファイル(F)、ページ設定... SendKeys "%O" SendKeys "{TAB 4}" ‘初期値へ戻すを選ぶ SendKeys "{ENTER 4}"  End Sub ――――――――――――――――――――――――――――――

  • EXCEL VBA sendkeysについて

    マクロ Sub PRT() ・・・・・・・ sendkeys "%FP",TRUE <- ここで プリンター指定、両面指定 等を手動で設定します MSGBOX " 終了" End Sub EXCEL2003以前では メッセージ" 終了" を表示せず 印刷設定画面が表示されましたが EXCEL2007以降は 印刷設定画面を表示せず メッセージ" 終了"が表示され 印刷設定が 変更できなくなりました。 どなたか 対処方法を教えて頂けないでしょうか?

  • VBAで前々から気になっていることがあります。例えば、

    VBAで前々から気になっていることがあります。例えば、 Private Sub Button検索_Click() 何らかの処理コードが記述 End Sub 検索のコードが記述されているとします。キーワードをテキストボックスに入れて検索されてヒットしたデータはフォームのテキストボックスなどに表示されるとします。検索は連続検索が可能で該当するデータが無くなるまで、この検索ボタンを押す限り検索が可能だとします。 さてここで質問ですが、この上記の一連の検索の途中で仮に更新、削除したいデータを発見したとします。 そんな場合は、 Private Sub Button検索_Click() 何らかの処理コードが記述 Private Sub Button削除_Click() 何らかの処理コードが記述 End Sub Private Sub Button更新_Click() 何らかの処理コードが記述 End Sub End Sub などということは可能なのでしょうか、それとも更新や削除のソースは、 Public Function 更新(又は削除)() As Integer 何らかの処理コードが記述 End Function としなければいけないのでしょうか。ご存知の方教えてください。よろしくお願いします。

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • vbaでミュートにしたい

    vbaでミュートにしたいのですが http://okwave.jp/qa/q3556093.html の回答No.3さんのご回答の Windows Volume Controller (WVC) のリンクが切れてたので、 -----------------↓ ココカラ ↓--------------------- Sub Sample3()  Shell "sndvol32", vbHide  SendKeys "%(M)", True  SendKeys " ", True  SendKeys "%{F4}", True End Sub '-----------------↑ ココマデ ↑--------------------- をやってみようとしたら、 Shell "sndvol32", vbHide でファイルが見つかりません。になりました。 sndvol32を実行するには、何をインストールすればいいのでしょうか? 当方エクセル2010、win7です。

  • エクセル2010でマクロからリボンの最小化したい

    Excel2010でリボンの展開、最小化をマクロでユーザーフォームにはりつけたコマンドボタンから実行したい。 基礎的な勉強を全くしていないので、うまく説明できるか自信がないが質問内容は以下の通りです。 リボンの展開、最小化は、「コントロールキーとF1キーを同時に押す、をコードにすればよい」というのをみつけました。 そこでシートにボタンを張り付けて次のマクロで展開、最小化ができました。 Sub ボタン1_Click() Application.SendKeys Keys:="^{f1}", Wait:=True End Sub しかし、これはユーザーフォームのコマンドボタンでは動きません。 Private Sub CommandButton1_Click() Application.SendKeys Keys:="^{f1}", Wait:=True End Sub 「Private Sub 」だからかと思うが、その先がわかりません。 ちなみに似たような動作で、全画面表示で次のようなものはどちらでも使えます。 Sub ボタン2_Click() If Application.DisplayFullScreen = True Then Application.DisplayFullScreen = False Else Application.DisplayFullScreen = True End If End Sub この場合はユーザーフォームにはりつけても動きます。 ど素人にお知恵を貸してください。

  • エクセルの印刷ダイアログをSendkeysで操作したい。

    エクセルのマクロ処理でフォーム上のボタンから 印刷ダイアログを呼び出して、そのダイアログを Sendkeysでもって両面印刷設定にし印刷させると いう処理を行いたいのですが上手くいきません。 印刷ダイアログが表示された段階で止まり(エラーで 止まるわけではなく単に処理が止まる)、その先の Sendkeysによる命令へ進みません。 Private Sub CommandButton1_Click() Application.Dialogs(xlDialogPrint).Show SendKeys "%r", True SendKeys "%k", True SendKeys "^{tab}", True SendKeys "^{tab}", True SendKeys "^{tab}", True SendKeys "%r", True SendKeys "{enter}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "{enter}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "{enter}", True End Sub よくSendKeysは環境によって誤作動などが起こるので 使わない方がいいと言われますが、一度どのように 動くのか試してみたいと思っています。 ちなみに上のコードは当方のプリンタでの設定手順となります。 SendKeysで印刷ダイアログにキーを送ることは できないのでしょうか? 宜しくお願いします。

  • VBA シートの名前が重複するときに すでにある方を削除する

    VBA シートの名前が重複するときに すでにある方を削除する よろしくお願いします。 エクセル2003を使っています。 「入力シート 」をコピーして「DB」という名前をつける。 すでに「DB]シートがあれば「DB」シートを削除する。 その時に、もし「集計」シートと「名簿」シートがあれば一緒に削除する というコードを考えています。 集計シートや名簿シートはない場合もありますので、最初からdeleteにするとエラーになります。 どうぞお知恵をお貸しください。 sub シートの挿入と削除 () Worksheets("入力シート").Activate ActiveSheet.Copy After:=ActiveSheet On Error Resume Next 'エラーが発生しても続行 ActiveSheet.Name = "DB" If Err.Number = 1004 Then Application.DisplayAlerts = False '警告メッセージを表示しない Sheets("DB").Delete Application.DisplayAlerts = True ActiveSheet.Name = "DB" End Sub End If

  • (VBA)フィルタがかかっているかどうかの判断方法

    フィルタがかかっているかどうかを取得したいのですが フィルタがかかっているシートにて Sub test1() If ActiveSheet.FilterMode Then MsgBox "フィルタがかかってます" End If End Sub Sub test1の1() If ActiveSheet.FilterMode = True Then MsgBox "フィルタがかかってます" End If End Sub を実行しても"フィルタがかかってます"は表示されません。 Sub test2() If Rows(1).FilterMode Then MsgBox "フィルタがかかってます" End If End Sub Sub test3() If ActiveSheet.Rows(1).FilterMode Then MsgBox "フィルタがかかってます" End If End Sub こちらは オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) になってしまいます。 フィルタがかかっているか調べる方法はありますか? よろしくお願いします。

  • Excel VBAで変数が定義されていません。

    このシートコードで「変数が定義されていません。」となります。どうすればいいでしょうか。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Address Case "$C$10:$C$13" SendKeys "%{DOWN}" Case "$H$10:$H$13" SendKeys "%{DOWN}" Case Else Exit Sub End Select Cancel = True End Sub

専門家に質問してみよう