Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5370 / 13644 ツリー ←次へ | 前へ→

【50792】上書き保存ボタンの有効無効を制御したい 山形 07/8/16(木) 2:09 質問[未読]
【50799】Re:上書き保存ボタンの有効無効を制御したい Jaka 07/8/16(木) 15:17 発言[未読]
【50801】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/16(木) 15:34 回答[未読]
【50811】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/16(木) 20:52 発言[未読]
【50824】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/17(金) 10:23 回答[未読]
【50868】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/20(月) 22:24 発言[未読]
【50874】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/21(火) 12:26 回答[未読]
【50889】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/21(火) 21:06 発言[未読]
【50890】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/21(火) 21:31 回答[未読]
【50894】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/21(火) 21:58 発言[未読]
【50896】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/21(火) 22:08 回答[未読]
【50898】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/21(火) 22:13 発言[未読]
【50921】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/22(水) 13:19 回答[未読]
【50968】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/23(木) 20:17 発言[未読]
【50969】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/23(木) 21:30 回答[未読]
【51011】Re:上書き保存ボタンの有効無効を制御したい 山形 07/8/24(金) 20:56 発言[未読]
【51033】Re:上書き保存ボタンの有効無効を制御したい yuu1 07/8/26(日) 10:30 回答[未読]
【51234】Re:上書き保存ボタンの有効無効を制御したい 山形 07/9/4(火) 22:41 お礼[未読]

【50792】上書き保存ボタンの有効無効を制御したい
質問  山形  - 07/8/16(木) 2:09 -

引用なし
パスワード
   組み込み機能の 上書き保存 に+α した ボタンを作ろうとしています。

まず、ActiveWorkBook.Save +αの機能を持ったマクロを作成

上書き保存ボタンにマクロの登録で、作成したマクロを登録しました。

すると、通常上書き保存ボタンは、ブックが開かれていない場合、
無効になるのですが、加工した上書き保存ボタンは有効のままです。

この加工した上書き保存ボタンを、通常の上書き保存ボタンと同じように、
有効無効を切り替えるにはどうしたらよいのでしょうか?

【50799】Re:上書き保存ボタンの有効無効を制御し...
発言  Jaka  - 07/8/16(木) 15:17 -

引用なし
パスワード
   組み込みメニューをあれこれいじらない方が良いと思います。
変更すると同じ組み込みメニュー全てに影響がでると思います。
前にちょっといじった時にあせった経験があります。
どうやって戻したか記憶に無いです。

【50801】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/16(木) 15:34 -

引用なし
パスワード
   こんにちは。
>この加工した上書き保存ボタンを、通常の上書き保存ボタンと同じように、
>有効無効を切り替えるにはどうしたらよいのでしょうか?

上書き保存ボタンにマクロの登録で、作成したマクロを登録するのではなく
ApplicationレベルのWorkbookBeforeSaveイベントで処理するとか、
コマンドバーをラップして処理するとか、方法があると思います。

【50811】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/16(木) 20:52 -

引用なし
パスワード
   ▼yuu1 さん:
>上書き保存ボタンにマクロの登録で、作成したマクロを登録するのではなく
>ApplicationレベルのWorkbookBeforeSaveイベントで処理するとか、
>コマンドバーをラップして処理するとか、方法があると思います。

回答ありがとうございます。
上記方法のサンプル等ありましたら、参考にさせていただけ無いでしょうか?

【50824】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/17(金) 10:23 -

引用なし
パスワード
   こんにちは。
コマンドバー上書き保存をラップして独自の機能を実行する例です。

'ThisWorkbookモジュール
Option Explicit
Private WithEvents Save As Office.CommandBarButton

Private Sub Save_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 CancelDefault = True '本来の上書き処理をキャンセルする場合
 MsgBox "ActiveWorkBook.Save +αの機能を持ったマクロを実行"
End Sub

Private Sub Workbook_Open()
 Set Save = Application.CommandBars.FindControl(ID:=3)
End Sub

【50868】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/20(月) 22:24 -

引用なし
パスワード
   ▼yuu1 さん:
>こんにちは。
>コマンドバー上書き保存をラップして独自の機能を実行する例です。

ありがとうございます。

例を試したのですが、
「オブジェクトはオートメーションイベントを発生させることができません」
と表示されて実行できませんでした。

【50874】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/21(火) 12:26 -

引用なし
パスワード
   >例を試したのですが、
>「オブジェクトはオートメーションイベントを発生させることができません」
>と表示されて実行できませんでした。

おかしいですね。
こちらは正常に動作するのを確認しています。確認環境:windows2000/excel2000

【50889】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/21(火) 21:06 -

引用なし
パスワード
   ▼yuu1 さん:
>>例を試したのですが、
>>「オブジェクトはオートメーションイベントを発生させることができません」
>>と表示されて実行できませんでした。
>
>おかしいですね。
>こちらは正常に動作するのを確認しています。確認環境:windows2000/excel2000

こちらはWindowsNT/Excel97です。

【50890】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/21(火) 21:31 -

引用なし
パスワード
   >例を試したのですが、
>「オブジェクトはオートメーションイベントを発生させることができません」

コンパイルエラーですか、実行時エラーですか?
エラー行はどこですか?

>こちらはWindowsNT/Excel97です。

環境が無いので試せません。

