EXCELのフォームを前面に表示させる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
non
記事: 1097
登録日時: 14年前

EXCELのフォームを前面に表示させる

#1

投稿記事 by non » 14年前

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つのファイルを添付します。
フォームのボタン等は動作しませんので、閉じるボタンで閉じてください。
添付ファイル
test.zip
EXCELは必要のない部分は全部削除しました。ウィルスは乗っていないので、私を信じて、EXCELは開いてください。
(15.27 KiB) ダウンロード数: 131 回
non

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: EXCELのフォームを前面に表示させる

#2

投稿記事 by bitter_fox » 14年前

えーっと、僕の環境だと普通(隠れず)にフォームが出てきましたよ・・・(フォームが隠れてしまうということでよろしいんですよね??)

もし僕がやるのであれば、
「強引にTOP MOSTウィンドウにする」
「Zオーダーを起動時に変更する」
の二つのうちどちらかでしょうね・・・

ユーザに優しいのは後者ですが、確実にするのであれば前者でしょう。

[hr][環境]
windows xp sp2
ms excel 2007

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: EXCELのフォームを前面に表示させる

#3

投稿記事 by bitter_fox » 14年前

コードは以下のようになります。

(引用・一部改変)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
上の呼び出しの必要なほうだけ残してください。

non
記事: 1097
登録日時: 14年前

Re: EXCELのフォームを前面に表示させる

#4

投稿記事 by non » 14年前

bitter_foxさん
bitter_fox さんが書きました:えーっと、僕の環境だと普通(隠れず)にフォームが出てきましたよ・・・(フォームが隠れてしまうということでよろしいんですよね??)
そうですか?うまくいきますか?確認ですが、testのフォルダをを解凍して、「これをダブルクリック」というスクリプトファイルを開きますよね。
このとき、ユーザフォームがエクスプローラの裏に隠れていませんか?私の環境では、エクスプローラの画面は必ず最前面にあり、
下に隠れません。スクリプトファイルから開かずに、直接「アンケート」のエクセルファイルを開いてた場合は、最前面にきます。
スクリプトファイルの中で開いているので、このエクスプローラが最優先になっているような感じです。

紹介していただいた方法は、私もすでに見つけていたのですが、うまくいきませんでした。環境(Windows7)の違いでしょうか?
それとも、添付のプログラムを書く場所が違ってる?

すみませんが、Windows7の環境をお使いの方、確認していただけませんか?
non

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: EXCELのフォームを前面に表示させる

#5

投稿記事 by bitter_fox » 14年前

non さんが書きました: そうですか?うまくいきますか?確認ですが、testのフォルダをを解凍して、「これをダブルクリック」というスクリプトファイルを開きますよね。
このとき、ユーザフォームがエクスプローラの裏に隠れていませんか?
そのようにしてましたが、隠れずに表示されました。。。
non さんが書きました:紹介していただいた方法は、私もすでに見つけていたのですが、うまくいきませんでした。環境(Windows7)の違いでしょうか?
それとも、添付のプログラムを書く場所が違ってる?
既知でダメでしたか・・・
あの方法を使ったバージョンって載せてもらえますでしょうか?

non
記事: 1097
登録日時: 14年前

Re: EXCELのフォームを前面に表示させる

#6

投稿記事 by non » 14年前

bitter_foxさん

それでは、再度添付します。
確認お願いします。
添付ファイル
test.zip
(12.47 KiB) ダウンロード数: 196 回
non

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: EXCELのフォームを前面に表示させる

#7

投稿記事 by bitter_fox » 14年前

確認しましたが僕が挿入してみた箇所と同じところでした。。。

これって、TOPMOSTにしても同様にダメでしょうか??

あと、参考までにWSHのバージョンっていくつでしょうか??(確認方法はコマンドラインからcscriptを実行すると一行目に表示されます)(僕の環境では、5.6でした)

non
記事: 1097
登録日時: 14年前

Re: EXCELのフォームを前面に表示させる

#8

投稿記事 by non » 14年前

やっぱり、そうですか。OSですかね。Windows7の32ビットでもだめでした。

WSHは5.8です。
諦めますか。お世話になりました。
non

閉鎖

“C言語何でも質問掲示板” へ戻る