Top > Programmingとか > Office > タブと闘う

10 XLSTARTとmodeless

検証環境 自作マシン(PentuimIII1.2GHz/512MB)
WinXPHomeSP1/IE6.0SP1/MSExcel2003SP1

前回までのお話でタブと戦うは一段落つけたつもりだったんですが。
気になることが2点ほど出てきてしまったので、ほんの追加でちょいちょい…とお話しするつもりだったんですが、なんだかけっこぅ大事になってきてしまいそぅな。

ので、ちょいと腰を据えて、キチンとお話してみよぅかと思います。
もぅ少し便利になるかもしれませんので、よろしくお付き合いください。



まず。

前回のごめんさらにだめだ。でもせっかくなのでモジュール提供において、

Excelってば起動時に、XLSTARTフォルダのファイルを全部読み込むんだっ!

と叫んでいたんですよ、私。
ってことは逆に考えると、

Excelの起動時に読み込ませたいマクロは、
XLSTARTフォルダの中にありさえすれば
ファイル名は何でもいい

てゅうことではないですか。がびーん。
前回、basやらfrmやらで提供して自分でPersonal.xlsに組み込めと言ってしまったのは、いったい何だったんでしょうか。

すなおにSalTabView.xlsとでもして、XLSTARTフォルダに置いてもらえればOKOKって言っておけばいいってことではないですか。
答えは自分の目の前にあったのに、迂闊にも気づいたのはお話ししてから半年も経ってからでしたよ。



さて、もぅ一点。

実は最初っからあきらめまくっていたので、今までのお話の中ではまったく触れもしなかったんですが。

UserFormを表示させるメソッドShowには、引数としてmodal/modelessを指定できるのでした。

これを指定できると、UserFormを表示させたままSheetを操作できるようになるので、またひとつ便利になってしまぅんですが。

では、なんで今までそんな便利なことをしなかったかといぅと。

本シリーズを書き始めた時のExcel97では、modal/modelessの指定ができなかったからだったのでした。

その後使用するExcelを2000→XP(2002)→2003と変えていったわけなんですが、modelessの指定を再度試すって発想が湧かないままここまで突っ走ってきたんですね。

ところが先日Excel2003のHelpをぼーたら読んでいたら、Showメソッドの説明に、引数 modalの説明が書いてあるではありませんか。

えっ!?

あわてて調べてみたら、Excel2000から引数 modal は使用できるよぅになっていたんですね。うかつー。 ってことで、先日公開したファイルの中の[modTabView.bas]-[ShowTabView]のShowメソッドに「vbModeless」を書き加えるだけで、frmTabViewを表示させたままSheetの操作が可能に!

'**************************
' タブ選択ダイアログの表示
'**************************
Sub ShowTabView()
Dim strRet As String
Dim lngRet As Long
Dim strMsg As String
Dim ctlButton As CommandBarButton
Dim i As Long
Dim FNo As Integer
'*** 初回起動時、ツールバーへのボタン登録を確認する
'パラメータ用ファイルの存在確認
strRet = Dir(ThisWorkbook.Path & "\..\TabView.dat")
'*** パラメータ用ファイルが存在していなければ初回起動と見なす
If (strRet = "") Then
'ツールバーへのボタンの登録
strMsg = "標準ツールバーへ「タブ選択ダイアログ起動」ボタンを追加しますか?"
lngRet = MsgBox(strMsg, vbYesNo, "タブ選択ダイアログ")
If (lngRet = vbYes) Then
Set ctlButton = CommandBars("Standard").Controls.Add(Type:=msoControlButton)
ctlButton.Caption = "TabView"
ctlButton.TooltipText = "タブ選択ダイアログ"
ctlButton.OnAction = ThisWorkbook.Name & "!ShowTbView"
ctlButton.FaceId = 2587
End If
Else
'Form表示座標の取得
FNo = FreeFile
On Error Resume Next
Open ThisWorkbook.Path & "\..\TabView.dat" For Input As #FNo
If (Err) Then
lngX = 0
lngY = 0
Else
Input #FNo, lngX, lngY
Close FNo
End If
On Error GoTo 0

End If
'*** タブ選択ダイアログの表示
frmTabView.Show vbModeless
End Sub
ってことでひとつ。


…といぅわけにはいきませんね。

今までUserForm側からの操作しか考えていなかったのが、Workbook/Sowksheet側からの操作にもシンクロさせないとエラーしまくりの状態になってしまぅのは目に見えています。

ので、Excelからのイベントへの対応やら何やらで、これからしばらくいろいろイジってみたいと思います。

→さて、また一仕事だ。

トラックバック

このエントリーのトラックバックURL:
http://salv.miscnotes.com/mt/mt-tb.cgi/342

コメントを投稿