• 締切済み

エクセルVBA

エクセルVBAのコードについて質問です。エクセル初心者です。 Windows10で32bit版のエクセル2010を使っています。 1.エクセルのマクロは32bit版でも64bit版にも対応できるようコードを組んでいるのですが、 32bitで動いているのか64bitで動いているのかどのように確かめたらよいでしょうか? あるマクロの途中に #If VBA7 And win64 Then MsgBox ” 64bit ” #Else またはIf VBA7 And win32 MsgBox ”32bit” #End If を組み込むと、If分の終わりには If分の最後に#EndIfが必要です、と表示されて(EndIfを書いているのに) エラーになります。 2.エクセルマクロをIEと連携させて使っています。 IEを操作させている途中でエクセルのメッセージBoxを最前面表示させるには どうしたらよいでしょうか? IEで特定の操作をしたら、エクセルが最前面に出て、OKボタン付きのメッセージBoxが表示され、OKボタンを押すとIEを操作する という動作をコードに書いています。 コードを書いた直後は、IE上での特定の操作のあとメッセージBoxが適切に最前面表示されますが、 一度保存し閉じてファイルを開き直しマクロを実行すると、メッセージBoxは最前面に出てくれません。 検討したコードは 1. SetForegroundWindow 2.VBA AppActivate. Microsoft Excel. Capture 3.AppActivate Microsoft です。いずれのコードを書いた場合も、保存まではうまくメッセージBoxに回答できるが 保存しファイルを開き直してマクロを実行するとメッセージBoxはIEの後ろに隠れたままであり、エクセルを選択しないと最前面表示されません。 しかし一応最前面表示されることもあることから、マクロを一度実行するごとにエクセル内のデータが変わる可能性も考えられす。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.4

APIを使った次のようなコードなら 有無を言わさず最前面に表示されると思います。 Option Explicit '// APIダイアログ定義 Public Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long Public Const MB_OK = &H0  'OKボタンを保有するフラグ Public Const MB_TOPMOST = &H40000 '最前面フラグ '//--------------------- サンプル Sub Sample2()  Dim MyCaption As String  Dim MyText As String    MyCaption = "これがキャプション"  MyText = "これがメッセージ"  MessageBox 0, MyText, MyCaption, MB_OK Or MB_TOPMOST End Sub

  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.3

回答No1です。 Exit sub が抜けてました! すみません。 Public Sub Sample()  If x64 Then   MsgBox "実行環境が64ビット版です。"   Exit sub ‘これが抜けてました!  End If  MsgBox "実行環境が32ビット版です。" End Sub

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

前者について 再現するサンプルコードを提示すれば コメントできるかもしれません。 少なくとも提示のコードでは再現しません。 後者について VBAでIEをどのように操作しているのか未詳なのでよくわかりませんが ■ エクセルがIEの後ろに隠れるのであれば、 一時的にそのIEを最小化する対応はいかがでしょうか IEをどのように操作しているのか不明なので コードの提示が困難です。 ■ >OKボタン付きのメッセージBox がエクセルのスプレッドシートの裏に隠れてしまうのであれば 次のようなコードで回避できませんでしょうか sub hogehoge()  '何かの処理コード  ThisWorkbook.Activate  VBA.AppActivate Excel.Application.Caption  Application.Wait Now + TimeValue("00:00:02")  InputBox ("hogehoge")  '何かの処理コード end sub

  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.1

マクロの途中に入れるのではなくプロシージャの外に出してみてください。 以下のように #If VBA7 And Win64 Then  '64ビット版  Const x64 As Boolean = True #Else  '32ビット版  Const x64 As Boolean = False #End If Public Sub Test01()  If x64 Then   MsgBox "実行環境が64ビット版です。"  End If  MsgBox "実行環境が32ビット版です。" End Sub

