こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル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の後ろに隠れたままであり、エクセルを選択しないと最前面表示されません。

しかし一応最前面表示されることもあることから、マクロを一度実行するごとにエクセル内のデータが変わる可能性も考えられす。

投稿日時 - 2018-10-31 15:50:36

QNo.9553157

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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

投稿日時 - 2018-11-10 09:18:02

ANo.3

回答No1です。
Exit sub が抜けてました!
すみません。

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

投稿日時 - 2018-11-03 14:28:00

ANo.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

投稿日時 - 2018-11-03 14:08:01

ANo.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

投稿日時 - 2018-11-03 13:38:05

あなたにオススメの質問