回答編集履歴

2

おまけ追記

2019/11/18 01:32

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -101,3 +101,67 @@
101
101
 
102
102
 
103
103
  せっかく Function にしているので、コピーに成功したかどうかを返す仕様にしてみました。
104
+
105
+
106
+
107
+ おまけ
108
+
109
+ ---
110
+
111
+ 質問のコードでは`End`で関数を終了させようとしてますが、通常は、`Exit Function`で関数から抜けるようにします。
112
+
113
+ ちがいは、`End` は実行中のマクロを完全に終了させますが、`Exit Function`は関数から抜けた後、次のコードがあればそれは実行されます。違いを意識して使い分けるようにすべきでしょう。
114
+
115
+
116
+
117
+ 参考コード
118
+
119
+ ```vba
120
+
121
+ Sub hoge()
122
+
123
+ Debug.Print "hoge"
124
+
125
+ Exit Sub
126
+
127
+ End Sub
128
+
129
+
130
+
131
+ Sub fuga()
132
+
133
+ Debug.Print "fuga"
134
+
135
+ End
136
+
137
+ End Sub
138
+
139
+
140
+
141
+ Sub hogefuga()
142
+
143
+ Call hoge
144
+
145
+ Debug.Print "hageの次"
146
+
147
+
148
+
149
+ Call fuga
150
+
151
+ Debug.Print "fugaの次"
152
+
153
+ End Sub
154
+
155
+ ```
156
+
157
+ イミディエイトウィンドウ
158
+
159
+ ```
160
+
161
+ hoge
162
+
163
+ hageの次
164
+
165
+ fuga
166
+
167
+ ```

1

キャンセルに対応するコードの追加

2019/11/18 01:32

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -33,3 +33,71 @@
33
33
  End If
34
34
 
35
35
  ```
36
+
37
+
38
+
39
+ キャンセルに対応するコード
40
+
41
+ ---
42
+
43
+ ```
44
+
45
+ Function コピー関数() As Boolean
46
+
47
+ Dim input_rg As Range
48
+
49
+ Dim output_rg As Range
50
+
51
+
52
+
53
+ コピー関数 = False
54
+
55
+ On Error Resume Next
56
+
57
+ Set input_rg = Application.InputBox("コピーするセルを選択してください", _
58
+
59
+ Title:="入力フォーム", Type:=8)
60
+
61
+ If Err.Number <> 0 Then
62
+
63
+ MsgBox "キャンセルされました。"
64
+
65
+ Exit Function
66
+
67
+ End If
68
+
69
+ Set output_rg = Application.InputBox("貼り付け先を選択してください", _
70
+
71
+ Title:="出力フォーム", Type:=8)
72
+
73
+ If Err.Number <> 0 Then
74
+
75
+ MsgBox "キャンセルされました。"
76
+
77
+ Exit Function
78
+
79
+ End If
80
+
81
+
82
+
83
+ If input_rg Is Nothing Or output_rg Is Nothing Then
84
+
85
+ Exit Function
86
+
87
+ End If
88
+
89
+ input_rg.Copy Destination:=output_rg
90
+
91
+ If Err.Number = 0 Then
92
+
93
+ コピー関数 = True
94
+
95
+ End If
96
+
97
+ End Function
98
+
99
+ ```
100
+
101
+
102
+
103
+ せっかく Function にしているので、コピーに成功したかどうかを返す仕様にしてみました。