忍者ブログ
27 April

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

05 March

【EXCEL VBA】入力規則で表示されるドロップダウンリストに纏わるバグ(2000)

午前中の後半から、14:47頃まで、以前発生した、入力規則のドロップダウンバグに苦しめられる。
■特徴
□該当セルのドロップダウンが表示された【瞬間】、同シート上の某のボタンが同セル上に引き寄せられ、該当セルを塞ぐ。
□該当セルが選ばれるまでは、その座標にボタンは無い
■対応
□入力規則を持つワークシートの雛形に、アクションを追加
□SelectionChangeの瞬間、該当セル上のDorop Down以外の全てのシェイプを.Deleteする
□一応、パラメータで、別シート、任意のセル、任意のアドレスに、.Deleteか.Visible=Falseかを選べるようにした
□Visible=Falseにすると、ボタンにセルをふさがれっぱなしになり、クリックではセルを選択できなくなる(キーボード操作のみ)
→しかし、操作シート系のボタンは一つでも消えると致命的なため、機能として用意した
□吸い込みタイミングは不明だが、一度削除し、再吸い込みが起こると、別のボタンが消える
□現在のプロシージャでは、任意のアドレスは、結合セルでないとならない
■原因(仮説)
□操作シート側で再発していないことを考慮すると、
・.Rows(XX).Hidden = Trueで巻き込み非表示したボタンが対象であるという仮説
が、想定されるため、機能的には問題はないと思われる。

Public Sub DEL_Kyuin_Button(WS As Worksheet, Target As Range, Target_Address As String, SW As String)
'====================================
' 入力規則ドロップダウンバグ対応
'
' 入力規則があるセルがActiveになった瞬間、ワークシート内の任意のボタンを
' 該当セルに引き寄せるバグが発生
'
' SelectionChangeの時にシステム側で発生するバグのため、事前削除不可能。
' 該当シートのSelectionChangeよりコールする
'
' SW … "0" .Delete
' "1" .Visible = false
'====================================
Dim tgRng As Range
Dim sp As shape

If Target.Address = Range(Target_Address).MergeArea.Address Then
Set tgRng = Target

For Each sp In WS.Shapes
If Not sp.Name Like "Drop Down *" Then
If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), tgRng) Is Nothing Then
Debug.Print sp.Name
WS.Unprotect password:=PassSet
Select Case SW
Case "0": sp.Delete
Case "1": sp.Visible = False
End Select
WS.Protect password:=PassSet
End If
End If
Next

End If

Set tgRng = Nothing
Set sp = Nothing
End Sub

拍手

PR