Excel VBA質問箱 IV

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

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


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

【65880】マクロ以外の他のファイルを開いていて、閉じるボタンを押したとき あや 10/7/5(月) 11:39 質問[未読]
【65882】Re:マクロ以外の他のファイルを開いていて... Abebobo@リハビリ中 10/7/5(月) 12:33 発言[未読]
【65887】Re:マクロ以外の他のファイルを開いていて... あや 10/7/5(月) 16:39 お礼[未読]
【65924】Re:マクロ以外の他のファイルを開いていて... あや 10/7/8(木) 12:37 質問[未読]
【65925】Re:マクロ以外の他のファイルを開いていて... Jaka 10/7/8(木) 13:32 発言[未読]
【65926】Re:マクロ以外の他のファイルを開いていて... あや 10/7/8(木) 13:53 質問[未読]
【65927】Re:マクロ以外の他のファイルを開いていて... Jaka 10/7/8(木) 14:31 発言[未読]
【65929】Re:マクロ以外の他のファイルを開いていて... mura 10/7/8(木) 15:37 発言[未読]
【65930】Re:マクロ以外の他のファイルを開いていて... あや 10/7/8(木) 16:27 発言[未読]
【65933】Re:マクロ以外の他のファイルを開いていて... mura 10/7/8(木) 19:06 お礼[未読]
【65937】Re:マクロ以外の他のファイルを開いていて... あや 10/7/9(金) 8:55 お礼[未読]
【65941】Re:マクロ以外の他のファイルを開いていて... mura 10/7/9(金) 11:08 発言[未読]
【65943】Re:マクロ以外の他のファイルを開いていて... あや 10/7/9(金) 13:55 お礼[未読]

【65880】マクロ以外の他のファイルを開いていて、...
質問  あや  - 10/7/5(月) 11:39 -

引用なし
パスワード
   ファイル(A)を閉じるタイミングで、
不要なシートを削除するというマクロを作りました。

ThisWorkbook に、

Private Sub Workbook_BeforeClose(Cancel As Boolean)

 ’不要なシートを削除する

End sub

を書いています。

問題は、他のエクセルファイル(B)を開いて、
エクセルの閉じるボタンを押したところ
Bが前面にあるために、

『WorksheetクラスのSelectメソッドが失敗しました。』となります。

Bが前面にあるので、Aファイルのシートが見にいけないので
正しい動きかと思います。

ここで、単純な回避方法を考えたのですが
閉じるボタンを押したタイミングで、Aファイルを前面にする。です。

他に考えられる回避方法はありませんか?

【65882】Re:マクロ以外の他のファイルを開いてい...
発言  Abebobo@リハビリ中  - 10/7/5(月) 12:33 -

引用なし
パスワード
   ▼あや さん:

単純に、

With ThisWorkbook
  .Sheets(1).Delete
   ・
   ・
   ・
のように、ブックを指定してやれば問題ないと思いますが、


>
> ’不要なシートを削除する
>

のコードを提示すれば もっと適切な回答が得られると思います。

【65887】Re:マクロ以外の他のファイルを開いてい...
お礼  あや  - 10/7/5(月) 16:39 -

引用なし
パスワード
   ブックを指定する方法で少し進みました。

Abeboboさん ありがとうございます。

【65924】Re:マクロ以外の他のファイルを開いてい...
質問  あや  - 10/7/8(木) 12:37 -

引用なし
パスワード
   疑問点が出てきましたので、またお願いしますm(_ _)m

Bファイルが前面にあるときに、閉じるボタンを押したときにエラー

1.Abeboboさんに教えてもらった方法

(AファイルのThisworkbookに記述しているマクロです)
Sub Workbook_BeforeClose(Cancel As Boolean)

 call sub作業

end sub


Sub sub作業

 ThisWorkbook.Sheets("商品").Select ☆

end sub

これだと☆のところで worksheetクラスのselectメソッドが失敗しました。 となります。
(商品シートは非表示ではなく,表示されています)

2.ファイル名を指定して、前面にしてみる方法

Sub Workbook_BeforeClose(Cancel As Boolean)

 call sub作業

end sub


Sub sub作業

 Windows("A").Activate

 Sheets("商品").Select

end sub

これだと、アクティブになって 商品シートのセレクトも出来るのですが
Closeしなくなりました。

どのようにすれば良いのでしょう。よろしくおねがいします。

【65925】Re:マクロ以外の他のファイルを開いてい...
発言  Jaka  - 10/7/8(木) 13:32 -

引用なし
パスワード
   他ブックが絡んでいるなら、仕事をきっちり分けてください。
ブックをアクティブにする。
それから、シートを選択。
ThisWorkbook.activate
ThisWorkbook.Sheets("商品").select
(Sheets("商品").select)

他、
Application.Goto reference:=ThisWorkbook.Sheets("商品").Range("A1")
とか。

【65926】Re:マクロ以外の他のファイルを開いてい...
質問  あや  - 10/7/8(木) 13:53 -

引用なし
パスワード
   Jakaさん ありがとうございます。
    
Private Sub Workbook_BeforeClose(Cancel As Boolean)

  Call Sub作業
  
End Sub

Sub Sub作業()

  ThisWorkbook.Activate
  ThisWorkbook.Sheets("商品").Select

End Sub

