回答編集履歴

1

tuiki

2018/01/12 01:58

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -55,3 +55,149 @@
55
55
 
56
56
 
57
57
  追記をお待ちしております。
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ ---
66
+
67
+ 追記・コメントを受けて
68
+
69
+ ---
70
+
71
+ 確認メッセージしか表示されていないということは、問題のあるコードは
72
+
73
+ ```
74
+
75
+ Set Sheet1 = ActiveSheet
76
+
77
+
78
+
79
+ On Error Resume Next
80
+
81
+ Set activeCell = Selection
82
+
83
+ On Error GoTo 0
84
+
85
+
86
+
87
+ If Range("A1:D4") Is Nothing Then
88
+
89
+ MsgBox "セルが選択されていないため処理を継続できません", vbExclamation + vbOKOnly, "処理失敗"
90
+
91
+ Exit Sub
92
+
93
+ End If
94
+
95
+
96
+
97
+ csvBookPath = Application.GetOpenFilename(FileFilter:="CSV ファイル, *.csv?")
98
+
99
+ ```
100
+
101
+ この範囲に絞られますね。
102
+
103
+
104
+
105
+ 変数名の問題?
106
+
107
+ ---
108
+
109
+ このうち最初の2つの処理`Set Sheet1 = ActiveSheet`と`Set activeCell = Selection`についてですが、`Sheet1`や`activeCell`という変数名はどちらもExcelVBAでは予約語です。
110
+
111
+
112
+
113
+ こちらの環境では問題なく動作しているので何とも言えませんが、コードを読む際に誤解を招く可能性もあり、変数名としてはあまりふさわしくありません。
114
+
115
+ まずは変数名を変更してみてはどうでしょうか。(宣言や利用箇所を全て変更する必要があります)
116
+
117
+
118
+
119
+ Range("A1:D4") Is Nothing?
120
+
121
+ ---
122
+
123
+ 3つめのブロック`If Range("A1:D4") Is Nothing Then`ですが、Range範囲を直接指定しているのにNothingになる状況は考えにくく、あまり意味のない判定になっていると思います。
124
+
125
+ 過去の質問で提供されたコードでは`If activeCell Is Nothing Then`となっていたので、デバッグ目的か何かで変更されたままになっているのだと思います。
126
+
127
+ おそらくボタン自体がフォーカスされている状態でマクロを実行した場合に、Selectionからセル範囲を取れなくなるのを回避しようとしたのではないでしょうか。
128
+
129
+
130
+
131
+ 最後に選択されていたセルを取りたいのであれば、`Selection`ではなく予約語の方の`ActiveCell`で取得できます。
132
+
133
+
134
+
135
+ ```
136
+
137
+ 'Dim Sheet1 As Worksheet '廃止
138
+
139
+ 'Dim activeCell As Range '廃止
140
+
141
+ Dim shtPaste As Worksheet
142
+
143
+ Dim rngPaste As Range
144
+
145
+
146
+
147
+ '(中略)
148
+
149
+
150
+
151
+ 'Set Sheet1 = ActiveSheet
152
+
153
+ Set shtPaste = ActiveSheet
154
+
155
+
156
+
157
+ 'On Error Resume Next
158
+
159
+ 'Set activeCell = Selection
160
+
161
+ 'On Error GoTo 0
162
+
163
+ Set rngPaste = ActiveCell
164
+
165
+
166
+
167
+ 'If activeCell Is Nothing Then
168
+
169
+ If rngPaste Is Nothing Then
170
+
171
+ MsgBox "セルが選択されていないため処理を継続できません", vbExclamation + vbOKOnly, "処理失敗"
172
+
173
+ Exit Sub
174
+
175
+ End If
176
+
177
+
178
+
179
+ '(中略)
180
+
181
+
182
+
183
+ 'Sheet1.Unprotect
184
+
185
+ shtPaste.Unprotect
186
+
187
+
188
+
189
+ With csvSheet.UsedRange
190
+
191
+ 'csvSheet.Range(csvSheet.Cells(IIf(NEED_HEADER, 1, 2), 1), .Cells(.Cells.Count)).Copy activeCell
192
+
193
+ csvSheet.Range(csvSheet.Cells(IIf(NEED_HEADER, 1, 2), 1), .Cells(.Cells.Count)).Copy rngPaste
194
+
195
+ End With
196
+
197
+
198
+
199
+ ```
200
+
201
+
202
+
203
+ 根本のエラー原因にはまだたどり着いていませんが、ひとまずお試しください。