質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

Microsoft office Excel は、動作を停止しました

lovely.wolf
lovely.wolf

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

2回答

0評価

0クリップ

6779閲覧

投稿2015/06/04 09:16

編集2015/06/04 11:05

当該ファイルを開く際にリボン等を非表示、閉じる際には表示に戻すところでつまづいています。
Win7 Excel2007(今後2013でも使う予定です)

【標準モジュール】
Public booCloseFlag As Boolean

'API宣言
'ウィンドウハンドルを取得する関数
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'ウィンドウに関する情報を返す関数
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'ウィンドウの属性を変更する関数
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'メニューバーを描画する関数
Public Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

【ThisWorkbook】
Private Sub Workbook_Open()
Call すべて非表示
booCloseFlag = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If booCloseFlag = True Then 終了確認1.Show
Cancel = booCloseFlag
End Sub

【UserForm:終了確認1】
Private Sub UserForm_Initialize()
Dim hWnd As Long
Dim lngWstyle As Long
hWnd = FindWindow(vbNullString, Me.Caption)
lngWstyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, lngWstyle And (Not WS_SYSMENU)
DrawMenuBar hWnd
End Sub

Private Sub CB1_保存する_Click()
Call すべて表示
booCloseFlag = False
ThisWorkbook.Close True
End Sub

Private Sub CB2_保存しない_Click()
Unload Me: 終了確認2.Show
End Sub

【UserForm:終了確認2】
Private Sub UserForm_Initialize()
Dim hWnd As Long
Dim lngWstyle As Long
hWnd = FindWindow(vbNullString, Me.Caption)
lngWstyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, lngWstyle And (Not WS_SYSMENU)
DrawMenuBar hWnd
End Sub

Private Sub CB1_絶対にしない_Click()
Call すべて表示
booCloseFlag = False
ThisWorkbook.Close False
End Sub

Private Sub CB2_やっぱりする_Click()
Call すべて表示
booCloseFlag = False
ThisWorkbook.Close True
End Sub

【標準モジュール】
Sub すべて表示()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",true)"
Application.DisplayFormulaBar = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
On Error Resume Next
For Each s In ThisWorkbook.Sheets
s.Select
ActiveWindow.DisplayWorkbookTabs = True
ActiveWindow.DisplayHeadings = True
Next
On Error GoTo 0
End Sub

Sub すべて非表示()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",false)"
Application.DisplayFormulaBar = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
On Error Resume Next
For Each s In ThisWorkbook.Sheets
s.Select
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHeadings = False
Next
On Error Resume Next
End Sub

■ 起きている困った事象
違うファイルを開いた状態で、
ワークブックの×ボタンをクリック ⇒ 終了確認1、CB2_保存しない ⇒ 終了確認2、CB1_絶対にしない
の順番で閉じようとすると、
「Microsoft office Excel は、動作を停止しました」のウィンドウが出てきてしまいます。

■ 試してみたこと
・一緒に開くファイルは、いろいろなファイルを複数試してみましたが、すべて同じ事象が発生します。
・上記の操作以外は問題ありません。
・ユーザーフォームの終了確認1からステップ実行した場合には、上記事象は起こりません。
・当該ファイルを単独で使用すれば問題は起きません。
・PCの再起動をしても、治りませんでした。

なにがいけないのか、さっぱりわからず困っています。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。