B列に「▲」と「▼」ボタンが並んでいます。この内一番上と一番下のボタンを非アクティブにしたいです。
非アクティブにするために無動作マクロを割り当てるのですが、TopLeftCellを使い各ボタンのRow番取得がうまく行きません。
F8で検証するに、上図のように同じ「▲」と「▼」ボタンのループだけで終了してしまう場合があります。
VBA
1Sub 最上最下ボタン無効() 2Dim q As Integer 3Dim r As Integer 4Dim btn As Shape 5 6Application.ScreenUpdating = False 'チラついて五月蝿いのを防止 7 8Worksheets("年間集計_出勤簿").Activate 9 10Worksheets("年間集計_出勤簿").Unprotect 11 12'シート内のすべてのオブジェクト(シェイプ)をループ処理 13For Each btn In ActiveSheet.Shapes 14 Select Case btn.AlternativeText '取得したオブジェクトを表示名で判別 15 Case "▲" 16 q = ActiveSheet.Shapes(btn.Name).TopLeftCell.Row 17 If q = 8 Then 18 ActiveSheet.Shapes(btn.Name).Select 19 Debug.Print "無効ボタンアクション▲ q = 8" 20 With Selection 21 .OnAction = "無効ボタンアクション" 22 .Font.ColorIndex = 15 23 End With 24 Else 25 Debug.Print q & ":" & ActiveSheet.Shapes(btn.Name).TopLeftCell.Row 26 ActiveSheet.Shapes(btn.Name).Select 27 With Selection 28 .OnAction = "上に行移動" 29 .Font.ColorIndex = 56 30 End With 31 End If 32 Case "▼" 33 r = btn.TopLeftCell.Row 34 If r + 4 = ActiveSheet.Range("a8:a" & Cells(Rows.Count, 1).End(xlUp).Row).Count + 7 Then 35 ActiveSheet.Shapes(btn.Name).Select 36 Debug.Print "無効ボタンアクション▼ r + 4 =" & r & " // " & ActiveSheet.Range("a8:a" & Cells(Rows.Count, 1).End(xlUp).Row).Count + 7 37 ActiveSheet.Shapes(btn.Name).OnAction = "無効ボタンアクション" 38 With Selection 39 .OnAction = "無効ボタンアクション" 40 .Font.ColorIndex = 15 41 End With 42 Else 43 Debug.Print r + 4 & ":" & ActiveSheet.Range("A8:A" & Cells(Rows.Count, 1).End(xlUp).Row).Count + 7 44 ActiveSheet.Shapes(btn.Name).Select 45 With Selection 46 .OnAction = "下に行移動" 47 .Font.ColorIndex = 56 48 End With 49 End If 50 51 End Select 52Next 53 54Worksheets("年間集計_出勤簿").Protect UserInterfaceOnly:=True 55Worksheets("年間集計_出勤簿").Range("C3:D3").Locked = False 56 57ActiveSheet.Range("C3").Select 58Application.ScreenUpdating = True 59 60End Sub
カウンタ変数をiから他の文字に変えると順番に全部ループにかかりますが、一旦ファイル保存した後開いて再検証すると再発します。
Case - if の実行の中身をdebug.print等にすると問題ないことから、With Selection 以下がおかしいのかと思いdebug.print等より単純なものに替えてみると問題ありません。
OnActionとFont.Color.Indexについても検証しましたが、解消が見いだせません。
何かヒントでもご教授いただけますと幸いです。
回答3件
あなたの回答
tips
プレビュー