C言語でなくて恐縮です。
Windows7 64Bit EXCEL2007 です。
さて、EXCELのVBAでユーザーフォームを作っているのですが・・・・
うまくいかないことがあり、知恵を貸してください。
アンケート用のEXCELシートを作っています。なるべく、自動で集計できるようにしたいので、VBAの勉強を兼ねて作っています。
EXCELはマクロが含まれていると、立ち上げたときに、セキュリティの警告がでるので、これは使う人に親切ではありません。
また、パソコンは複数を使いたいので、セキュリティレベルを低くしたくありません。そこで、調べてみると、スクリプトを組む方法
が見つかりましたので下のように組みました。
'***********************************************************************
'Excel起動スクリプト
Option Explicit
Dim objExcelApp, strPath
Const BookName = "アンケート.xlsm"
Set objExcelApp = CreateObject("Excel.Application")
With WScript
strPath = Replace(.ScriptFullName, .ScriptName, "")
End With
objExcelApp.Workbooks.Open strPath & BookName, False, False
objExcelApp.Visible = True
Set objExcelApp = Nothing
'***********************************************************************
このファイルをダブルクリックすれば、"アンケート.xlsm"が開き、セキュリティの警告が出なくなります。
次に、開いたときに、フォームを開きたいので、ユーザフォームを作り、VBAでThisWorkbookに
Private Sub Workbook_Open()
Me.Activate
Sheets("Sheet1").Activate
StartForm.Show
End Sub
としました。さて、スクリプトファイルをダブルクリックすると、フォームが開くのですが、残念ながら、
ファイル一覧のエクスプローラーの裏に隠れてしまい、前面に出てきません。
Activeにしたり、いろいろ試したのですが、どうしてもうまくいきません。
方法があるのでしたら教えてください。
なお、確認しやすいように、2つのファイルを添付します。
フォームのボタン等は動作しませんので、閉じるボタンで閉じてください。
EXCELのフォームを前面に表示させる
EXCELのフォームを前面に表示させる
- 添付ファイル
-
- test.zip
- EXCELは必要のない部分は全部削除しました。ウィルスは乗っていないので、私を信じて、EXCELは開いてください。
- (15.27 KiB) ダウンロード数: 131 回
non
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: EXCELのフォームを前面に表示させる
えーっと、僕の環境だと普通(隠れず)にフォームが出てきましたよ・・・(フォームが隠れてしまうということでよろしいんですよね??)
もし僕がやるのであれば、
「強引にTOP MOSTウィンドウにする」
「Zオーダーを起動時に変更する」
の二つのうちどちらかでしょうね・・・
ユーザに優しいのは後者ですが、確実にするのであれば前者でしょう。
[hr][環境]
windows xp sp2
ms excel 2007
もし僕がやるのであれば、
「強引にTOP MOSTウィンドウにする」
「Zオーダーを起動時に変更する」
の二つのうちどちらかでしょうね・・・
ユーザに優しいのは後者ですが、確実にするのであれば前者でしょう。
[hr][環境]
windows xp sp2
ms excel 2007
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: EXCELのフォームを前面に表示させる
コードは以下のようになります。
(引用・一部改変)http://oshiete.goo.ne.jp/qa/2152631.html
上の呼び出しの必要なほうだけ残してください。
(引用・一部改変)http://oshiete.goo.ne.jp/qa/2152631.html
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST As Long = -1
Private Const HWND_TOP As Long = 0
Private Const SWP_NOSIZE As Long = &H1&
Private Const SWP_NOMOVE As Long = &H2&
Private Sub UserForm_Activate()
Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) 'TOPMOSTにする
Call SetWindowPos(GetForegroundWindow, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) 'Zオーダーを一番前にする
End Sub
Re: EXCELのフォームを前面に表示させる
bitter_foxさん
このとき、ユーザフォームがエクスプローラの裏に隠れていませんか?私の環境では、エクスプローラの画面は必ず最前面にあり、
下に隠れません。スクリプトファイルから開かずに、直接「アンケート」のエクセルファイルを開いてた場合は、最前面にきます。
スクリプトファイルの中で開いているので、このエクスプローラが最優先になっているような感じです。
紹介していただいた方法は、私もすでに見つけていたのですが、うまくいきませんでした。環境(Windows7)の違いでしょうか?
それとも、添付のプログラムを書く場所が違ってる?
すみませんが、Windows7の環境をお使いの方、確認していただけませんか?
そうですか?うまくいきますか?確認ですが、testのフォルダをを解凍して、「これをダブルクリック」というスクリプトファイルを開きますよね。bitter_fox さんが書きました:えーっと、僕の環境だと普通(隠れず)にフォームが出てきましたよ・・・(フォームが隠れてしまうということでよろしいんですよね??)
このとき、ユーザフォームがエクスプローラの裏に隠れていませんか?私の環境では、エクスプローラの画面は必ず最前面にあり、
下に隠れません。スクリプトファイルから開かずに、直接「アンケート」のエクセルファイルを開いてた場合は、最前面にきます。
スクリプトファイルの中で開いているので、このエクスプローラが最優先になっているような感じです。
紹介していただいた方法は、私もすでに見つけていたのですが、うまくいきませんでした。環境(Windows7)の違いでしょうか?
それとも、添付のプログラムを書く場所が違ってる?
すみませんが、Windows7の環境をお使いの方、確認していただけませんか?
non
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: EXCELのフォームを前面に表示させる
そのようにしてましたが、隠れずに表示されました。。。non さんが書きました: そうですか?うまくいきますか?確認ですが、testのフォルダをを解凍して、「これをダブルクリック」というスクリプトファイルを開きますよね。
このとき、ユーザフォームがエクスプローラの裏に隠れていませんか?
既知でダメでしたか・・・non さんが書きました:紹介していただいた方法は、私もすでに見つけていたのですが、うまくいきませんでした。環境(Windows7)の違いでしょうか?
それとも、添付のプログラムを書く場所が違ってる?
あの方法を使ったバージョンって載せてもらえますでしょうか?
Re: EXCELのフォームを前面に表示させる
bitter_foxさん
それでは、再度添付します。
確認お願いします。
それでは、再度添付します。
確認お願いします。
- 添付ファイル
-
- test.zip
- (12.47 KiB) ダウンロード数: 196 回
non
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: EXCELのフォームを前面に表示させる
確認しましたが僕が挿入してみた箇所と同じところでした。。。
これって、TOPMOSTにしても同様にダメでしょうか??
あと、参考までにWSHのバージョンっていくつでしょうか??(確認方法はコマンドラインからcscriptを実行すると一行目に表示されます)(僕の環境では、5.6でした)
これって、TOPMOSTにしても同様にダメでしょうか??
あと、参考までにWSHのバージョンっていくつでしょうか??(確認方法はコマンドラインからcscriptを実行すると一行目に表示されます)(僕の環境では、5.6でした)