関連するQ&A

  • エクセルVBAにて

    エクセルのVBAでMsgbox関数を使用して Msgbox("計算が終わりました")というように記述 したのですが、マクロを実行してもメッセージが 表示されません。 どなたか教えてください。 よろしくお願いします。

  • inputbox のキャンセルの戻り値について(VBA×エクセル)

    VBA初心者で、ユーザフォームにはまだ手出ししたくなく、INPUTBOXで値を取得しているのですが、 INPUTBOXでキャンセルボタンを押したときに、マクロを終了するように書きたいのですが、どのように記述したらよいのでしょうか? INPUTBOXからはどんな値が返ってきているかわからず、 メッセージボックスで確認してみたのですが、空欄なので、 IF RetIPT ="" then マクロ終了 endif としてみたのですが、「マクロ終了」には進んでくれず... 回答をお願いします~

  • エクセルVBAについて

    今、エクセルVBAでマクロの作成を行っています マクロの中で、作業用に別なエクセルとシートを作成したのですが マクロの最後でその作業用のエクセルとシートを削除する用にしました。 その際に、エクセルがメッセージボックスが開き 『このエクセルブックを閉じますか』や『このシートを削除してよろしいですか』などと聞いてきます。 このボックスを出さないように強制的に消すことは出来ないのでしょうか? 出来るのであれば、やり方を教えてください。

  • エクセルVBAでメッセージを表示する

    エクセルVBAでメッセージを表示する時は、 Msgbox "表示する内容" と記述しますが、これだと[OK]をクリックするまで エクセル本体が全く操作できなくなってしまいます。 メッセージボックスを表示させた状態で、エクセルを操作できるようにすることは 出来ますでしょうか?

  • VBAを実行しないと開けないエクセルファイル

    タイトルのようなエクセルファイルを作りたいです。 閲覧者がVBAの実行を認めない限り、閲覧不可にしたいのです。もし認めない場合はメッセージボックス等で「開くことができません」と表示され、エクセルが閉じるようにしたいです。 どのようなVBAのプログラムを組めば実行できますか?

  • エクセル VBA 初心者です

    初めて、VBAマクロに挑戦する初心者です。(エクセル2003) 下記サイトの説明のように 1つ1つのセルをテキストボックス化できるようにしたいと考えております。 http://tks.or.tv/note/2008/10/excelvba-3.php そこで、自分のエクセルから、マクロ→basic editor→挿入→標準モジュールを表示するところまで到達しました。 ここでわからない所が、上記サイトには、コードが3分割になっております。 どのように貼り付けを行い、目的の操作までできるのかわかりません。 どうぞよろしくお願いいたします。

  • エクセルVBAの質問です。

    エクセルVBAの質問です。 セルに特定の値が入力された場合にエラーとし、「再試行」を選択するとセルが修正出来る状態にしたいのですが、下記のコードだと実行時エラーが発生してしまいます。 if cells(10,10).value > 1 then if msgbox("err", vbCritical + vbRetryCancel,"") = vbRetry then Cells(10,10).Select Cells(10,10).Active ⇒ エラー箇所 else Cells(10,10).ClearContents Endif Endif 実行時エラー '438' オブジェクトは、このプロパティまたはメソッドをサポートしてません。 いろいろネットを検索してみましたが、よくわかりませんでした・・・。 VBAは初心者です。 かなり困ってます。 どなたか助言をお願い致します。

  • エクセル(2010)VBAの初歩的な問題

     エクセルVBA初心者です。エクセル2010で、マクロを記録したファイルを"△△.xlsm"として保存し、一旦そのファイルを閉じて、再度そのファイルを開いて、[開発]タブ-[コード]グループ-[マクロ]ボタンを押したときに出る「マクロ」ダイアログボックスで、保存した「マクロ名」が選択されている状態で、 [実行] [ステップ イン] ボタンは有効なのですが、 [編集] [作成] [削除] [オプション] の四つのボタンがグレーアウトして、押せる状態ではありません。また、この状態で、[実行]ボタンを押してみても、 「セキュリティの設定により、マクロが無効にされました。マクロを実行するには、このブックを再度開いて、マクロを有効にするようにする必要があります。マクロの有効化と詳細については、[ヘルプ]をクリックしてください。」 と表示されて、実行されません。[ヘルプ]ボタンを押してみると、長い説明が出てきましたが、そのどれも実行してみましたが、問題が解決されないで前に進めません。  どうすれば、一旦ディスクに保存したマクロ記録ファイルを再び開いて、マクロの操作の続きをできるようになるでしょうか。よろしくお願いします。

  • Excel2007のVBAについて

    Excel2007のVBAについて Excel2007以前では「マクロの記録」を実行して罫線や図形の描写を行って、「記録終了」を行うと作業していたコードが記述され、それを加工したりして使っていましたが、Excel2007で同じように行ってもコードが記述されてませんでした。 セルの操作等はコードが記述されていました。 どこか、私の操作方法が間違っているのでしょうか。また2003のようにコードを記述させる方法が別途あるのでしょうか、よろしくお願いします。 関係ないとおもいますが、 「Excelのオプション」で「開発タブをリボンに表示する」はチェック入れてあります。 「マクロの設定」では「すべてのマクロを有効にする」にチェックしています。

  • EXCEL VBA プログラミング

    EXCEL VBAについて教えて下さい。 プログラミング超初心者です。 book1でマクロを実行し、ダイアログボックスを表示させて、任意のファイル(book2)を開き、book1のsheet1をまるごとbook 2の末尾にコピーするという処理をしたいのですが、うまくマクロが組めません。 ダイアログボックス表示→ファイルの選択まではいけたのですが、その先で苦戦しています。。 ご存知の方、マクロの組み方をご教示いただけますでしょうか。 よろしくお願い致します。