質問編集履歴

1

追記

2017/11/09 08:28

投稿

vitabrevisarsl1
vitabrevisarsl1

スコア57

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,130 @@
5
5
  非アクティブにするために無動作マクロを割り当てるのですが、TopLeftCellを使い各ボタンのRow番取得がうまく行きません。
6
6
 
7
7
  F8で検証するに、上図のように同じ「▲」と「▼」ボタンのループだけで終了してしまう場合があります。
8
+
9
+ ```VBA
10
+
11
+ Sub 最上最下ボタン無効()
12
+
13
+ Dim q As Integer
14
+
15
+ Dim r As Integer
16
+
17
+ Dim btn As Shape
18
+
19
+
20
+
21
+ Application.ScreenUpdating = False 'チラついて五月蝿いのを防止
22
+
23
+
24
+
25
+ Worksheets("年間集計_出勤簿").Activate
26
+
27
+
28
+
29
+ Worksheets("年間集計_出勤簿").Unprotect
30
+
31
+
32
+
33
+ 'シート内のすべてのオブジェクト(シェイプ)をループ処理
34
+
35
+ For Each btn In ActiveSheet.Shapes
36
+
37
+ Select Case btn.AlternativeText '取得したオブジェクトを表示名で判別
38
+
39
+ Case "▲"
40
+
41
+ q = ActiveSheet.Shapes(btn.Name).TopLeftCell.Row
42
+
43
+ If q = 8 Then
44
+
45
+ ActiveSheet.Shapes(btn.Name).Select
46
+
47
+ Debug.Print "無効ボタンアクション▲ q = 8"
48
+
49
+ With Selection
50
+
51
+ .OnAction = "無効ボタンアクション"
52
+
53
+ .Font.ColorIndex = 15
54
+
55
+ End With
56
+
57
+ Else
58
+
59
+ Debug.Print q & ":" & ActiveSheet.Shapes(btn.Name).TopLeftCell.Row
60
+
61
+ ActiveSheet.Shapes(btn.Name).Select
62
+
63
+ With Selection
64
+
65
+ .OnAction = "上に行移動"
66
+
67
+ .Font.ColorIndex = 56
68
+
69
+ End With
70
+
71
+ End If
72
+
73
+ Case "▼"
74
+
75
+ r = btn.TopLeftCell.Row
76
+
77
+ If r + 4 = ActiveSheet.Range("a8:a" & Cells(Rows.Count, 1).End(xlUp).Row).Count + 7 Then
78
+
79
+ ActiveSheet.Shapes(btn.Name).Select
80
+
81
+ Debug.Print "無効ボタンアクション▼ r + 4 =" & r & " // " & ActiveSheet.Range("a8:a" & Cells(Rows.Count, 1).End(xlUp).Row).Count + 7
82
+
83
+ ActiveSheet.Shapes(btn.Name).OnAction = "無効ボタンアクション"
84
+
85
+ With Selection
86
+
87
+ .OnAction = "無効ボタンアクション"
88
+
89
+ .Font.ColorIndex = 15
90
+
91
+ End With
92
+
93
+ Else
94
+
95
+ Debug.Print r + 4 & ":" & ActiveSheet.Range("A8:A" & Cells(Rows.Count, 1).End(xlUp).Row).Count + 7
96
+
97
+ ActiveSheet.Shapes(btn.Name).Select
98
+
99
+ With Selection
100
+
101
+ .OnAction = "下に行移動"
102
+
103
+ .Font.ColorIndex = 56
104
+
105
+ End With
106
+
107
+ End If
108
+
109
+
110
+
111
+ End Select
112
+
113
+ Next
114
+
115
+
116
+
117
+ Worksheets("年間集計_出勤簿").Protect UserInterfaceOnly:=True
118
+
119
+ Worksheets("年間集計_出勤簿").Range("C3:D3").Locked = False
120
+
121
+
122
+
123
+ ActiveSheet.Range("C3").Select
124
+
125
+ Application.ScreenUpdating = True
126
+
127
+
128
+
129
+ End Sub
130
+
131
+ ```
8
132
 
9
133
  カウンタ変数をiから他の文字に変えると順番に全部ループにかかりますが、一旦ファイル保存した後開いて再検証すると再発します。
10
134