教えて頂いたように、追加しました。

Bファイルを前面にし、閉じるボタンを押すと
Aファイルは前面になり商品シートが選択できるのですが、
AファイルもBファイルも閉じずに残ります。

BeforeCloseのタイミングなので、作業をした後閉じて欲しいのです…

ウィンドウズXP Excel2003 です。

【65927】Re:マクロ以外の他のファイルを開いてい...
発言  Jaka  - 10/7/8(木) 14:31 -

引用なし
パスワード
   ほんとうですね。
Workbookイベントのバグの一種だとじゃないかと思います。
なんか途中でリセットされているような感じでした。

標準モジュールのオートクローズなら正常に閉じました。
でも、状態を保存してないので意味が無いように感じます。
バグが多いとされている、Workbookイベントの多用は、考え直した方がいいかもしれませんね。
Win2000SP4 and EXL2003SP3

Sub Auto_Close()
  ThisWorkbook.Activate
  ThisWorkbook.Sheets("商品").Select
End Sub

【65929】Re:マクロ以外の他のファイルを開いてい...
発言  mura  - 10/7/8(木) 15:37 -

引用なし
パスワード
   >問題は、他のエクセルファイル(B)を開いて、
>エクセルの閉じるボタンを押したところ
>Bが前面にあるために、
>『WorksheetクラスのSelectメソッドが失敗しました。』となります。
>他に考えられる回避方法はありませんか?

Selectしなければいいだけでしょう。
’不要なシートを削除する
↑このコードを全て示しましょう。Selectしないコードに直してあげますから。

【65930】Re:マクロ以外の他のファイルを開いてい...
発言  あや  - 10/7/8(木) 16:27 -

引用なし
パスワード
   よろしくおねがいします。

*作業内容が、非表示なら シートは非表示
       削除なら  シートは削除

*Int明細番号は、別のシートから取得しています。
-------------------------------------------

Sub Workbook_BeforeClose(Cancel As Boolean)

 call Sub作業

end sub

------------------------------------------

Sub Sub作業

With ThisWorkbook

  .Activate
  .Sheets("商品").Select

 Int行数 = 1
        
 Do Until Int行数 = 11
            
   If Int行数 > Int明細番号 Then
              
       If 作業内容 = "非表示" Then
              
          .Sheets("商品" & Int行数).Visible = False
             
       ElseIf 作業内容 = "削除" Then
              
          Application.DisplayAlerts = False
                
          .Sheets("商品" & Int行数).Delete
                
           Application.DisplayAlerts = True
                
       End If
              
    End If
            
    Int行数 = Int行数 + 1
            
 Loop

End With

end sub

手書きで書き込んだので、大文字小文字は一定でない部分もありますm(_ _)m

【65933】Re:マクロ以外の他のファイルを開いてい...
お礼  mura  - 10/7/8(木) 19:06 -

引用なし
パスワード
   ▼あや さん:
>*作業内容が、非表示なら シートは非表示
>     削除なら  シートは削除
>*Int明細番号は、別のシートから取得しています。

宣言してない変数がありよく分かりませんが、
ぱっとみたところでは
以下の2行を削除すれば良いように思います。
  .Activate
  .Sheets("商品").Select

>手書きで書き込んだので、大文字小文字は一定でない部分もありますm(_ _)m

なぜ実際のコードを コピー&貼り付け しないのですか。

【65937】Re:マクロ以外の他のファイルを開いてい...
お礼  あや  - 10/7/9(金) 8:55 -

引用なし
パスワード
   Bのエクセルファイルを前面にして、
閉じるボタンから閉じた場合に
Aのファイル(Thisworkbook)が選択できないので

.Activate
.Sheets("商品").Select
この2行を入れています。


今回は少し無理矢理ですが
workbookイベントのバグを
フラグで対応して解決することにしました。

Jakaさんmuraさんありがとうございました。

【65941】Re:マクロ以外の他のファイルを開いてい...
発言  mura  - 10/7/9(金) 11:08 -

引用なし
パスワード
   >Bのエクセルファイルを前面にして、
>閉じるボタンから閉じた場合に
>Aのファイル(Thisworkbook)が選択できないので
>.Activate
>.Sheets("商品").Select
>この2行を入れています。

回答した2行の削除は試されたのでしょうか?
試して結果を知らせてほしいものです。

>今回は少し無理矢理ですが
>workbookイベントのバグを
>フラグで対応して解決することにしました。

プログラムがややこしくなるだけでしょう。
すっきりしたプログラムがいいですよ。

【65943】Re:マクロ以外の他のファイルを開いてい...
お礼  あや  - 10/7/9(金) 13:55 -

引用なし
パスワード
   >回答した2行の削除は試されたのでしょうか?
>試して結果を知らせてほしいものです。

文章足らずで、失礼しました。
もともと
.Activate
.Sheets("商品").Select
この2行は書き込んでいなく問題なく動いていました。


今回、この2行を追加した理由としては以下になります。

Bのエクセルファイルを前面にして、
閉じるボタンから閉じた場合に
Aのファイル(Thisworkbook)が選択できないので

.Activate
.Sheets("商品").Select
この2行を入れるようにしています。

ただ、皆さんのおかげで解決はできましたので
こちらの質問は閉じさせてもらおうと思っています。

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