IDが異なることはないですか。
イミディエイトウィンドウで以下を実行してみてください。

?Application.CommandBars.FindControl(ID:=3).Caption

結果↓になりますか?
上書き保存(&S)

【50894】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/21(火) 21:58 -

引用なし
パスワード
   ▼yuu1 さん:
>>例を試したのですが、
>>「オブジェクトはオートメーションイベントを発生させることができません」
>
>コンパイルエラーですか、実行時エラーですか?
>エラー行はどこですか?

コンパイルでエラーになります

>IDが異なることはないですか。
>イミディエイトウィンドウで以下を実行してみてください。
>
>?Application.CommandBars.FindControl(ID:=3).Caption
>
>結果↓になりますか?
>上書き保存(&S)

なります

【50896】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/21(火) 22:08 -

引用なし
パスワード
   >コンパイルでエラーになります

エラー行はどこですか?

【50898】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/21(火) 22:13 -

引用なし
パスワード
   ▼yuu1 さん:
>>コンパイルでエラーになります
>
>エラー行はどこですか?

Private WithEvents Save As Office.CommandBarButton

のとこです

【50921】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/22(水) 13:19 -

引用なし
パスワード
   こんにちは。
97では、WithEventsキーワードでOffice.CommandBarButtonは使えないのでしょうか。
環境がないのでこちらでは確認できません。

>組み込み機能の 上書き保存 に+α した ボタンを作ろうとしています。

ApplicationレベルのWorkbookBeforeSaveイベントで処理すると方法を示します。
以下でどうでしょう。

'ThisWorkbookモジュール
Option Explicit
Dim WithEvents App As Application

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
 If Not SaveAsUI Then '上書き保存時の処理
  Cancel = True '本来の上書き処理をキャンセルする場合
  MsgBox "ActiveWorkBook.Save +αの機能を持ったマクロを実行"
 End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Set App = Nothing
End Sub

Private Sub Workbook_Open()
 Set App = Application
End Sub

【50968】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/23(木) 20:17 -

引用なし
パスワード
   ▼yuu1 さん:
>>組み込み機能の 上書き保存 に+α した ボタンを作ろうとしています。
>
>ApplicationレベルのWorkbookBeforeSaveイベントで処理すると方法を示します。
>以下でどうでしょう。

試してみたところ、コンパイルエラーにならずできるようです。

上書き保存する前の処理はできたのですが、
上書き保存した後の処理はどこに記述すればよいでしょうか?

【50969】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/23(木) 21:30 -

引用なし
パスワード
   >上書き保存する前の処理はできたのですが、

どのように?
マクロを示してください。

>上書き保存した後の処理はどこに記述すればよいでしょうか?

どんな処理ですか。

>MsgBox "ActiveWorkBook.Save +αの機能を持ったマクロを実行"

ここで、何でも好きなように記述するだけですよ。
といっても、これまでのレスからしてわかってもらえないようなので。
例を。

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
 If Not SaveAsUI Then '上書き保存時の処理
  Application.EnableEvents = False
  Cancel = True
  'ここで保存前の処理
  Wb.Save
  'ここで保存後の処理
  Application.EnableEvents = True
 End If
End Sub

【51011】Re:上書き保存ボタンの有効無効を制御し...
発言  山形  - 07/8/24(金) 20:56 -

引用なし
パスワード
   ▼yuu1 さん:
>>上書き保存した後の処理はどこに記述すればよいでしょうか?
>
>どんな処理ですか。

普通に保存すると、ユーザ名が更新者に設定されますが、
更新者をユーザ名でなく、団体名にしたいのです。

保存前にユーザ名を取得し、団体名をユーザ名に設定して、
保存後、ユーザ名を元に戻します。

>Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
> If Not SaveAsUI Then '上書き保存時の処理
>  Application.EnableEvents = False
>  Cancel = True
>  'ここで保存前の処理
>  Wb.Save
>  'ここで保存後の処理
>  Application.EnableEvents = True
> End If
>End Sub

ありがとうございます。
元の上書き保存処理を行わないのですね。

上記を試したのですが、
ブックを開き、変更後保存せず閉じる「×」を押すと、
保存確認ダイアログが表示されます。

この保存確認ダイアログが延々表示され、終了できなくなってしまいました。

【51033】Re:上書き保存ボタンの有効無効を制御し...
回答  yuu1  - 07/8/26(日) 10:30 -

引用なし
パスワード
   >上記を試したのですが、
>ブックを開き、変更後保存せず閉じる「×」を押すと、
>保存確認ダイアログが表示されます。
>この保存確認ダイアログが延々表示され、終了できなくなってしまいました。

そうですか。では、次のようではどうでしょう。

'ThisWorkbookモジュール
Option Explicit
Dim WithEvents App As Application

Private Sub WorkbookAfterSave()
 'ここで保存後の処理
 '
End Sub

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
 If Not SaveAsUI Then '上書き保存時の処理
  'ここで保存前の処理
  '
  Application.OnTime Now, "ThisWorkbook.WorkbookAfterSave"
 End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Set App = Nothing
End Sub

Private Sub Workbook_Open()
 Set App = Application
End Sub

【51234】Re:上書き保存ボタンの有効無効を制御し...
お礼  山形  - 07/9/4(火) 22:41 -

引用なし
パスワード
   目的に達する事ができました。
ありがとうございました。

5370 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free