teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記

2017/11/09 08:28

投稿

vitabrevisarsl1
vitabrevisarsl1

スコア57

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