
いつもお世話になっております。
エクセルVBAであれこれやっており,なんとか思うことができるようになりましたが,
またストップしてしまいました。
いくつかユーザーフォームを設定し,メインのユーザーフォームを,
Private Sub Workbook_Open()
Dim Excelver As String
Worksheets("マスター").Activate
Excelver = Application.Version
'MsgBox "Excelバージョン:" & Excelver
If Excelver = 15 Then 'エクセル2013
Const setRefFile As String = "C:\Program Files\Microsoft Office 15\Root\Office15\MSOUTL.OLB"
ActiveWorkbook.VBProject.References.AddFromFile setRefFile
End If
If Excelver = 16 Then 'エクセル2019
Const setRefFile1 As String = "C:\Program Files (x86)\Microsoft Office\root\Office16\MSOUTL.OLB"
ActiveWorkbook.VBProject.References.AddFromFile setRefFile1
End If
ActiveWindow.WindowState = xlMaximized
受付_後処理.Show
End Sub
のなかで開くようにしてます。メインのユーザーフォームのプロパティで
ShowModal--False
にしてモードレスにすると,Bookを開くさいにユーザーフォームが表示されません。
ShowModal--True
原因が分かりません。手動でユーザーフォーム開けば問題ないのですが,
原因がおわかりでしたら,ご教示ください。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#3 ダブりましたすみません
そうですね、やっぱり勘違いをしていたようです
流石にVBProjectを操作するコードを書かれているので
十分対策されていますね
>Bookのオープン時にメインのユーザーフォームが表示されないだけ
これは2つのバージョンとも同じなのでしょうか・・書いていないので同じなのでしょう
試しに
私のローカル環境で試してみました windows10 64bit Excel 2013 32bit
UserForm1を作り
Private Sub UserForm_Initialize()
End Sub
マスターシートを作りモジュールに
Private Sub Worksheet_Activate()
End Sub
空のイベントプロシージャ
ThisWorkbookモジュール
Private Sub Workbook_Open()
Dim Excelver As String
Worksheets("マスター").Activate
Excelver = Application.Version
'MsgBox "Excelバージョン:" & Excelver
Const setRefFile As String = "C:\Program Files\Microsoft Office 15\Root\Office15\MSOUTL.OLB"
Dim objRef As Object, flag As Boolean: flag = False
For Each objRef In ThisWorkbook.VBProject.References
If Not objRef.IsBroken Then
If objRef.Name = "Outlook" Then flag = True: Exit For
End If
Next
If flag = False Then ActiveWorkbook.VBProject.References.AddFromFile setRefFile
ActiveWindow.WindowState = xlMaximized
UserForm1.Show False
End Sub
保存して閉じ 手動で開きましたが、再現できず・・問題なくUserForm1がModelessで表示されました
再現できないので試せませんが
ActiveWindowを触る前にUserForm1.Show False を実行すると・・
UserForm1.Show False
Worksheets("マスター").Activate
ActiveWindow.WindowState = xlMaximized
UserForm1.Show False を 標準モジュールに書いてそのプロシージャを
MsgBoxを挟んで call するのとどうなるか・・
全然違うかもですがModelessで使えないコントロールとかが有った記憶があります・・
お役に立てそうもありません・・
何度も回答ありがとうございます。
>そうですね、やっぱり勘違いをしていたようです
>流石にVBProjectを操作するコードを書かれているので
>十分対策されていますね
は,とんでもありません,全部,ネットからの寄せ集めで,動くものを
こつここつと積み上げきた,まだまだ,初心者だと思ってます。
それに,再現まで行ってくださり,お手数をおかけします。
2013でも,2019でも同じでした。
今までは,BOOKを開く時に非モードレスの設定で開いてましたが,
メインのフォームから,サブのユーザーフォーム(他ブックを開いてシートを選択するフォーム)
を追加して,モードレスで開く必要がでたため変更したら,開かなくなりましたということです。
もちろん,”マスターのシート”に配置してある(受付_後処理.Show)を
記載したマクロを実行することで,メインのユーザーフォームを開くことは
できました。
サブのユーザーフォームもモードレスで開く必要があるため,
メインの呼び出しで,サブのユーザーフォームが閉じられるまで,
下記をメインの方に追加でいれてます。
下記の方法はCPUに負荷がかかるので推奨できないとありましたが,
他の方法ができないので,下記のようにしました。
シート選択.Show
Do While シート選択.Visible
DoEvents
Loop
として,サブのユーザーフォーム(シート選択)が閉じるまで,
ループさせています。
この辺も関係あるのかなあと思ってますが,不明です。
何度もありがとうございます。
No.3
- 回答日時:
#1です
上手くUP出来なかったみたいで重複したらごめんなさい
参照設定をわざわざ行っていると言う事はバージョン違いのExcelで使うと言う事ですね。
そうすると、すでに参照不可になっている項目が存在するかもしれません
#1のコード(flag 設定部分)は考慮していませんので
下記の様に変更してください
Dim objRef As Object, flag As Boolean: flag = False
For Each objRef In ThisWorkbook.VBProject.References
If Not objRef.IsBroken Then
If objRef.Name = "Outlook" Then flag = True: Exit For
End If
Next
あと、Case 15 通るとは思いますが、Case "15.0" するべきかも知れませんね
何れに致しましても、ご質問のコードが最後まで正しく実行されているか
検証するのが良いと思います
End Subの上にMsgBoxを入れてみたり、stop や Workbook_Open ではありますがステップ実行して見るとか・・・
受付_後処理.Show Falseも確認できるのでは無いでしょうか・・
再度のご回答ありがとうございます。
はい,おっしゃる通り,2台のPCを使ってますが,
それぞれ入ってるエクセルのバージョンが違うので,
バージョンに応じて,参照設定をVBAで行ってます。
よく分からないのですが,
Bookのオープン時にメインのユーザーフォームが表示されないだけで,
参照設定が必要なoutlookの操作も問題なくできます。
参照設定がうまくいってないとは,思えないのですが。
No.2
- 回答日時:
”1です
わざわざ書いているのは、バージョン違いの為のコードですね
とすると、参照不可になっている可能性がありますね
Nameプロパティでは問題が残るかも知れませんが
flag設定コードを以下に変更してください
Dim objRef As Object, flag As Boolean: flag = False
For Each objRef In ThisWorkbook.VBProject.References
If Not objRef.IsBroken Then
If objRef.Name = "Outlook" Then flag = True: Exit For
End If
Next
また、通るとは思いますが Case 15 は Case "15.0" なのかも知れません
何れに致しましても、正しく最後まで実行されているか
(受付_後処理.Show False が実行されているか)
End Sub の上に MsgBoxを作って確かめたり、
Workbook_Openではありますが、ステップ実行やStop などの設置で調べるのが良いと思います
No.1
- 回答日時:
こんにちは
>Bookを開くさいにユーザーフォームが表示されません。
エラーは出ないのですか?
ユーザーフォーム表示部分の .Show False に問題があるようには思えませんが・・
メインフォームと言う事はサブはどのように表示されるのか
Worksheets("マスター").Activate
情報としては、Workbook_Openで実行されるすべての処理が必要ですね
FormのInitializeに問題があるのかも知れませんし・・
もし、InitializeでOutlookを触っていたら・・
参照先のOutlookにエラーがあるとか・・・参照が上手く出来ていないとか・・
無いと思いますがWorksheet_Activateイベントとか使っていたり・・
色々と想像しますが、
示されているコードで 強いて問題点を上げるとすると
表示には関係ないと思いますが、
すでに参照設定がされている場合、エラーが返る気がしますが、どうでしょう?(条件が不足している為)
思い出せませんが、すでに参照されている場合、自動的にスルーされる だったかなぁ・・
思い付く ここの部分のコード
・
・
Dim objRef As Object, flag As Boolean
For Each objRef In ThisWorkbook.VBProject.References
If objRef.Name = "Outlook" Then flag = True: Exit For
Next
If flag = False Then
Select Case Application.Version
Case 15 'エクセル2013
ActiveWorkbook.VBProject.References.AddFromFile setRefFile
Case 16 'エクセル2019
ActiveWorkbook.VBProject.References.AddFromFile setRefFile1
End Select
End If
ActiveWindow.WindowState = xlMaximized
・
・
早速のアドバイスありがとうございます。
開く時に,特にエラーは出ません。
ユーザーフォームのプロバティを
ShowModal--True
に変更すると,問題なくユーザーフォームが表示されます。
それから,参照設定のことですが,
Bookを閉じるときに,
With ThisWorkbook.VBProject
For Each refObj In ThisWorkbook.VBProject.References
If refObj.Description = "Microsoft Outlook 15.0 Object Library" Then
.References.Remove refObj
MsgBox "Microsoft Outlook 15.0 Object Libraryの参照を外します。"
End If
Next refObj
End With
With ThisWorkbook.VBProject
For Each refObj1 In ThisWorkbook.VBProject.References
If refObj1.Description = "Microsoft Outlook 16.0 Object Library" Then
.References.Remove refObj1
MsgBox "Microsoft Outlook 16.0 Object Libraryの参照を外します。"
End If
Next refObj1
End With
のコードで参照を外してるので,参照設定では,エラーはでません。
サブのユーザーフォームは,三つほど設定しており,
メインからそれぞれの作業に応じて,
コマンドボタンから呼び出すかたちになってます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
このQ&Aを見た人はこんなQ&Aも見ています
-
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
UserForm1.Showでエラーになります。
工学
-
-
4
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
EXCEL VBA ユーザーフォームの呼び出し時の不具合について
Excel(エクセル)
-
7
VBAでのユーザフォームの表示有無の確認について
Visual Basic(VBA)
-
8
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
9
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
10
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
11
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
12
Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。
Visual Basic(VBA)
-
13
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
14
マクロを実行中に、msgbox を表示させたまま、ワークシートを上下左右に移動表示させたい。
Excel(エクセル)
-
15
MSFormsとは何ですか?
XML
-
16
vba userFormのSubを標準モジュールから呼び出す方法を教えてください
Visual Basic(VBA)
-
17
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
18
Excel VBAで、ユーザーフォームをモードレス表示している間、処理を止めるには?
Visual Basic(VBA)
-
19
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
20
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
VBAでユーザーフォームを再表示...
-
クリックした場所にFormを開く
-
エクセルのチェックボックスの...
-
Microsoft Formsの「個人情報や...
-
二つのフォームを一緒に移動
-
VBAのテキストフォームの折り返...
-
パソコンの画面に合わせてユー...
-
エクセルのフォームをマクロで...
-
EXCEL VBA ユーザーフォームの...
-
テキストボックス入力データの...
-
ユーザーフォームのテキストボ...
-
フォームウィンドウを最前面に...
-
ユーザーフォーム上に現在日時...
-
フォームのテキストボックスな...
-
フォームを画面のど真ん中に表...
-
(Excel+VBA)ユーザーフォームの...
-
MSGBOXのフォント大きさ変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームのテキストボ...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
エクセルのチェックボックスの...
-
エクセルVBAのフォームを最...
-
VB.NETでフォームロード中のエ...
-
EXCEL VBA ユーザーフォームの...
-
VBA(エクセル)のユーザー...
-
【Excel VBA】ユーザフォームを...
-
Hideについて(.NET)
-
(Excel+VBA)ユーザーフォームの...
-
モーダルフォームとモードレス...
-
VBA コンボボックスとテキスト...
-
アクセス2013 フォームが...
おすすめ情報