Excel VBA質問箱 IV

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

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


1417 / 13645 ツリー ←次へ | 前へ→

【74571】コマンドボタンが徐々に消える くまさん 13/7/27(土) 20:22 質問[未読]
【74583】Re:コマンドボタンが徐々に消える n 13/7/29(月) 23:31 回答[未読]
【74593】Re:コマンドボタンが徐々に消える くまさん 13/8/1(木) 17:52 お礼[未読]
【74602】Re:コマンドボタンが徐々に消える くまさん 13/8/3(土) 12:54 質問[未読]
【74603】Re:コマンドボタンが徐々に消える n 13/8/5(月) 20:19 発言[未読]
【74604】Re:コマンドボタンが徐々に消える n 13/8/5(月) 20:57 発言[未読]
【74618】Re:コマンドボタンが徐々に消える くまさん 13/8/7(水) 21:49 質問[未読]
【74619】Re:コマンドボタンが徐々に消える n 13/8/8(木) 0:17 発言[未読]
【74620】出来ました! くまさん 13/8/8(木) 11:32 お礼[未読]

【74571】コマンドボタンが徐々に消える
質問  くまさん  - 13/7/27(土) 20:22 -

引用なし
パスワード
   Excel2000でVBAを組んだファイルで1年程問題なく
使えていたのですが、急にコマンドボタンがひとつ消え、
またひとつ消える症状が発生し、困っています。

開いたファイルを閉じる際にコマンドボタンが消えます。

また、コマンドボタンは見えなくなるのではなく完全に
消去されてしまいます。
どうしていいのか、全く手に負えません。
何かアドバイスを頂ければ幸いです。

Private Sub workbook_open()
Dim lnglCnt As Long
Dim Sh As Worksheet
For lnglCnt = 1 To Application.CommandBars.Count
Application.CommandBars(lnglCnt).Enabled = False
Next lnglCnt
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
ActiveSheet.Unprotect

Sheets("Sheet1").Activate
On Error Resume Next
ActiveSheet.Unprotect

If ActiveSheet.AutoFilterMode = False Then
  Range("$b$4:$df$4").AutoFilter
End If
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
For Each Sh In Worksheets
   Sh.EnableAutoFilter = True
   Sh.Protect UserInterfaceOnly:=True
  Next Sh
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lnglCnt As Long
For lnglCnt = 1 To Application.CommandBars.Count
Application.CommandBars(lnglCnt).Enabled = True
Next lnglCnt
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
Sheets("Sheet1").Activate
ActiveSheet.Unprotect
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
With Application
  Range("$D$5:$D$3000").Value = .Asc(.Trim(.Clean(Range("$D$5:$D$3000"))))
  Range("$CH$5:$CH$3000").Value = .Asc(.Trim(.Clean(Range("$CH$5:$CH$3000"))))
  Range("$CI$5:$CI$3000").Value = .Asc(.Trim(.Clean(Range("$CI$5:$CI$3000"))))
  Range("$CJ$5:$CJ$3000").Value = .Asc(.Trim(.Clean(Range("$CJ$5:$CJ$3000"))))
  Range("$CK$5:$CK$3000").Value = .Asc(.Trim(.Clean(Range("$CK$5:$CK$3000"))))
  Range("$CL$5:$CL$3000").Value = .Asc(.Trim(.Clean(Range("$CL$5:$CL$3000"))))
  Range("$CM$5:$CM$3000").Value = .Asc(.Trim(.Clean(Range("$CM$5:$CM$3000"))))
  Range("$CN$5:$CN$3000").Value = .Asc(.Trim(.Clean(Range("$CN$5:$CN$3000"))))
  Range("$CO$5:$CO$3000").Value = .Asc(.Trim(.Clean(Range("$CO$5:$CO$3000"))))
  Range("$CP$5:$CP$3000").Value = .Asc(.Trim(.Clean(Range("$CP$5:$CP$3000"))))
  Range("$CQ$5:$CQ$3000").Value = .Asc(.Trim(.Clean(Range("$CQ$5:$CQ$3000"))))
  Range("$CR$5:$CR$3000").Value = .Asc(.Trim(.Clean(Range("$CR$5:$CR$3000"))))
  Range("$CW$5:$CW$3000").Value = .Asc(.Trim(.Clean(Range("$CW$5:$CW$3000"))))
  Range("$CX$5:$CX$3000").Value = .Asc(.Trim(.Clean(Range("$CX$5:$CX$3000"))))
  Range("$DF$5:$DF$3000").Value = .Asc(.Trim(.Clean(Range("$DF$5:$DF$3000"))))

End With
ActiveSheet.Protect
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

If Me.Saved = False Then Me.Save
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Dim lnglCnt As Long
For lnglCnt = 1 To Application.CommandBars.Count
Application.CommandBars(lnglCnt).Enabled = False
Next lnglCnt
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Dim lnglCnt As Long
For lnglCnt = 1 To Application.CommandBars.Count
Application.CommandBars(lnglCnt).Enabled = True
Next lnglCnt
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
End Sub

