• ベストアンサー

メッセージボックスを前面に表示させるには?

Sub 教えて() Dim ExAp As Application Dim ExBk As Workbook Dim ExSh As Worksheet Set ExAp = CreateObject("Excel.Application") Set ExBk = ExAp.Workbooks.Add Set ExSh = ExBk.Worksheets(1) ExAp.Visible = True ExAp.WindowState = xlMaximized ThisWorkbook.Worksheets(1).Activate MsgBox "前面表示させたいお!" Set ExAp = Nothing Set ExBk = Nothing Set ExSh = Nothing End Sub これを実行するとメッセージボックスが隠れてしまいます。 どうしたらよいでしょうか?

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

自身のアプリケーションにフォーカスを持ってくる という方法ですが、2種類、3通りの方法があります。 (1)自身のVisibleを切り替える Application.Visible = False Application.Visible = True MsgBox "前面表示させたいお!" (2)APIを使う方法 (A)WindowsAPIを定義する方法 Declare Function SetForegroundWindow Lib "USER32" _     (ByVal Hwnd As Long) As Long Sub 教えて() SetForegroundWindow Application.Hwnd MsgBox "前面表示させたいお!" End Sub (B)ExecuteExcel4Macroを使う方法 ExecuteExcel4Macro "CALL(""USER32""," _     & """SetForegroundWindow"",""JJ""," _     & Application.Hwnd & ")" MsgBox "前面表示させたいお!" (1)は簡単ですが、タスクバーでの自身のアイコン位置が 最後尾になってしまう弱点があります。 (2)はSetForegroundWindowで自身のアプリケーションに フォーカスを取り戻しています。 (A)は正規のAPI定義手法を使っています。 (B)は以前のAPI呼び出しです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

他には ': AppActivate Application.Caption >ThisWorkbook.Worksheets(1).Activate などもありでしょうか。 メッセージボックスだけでいいのでしたら CreateObject("WScript.Shell").Popup "前面表示させたいお!", , , vbSystemModal http://msdn.microsoft.com/ja-jp/library/cc364428.aspx もありかもしれません。

koara1982
質問者

お礼

Sub 教えて() Dim ExAp As Application Dim ExBk As Workbook Dim ExSh As Worksheet Set ExAp = CreateObject("Excel.Application") Set ExBk = ExAp.Workbooks.Add Set ExSh = ExBk.Worksheets(1) 'ExAp.Visible = True 'ExAp.WindowState = xlMaximized 'ThisWorkbook.Worksheets(1).Activate MsgBox "前面表示させたいお!" ExAp.Visible = True ExAp.WindowState = xlMaximized Set ExAp = Nothing Set ExBk = Nothing Set ExSh = Nothing End Sub というふうにメッセージボックスをクリックしたら エクセルが表示されるようにしたら自分のしたいことが出来ました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

はじめまして、通りすがると申します。 これなら、どうでしょうか? Dim ExAp As Application Dim ExBk As Workbook Dim ExSh As Worksheet 'Set ExAp = CreateObject("Excel.Application") 'Set ExBk = ExAp.Workbooks.Add 'Set ExSh = ExBk.Worksheets(1) 'ExAp.Visible = True 'ExAp.WindowState = xlMaximized '上記コメントの変わりに下記2行を追加 Dim varRetval As Variant varRetval = Shell("excel.exe", vbNormalNoFocus) ThisWorkbook.Worksheets(1).Activate MsgBox "前面表示させたいお!" Set ExAp = Nothing Set ExBk = Nothing Set ExSh = Nothing

全文を見る
すると、全ての回答が全文表示されます。
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.1

下記の「MsgBoxSetForeground」を指定してみたらいかがでしょうか。 http://msdn.microsoft.com/ja-jp/library/139z2azd(VS.80).aspx MsgBox "前面表示させたいお!", vbMsgBoxSetForeground

koara1982
質問者

補足

それをやっても前面に表示されませんOrz

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルを表示できない

    プログラム初心者です。 Private Sub Command3_Click() On Error Resume Next Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet With xlApp.Application Set xlApp = GetObject("F:\vb6.0\book1.xls") Set xlBook = xlApp.Workbooks.Open("Book1") Set xlSheet = xlBook.Worksheets(1) xlApp.Application.Visible = True End Sub と入力したのですが、実行してボタンをクリックしてもエクセルの表が表示されません。なぜでしょうか?

  • エクセルVBAのオートフィルタについて

    いつもお世話になります。 エクセル2007でVBAでオートフィルタを操作したいのですが、 一部うまくいきません。 以下の様なコードを書いて 日付で絞り込みたいのですが、 何も抽出されません。 リストを見てみると、変数はちゃんと入っており OK ボタンを押すとその日付で抽出されます。 何故VBAでの操作では抽出されないのでしょうか。 ご存じの方がおられましたら、よろしくお願いします。 Sub test() Dim mydate As Variant Dim rng3 As Range Dim fmt As Variant Dim objList3 As ListObject Dim wb1 As Workbook Dim wb2 As Workbook Dim wb4 As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim sh4 As Worksheet Dim sh7 As Worksheet '----------------------------------------------------------------------- Set wb1 = Workbooks("301.xlsm") Set wb2 = Workbooks("1.xls") Set wb4 = Workbooks("2.xls") Set sh1 = wb1.Worksheets("@") Set sh2 = wb1.Worksheets("@@") Set sh3 = wb2.Worksheets("@@@") Set sh4 = wb2.Worksheets("@@@@") Set sh7 = wb4.Worksheets("@@@@@") '---------------------------------------------------------- sh2.Range("A1:z63").ClearContents With sh7 Set objList3 = .ListObjects("リスト1") fmt = .Range("A2").NumberFormatLocal mydate = Format(mydate, fmt) objList3.Range.AutoFilter Field:=7, Criteria1:=mydate objList3.Range.AutoFilter Field:=5, Criteria1:="test" Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible) rng3.Copy sh2.Range("A2") objList3.Range.AutoFilter Field:=5 objList3.Range.AutoFilter Field:=5, Criteria1:=">=190" Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible) rng3.Copy sh2.Range("A20") objList3.Range.AutoFilter Field:=5 objList3.Range.AutoFilter Field:=7 End With Application.CutCopyMode = False Set rng3 = Nothing Set fmt = Nothing Set objList3 = Nothing Set wb1 = Nothing Set wb2 = Nothing Set wb4 = Nothing Set sh1 = Nothing Set sh2 = Nothing Set sh3 = Nothing Set sh4 = Nothing Set sh7 = Nothing End Sub (一部省略しています)

  • oleobjectのエラー

    以下のようにプログラムしています。 最後のステップでOlEobjectのエラーになります。 いろいろ、調べてみたのですが、解決策がわかりません。 ご指導よろしくお願いします。 Dim WBK As Workbook Dim トップ As Worksheet Dim 履歴ログ As Worksheet Dim リスト As Worksheet Set WBK = Workbooks("外出管理.xls") Set トップ = WBK.Worksheets("トップ") Set 履歴ログ = WBK.Worksheets("履歴ログ") Set リスト = WBK.Worksheets("リスト") トップ.Activate トップ.OLEObjects("CommandButton" & i).Object.Caption = "空き部屋"

  • Excel2000で、特定のシートを新規ブックに保存したい

    マクロ実行中のブックの特定のシートを新規ブックに保存したいのです。 特定のシートは、任意で複数枚あるとします。 但し、クリップボードや、Activeメソッド、Selectメソッドなど、 マクロ実行中に、Windowsの他のアプリケーションに 影響の出る恐れがあるロジックは使用しないとします。 また、特定のシートには、罫線や色の設定なども してあり、新規ブックに書式も保存します。 以下のコードは、クリップボードを経由せず、セルをコピーしています。 Sub a() Dim xlsApp As Excel.Application Dim xlsBook As Excel.Workbook Dim xlsSheet As Excel.Worksheet Set xlsApp = CreateObject("Excel.Application") Set xlsBook = Workbooks.Add  '★1 Set xlsSheet = xlsBook.Worksheets(1) '★2 ThisWorkbook.Worksheets("Sheet1").Range("A1:D200").Copy _ Destination:=xlsBook.Worksheets("Sheet1").Range("A1:D200") xlsBook.Close xlsApp.Quit Set xlsApp = Nothing Set xlsBook = Nothing Set xlsSheet = Nothing End Sub このコードは、ちゃんと動きます。 しかし、問題があります。 xlsApp.ScreenUpdating = False xlsApp.Visible = False など上記のコードに追加すると、新規ブックの操作できません。 ★1の部分で、 Set xlsBook = Workbooks.Add  としているからです Set xlsBook = xksApp.Workbooks.Add  とすると、 xlsApp.ScreenUpdating = False xlsApp.Visible = False など、新規ブックの操作ができます。 しかし、 Set xlsBook = xksApp.Workbooks.Add  では ★2の ThisWorkbook.Worksheets("Sheet1").Range("A1:D200").Copy _ Destination:=xlsBook.Worksheets("Sheet1").Range("A1:D200") で、「RangeクラスのCopyメソッドが失敗しました。」 とエラーが発生します。 何か良い方法はありますか?

  • VBA どうしてなのでしょうか?

    どうしてなのかまったくわかりません… Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Activate Range("G5").Activate End Sub は良いのに Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Range("G5").Activate End Sub はエラーがでます… この理由をご存知の方いらっしゃいますか?? よかったら教えていただけませんか?

  • ユーザーフォームを表示されないようにしたい

    Vista excel2007 でマクロ作成中の超初心者です。 A、B、Cのブックがあります。Bブックのみマクロをワークシートに貼り付けています。 1)Aブック(マクロ記録用)の中にある、Aコマンドボタンを押すと  BブックのBシートにジャンプします。ジャンプと同時に、Bユーザーフォームを 表示しています。 2)そしてBシートには、フォームコントロールを貼り付けており、ここをクリックするとCブックCシートに飛びます。 3)ところが、CシートにはBユーザーフォームが残ったままです。このフォームを  表示されないようにしたいのです。 4)Bシートのフォームコントロールには、次のコード記述をしてあります。       Sub Cブック Cシートへ() Dim wb As Workbook Dim ws As Worksheet Dim sh As Worksheet Dim i As Long ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error Resume Next '開いて作業中の場合。 Set wb = Workbooks("CCC.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\CCC.xls") End If Worksheets(1).Select End Sub どうかよろしくお願いします。 

  • VBで既存エクセルシートを新規ブックにコピー

    VB6,Excel2003です。 既存のエクセルシートを新規ブックにコピーする プログラムを作成してみましたが タスクバーに新規ブックのタスクバーボタンが2つできてしまいます。 どこが原因か教えてください。よろしくお願いします。 Private Sub Command1_Click() Dim xlsApp As Excel.Application Dim xlsBookTemp As Excel.Workbook 'コピー元ブック Dim xlsBookCopy As Excel.Workbook 'コピー先ブック Dim xlsSheetTemp As Excel.Worksheet 'コピー元シート Dim xlsSheetCopy As Excel.Worksheet 'コピー先シート Set xlsApp = CreateObject("Excel.Application") Set xlsBookTemp = xlsApp.Workbooks.Open("C:\Temp.xls") Set xlsSheetTemp = xlsBookTemp.Sheets(1) Set xlsBookCopy = xlsApp.Workbooks.Add Set xlsSheetCopy = xlsBookCopy.Sheets(1) xlsApp.Visible = True 'コピー元のSheet1を新規ブックにコピーする xlsSheetTemp.Copy Before:=xlsSheetCopy 'コピー元のブックは閉じる xlsBookTemp.Close '///新規ブックの編集処理/// Set xlsSheetTemp = Nothing Set xlsBookTemp = Nothing Set xlsSheetCopy = Nothing Set xlsBookCopy = Nothing Set xlsApp = Nothing End Sub

  • エクセルVBA フォルダ内のどんなシート名であっても読み込みたい

    フォルダ内の別ブック(D3で指定)の「情報」シートを読み込んで対象年月日に該当するデータを抽出して別ブックに貼り付けるものなんですが、下のコードではSet ws = wb.Worksheets("情報")と、なっていて、限定しているのですが、これをD3のファイルのどんなシート名であっても読み込みたいのですが、どのようにコードにしたらいいでしょうか?D3で指定するブックには必ずひとつのシートしかありません。 よろしくお願いします。 Sub test_1() Dim wb As Workbook Dim ws As Worksheet Dim ms As Worksheet Dim nb As Workbook Dim r As Long Set ms = ThisWorkbook.Worksheets("メニュー") Set wb = Workbooks.Open(ms.Parent.Path & "\" & ms.Range("D3").Value) Set ws = wb.Worksheets("情報") Set nb = Workbooks.Add With ws .Range("Q1").AutoFilter _ Field:=17, _ Criteria1:=">=" & ms.Range("D5").Text, _ Operator:=xlAnd, _ Criteria2:="<=" & ms.Range("F5").Text With .AutoFilter.Range r = .Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count If r = 1 Then MsgBox "抽出対象データ無し。" wb.Close False nb.Close False Set wb = Nothing: Set ws = Nothing Set ms = Nothing: Set nb = Nothing Exit Sub End If .Copy End With End With With nb.Worksheets(1) .Paste With .Range("A1:AG1") .Interior.ColorIndex = 6 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With End sub

  • VB2005でExcelのグラフのデータ範囲を設定したい

    VB2005で既存のExcelのグラフのデータ範囲を設定したいのですが どなたか教えてください。 VB6.0では下記のコードで実現できましたが VB2005ではいろいろ調べたり変更してみたりしたのですが実現できませんでした OSはWindows2000でExcelも2000です Dim ExAp As Excel.Application Dim ExBook As Excel.Workbook Dim ExSheet As Excel.Worksheet On Error GoTo er Set ExAp = CreateObject("Excel.Application") Set ExBook = ExAp.Workbooks.Open("C:\ファイル名.xls") Set ExSheet = ExBook.Worksheets("シート名") ExAp.Visible = True ExSheet.Activate ExSheet.ChartObjects("グラフ 1").Activate With ActiveChart .SeriesCollection(1).XValues = ExSheet.Range("B21:B24") .SeriesCollection(1).Values = ExSheet.Range("C21:C24") End With Exit Sub er: Set ExSheet = Nothing Set ExBook = Nothing Set ExAp = Nothing MsgBox Err.Description

  • VB6.0上でExcelオブジェクトを生成

    VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と、どちらが良いのでしょうか? 開発環境は  Windows2000  VB 6.0  Excel 2003 です。