【74583】Re:コマンドボタンが徐々に消える
回答  n  - 13/7/29(月) 23:31 -

引用なし
パスワード
   コマンドボタンが消えた代わりにオートフィルタのDrop Downが部分的に残ってたりしてませんか?
しかもこのDrop Downにはオートフィルタ機能がなく、手作業で削除できない。

また、そのシートにシェイプを追加して名前を確認してみてください。
例えば四角形を追加した場合、『四角形 XXXXX』となり、XXXXXの部分はシートごとのシェイプの作成連番になります。
その連番が65536以上の場合、シェイプ連番が大きくなりすぎた事による不具合です。
Ver2000の場合はオートフィルタのOn/Off繰り返しでシェイプが削除されるバグがあります。

オートフィルタの▼(ドロップダウン)もシェイプの一種で、『Excel2002以前』では
オートフィルタのOn/Offの繰り返しの度に、ドロップダウンの作成削除を繰り返す事になります。
そのため広範囲のオートフィルタOn/Off繰り返しは、シェイプの連番加算が早くなります。
困った事に、オートフィルタOffの時、ドロップダウンの連番から65536を引いた番号を持つシェイプが
運悪くシート上に存在した場合、ドロップダウンが削除される替わりにそのシェイプが削除されます。
//blog.goo.ne.jp/end-u/d/20080118

対策としては
フィルタ範囲が固定されているならオートフィルタのOn/Offではなく、ShowAllDataメソッドでフィルタ解除に留めておく。
とか、消える事を前提に、存在チェック後コマンドボタンを動的に配置しリカバリできるようにしたり。
..でも優先的な対策としては、サポートが切れた古いバージョンから脱却する事なのかもしれません。

【74593】Re:コマンドボタンが徐々に消える
お礼  くまさん  - 13/8/1(木) 17:52 -

引用なし
パスワード
   nさん、有難う御座います。早速、トライしてみます。

▼n さん:
>コマンドボタンが消えた代わりにオートフィルタのDrop Downが部分的に残ってたりしてませんか?
>しかもこのDrop Downにはオートフィルタ機能がなく、手作業で削除できない。
>
>また、そのシートにシェイプを追加して名前を確認してみてください。
>例えば四角形を追加した場合、『四角形 XXXXX』となり、XXXXXの部分はシートごとのシェイプの作成連番になります。
>その連番が65536以上の場合、シェイプ連番が大きくなりすぎた事による不具合です。
>Ver2000の場合はオートフィルタのOn/Off繰り返しでシェイプが削除されるバグがあります。
>
>オートフィルタの▼(ドロップダウン)もシェイプの一種で、『Excel2002以前』では
>オートフィルタのOn/Offの繰り返しの度に、ドロップダウンの作成削除を繰り返す事になります。
>そのため広範囲のオートフィルタOn/Off繰り返しは、シェイプの連番加算が早くなります。
>困った事に、オートフィルタOffの時、ドロップダウンの連番から65536を引いた番号を持つシェイプが
>運悪くシート上に存在した場合、ドロップダウンが削除される替わりにそのシェイプが削除されます。
>//blog.goo.ne.jp/end-u/d/20080118
>
>対策としては
>フィルタ範囲が固定されているならオートフィルタのOn/Offではなく、ShowAllDataメソッドでフィルタ解除に留めておく。
>とか、消える事を前提に、存在チェック後コマンドボタンを動的に配置しリカバリできるようにしたり。
>..でも優先的な対策としては、サポートが切れた古いバージョンから脱却する事なのかもしれません。

【74602】Re:コマンドボタンが徐々に消える
質問  くまさん  - 13/8/3(土) 12:54 -

引用なし
パスワード
   nさんのご指摘通り、シェイプ連番が大きくなりすぎていたようです。
そのため、オートフィルタは固定したままで、ファイルを閉じる時に
オートフィルタで絞込みした場合には、絞込みを解除させる様に
したいのですが、どのようなコードを組んだらよいのでしょうか。


▼n さん:
>コマンドボタンが消えた代わりにオートフィルタのDrop Downが部分的に残ってたりしてませんか?
>しかもこのDrop Downにはオートフィルタ機能がなく、手作業で削除できない。
>
>また、そのシートにシェイプを追加して名前を確認してみてください。
>例えば四角形を追加した場合、『四角形 XXXXX』となり、XXXXXの部分はシートごとのシェイプの作成連番になります。
>その連番が65536以上の場合、シェイプ連番が大きくなりすぎた事による不具合です。
>Ver2000の場合はオートフィルタのOn/Off繰り返しでシェイプが削除されるバグがあります。
>
>オートフィルタの▼(ドロップダウン)もシェイプの一種で、『Excel2002以前』では
>オートフィルタのOn/Offの繰り返しの度に、ドロップダウンの作成削除を繰り返す事になります。
>そのため広範囲のオートフィルタOn/Off繰り返しは、シェイプの連番加算が早くなります。
>困った事に、オートフィルタOffの時、ドロップダウンの連番から65536を引いた番号を持つシェイプが
>運悪くシート上に存在した場合、ドロップダウンが削除される替わりにそのシェイプが削除されます。
>//blog.goo.ne.jp/end-u/d/20080118
>
>対策としては
>フィルタ範囲が固定されているならオートフィルタのOn/Offではなく、ShowAllDataメソッドでフィルタ解除に留めておく。
>とか、消える事を前提に、存在チェック後コマンドボタンを動的に配置しリカバリできるようにしたり。
>..でも優先的な対策としては、サポートが切れた古いバージョンから脱却する事なのかもしれません。

【74603】Re:コマンドボタンが徐々に消える
発言  n  - 13/8/5(月) 20:19 -

引用なし
パスワード
   >If ActiveSheet.AutoFilterMode Then
>  ActiveSheet.AutoFilterMode = False
>End If
このフィルタ解除のコードの代わりに

With Sheets("Sheet1")
  If .FilterMode Then
    .ShowAllData
  End If
End With
などとすれば良いかと思います。

【74604】Re:コマンドボタンが徐々に消える
発言  n  - 13/8/5(月) 20:57 -

引用なし
パスワード
   ..ぁ、ダメですね。
BeforeCloseイベント内で一部のメソッドが無効になるパターンですか..

BeforeCloseの
>If ActiveSheet.AutoFilterMode Then
>  ActiveSheet.AutoFilterMode = False
>End If
このフィルタ解除のコードを無くして
Workbook_Openイベント内で
With Sheets("Sheet1")
  If .FilterMode Then
    .ShowAllData
  End If
End With
ではダメでしょうか?

【74618】Re:コマンドボタンが徐々に消える
質問  くまさん  - 13/8/7(水) 21:49 -

引用なし
パスワード
   Workbook_Openイベント内でトライしてみましたところ、フィルタ絞込み
解除は出来たのですが、どういうわけか特定の列のセル内のデータが
全て同じ名称(フィルタで絞り込んだ後の最初の行にあるデータ)に変換
されてしまう現象が発生してしまいました。他に手はないでしょうか。

▼n さん:
>..ぁ、ダメですね。
>BeforeCloseイベント内で一部のメソッドが無効になるパターンですか..
>
>BeforeCloseの
>>If ActiveSheet.AutoFilterMode Then
>>  ActiveSheet.AutoFilterMode = False
>>End If
>このフィルタ解除のコードを無くして
>Workbook_Openイベント内で
>With Sheets("Sheet1")
>  If .FilterMode Then
>    .ShowAllData
>  End If
>End With
>ではダメでしょうか?

【74619】Re:コマンドボタンが徐々に消える
発言  n  - 13/8/8(木) 0:17 -

引用なし
パスワード
   そうでした..orz
..Asc(.Trim(.Clean..処理の前にFilter解除が必要なので
やはりBookClose時に解除処理を入れないといけません。
>With Sheets("Sheet1")
>  If .FilterMode Then
>    .ShowAllData
>  End If
>End With
このコードはBeforeCloseイベントに書いてください。


それから、
このBookを閉じる時はどうのような方法で閉じていますか?
ボタンか何かで、ThisWorkbook.Close など、
Bookを閉じるマクロを呼び出したりしていると、
BeforeCloseイベント内での ShowAllData メソッドが無視されると思います。
また Savedプロパティによる制御もうまくいかないようです。


なので、マクロによってそのBookを閉じる場合は、
Sub test()
  Application.CommandBars.FindControl(ID:=106).accDoDefaultAction
End Sub
このように、手動で閉じる動作をエミュレートするような内容のマクロに変えてください。

【74620】出来ました!
お礼  くまさん  - 13/8/8(木) 11:32 -

引用なし
パスワード
   思い通りに出来るようになりました。
有難う御座いました。

▼n さん:
>そうでした..orz
>..Asc(.Trim(.Clean..処理の前にFilter解除が必要なので
>やはりBookClose時に解除処理を入れないといけません。
>>With Sheets("Sheet1")
>>  If .FilterMode Then
>>    .ShowAllData
>>  End If
>>End With
>このコードはBeforeCloseイベントに書いてください。
>
>
>それから、
>このBookを閉じる時はどうのような方法で閉じていますか?
>ボタンか何かで、ThisWorkbook.Close など、
>Bookを閉じるマクロを呼び出したりしていると、
>BeforeCloseイベント内での ShowAllData メソッドが無視されると思います。
>また Savedプロパティによる制御もうまくいかないようです。
>
>
>なので、マクロによってそのBookを閉じる場合は、
>Sub test()
>  Application.CommandBars.FindControl(ID:=106).accDoDefaultAction
>End Sub
>このように、手動で閉じる動作をエミュレートするような内容のマクロに変えてください。

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