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

回答編集履歴

2

おまけ追記

2019/11/18 01:32

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -49,4 +49,36 @@
49
49
  End Function
50
50
  ```
51
51
 
52
- せっかく Function にしているので、コピーに成功したかどうかを返す仕様にしてみました。
52
+ せっかく Function にしているので、コピーに成功したかどうかを返す仕様にしてみました。
53
+
54
+ おまけ
55
+ ---
56
+ 質問のコードでは`End`で関数を終了させようとしてますが、通常は、`Exit Function`で関数から抜けるようにします。
57
+ ちがいは、`End` は実行中のマクロを完全に終了させますが、`Exit Function`は関数から抜けた後、次のコードがあればそれは実行されます。違いを意識して使い分けるようにすべきでしょう。
58
+
59
+ 参考コード
60
+ ```vba
61
+ Sub hoge()
62
+ Debug.Print "hoge"
63
+ Exit Sub
64
+ End Sub
65
+
66
+ Sub fuga()
67
+ Debug.Print "fuga"
68
+ End
69
+ End Sub
70
+
71
+ Sub hogefuga()
72
+ Call hoge
73
+ Debug.Print "hageの次"
74
+
75
+ Call fuga
76
+ Debug.Print "fugaの次"
77
+ End Sub
78
+ ```
79
+ イミディエイトウィンドウ
80
+ ```
81
+ hoge
82
+ hageの次
83
+ fuga
84
+ ```

1

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

2019/11/18 01:32

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -15,4 +15,38 @@
15
15
  If input_rg Is Nothing Or output_rg Is Nothing Then
16
16
  Exit Function
17
17
  End If
18
- ```
18
+ ```
19
+
20
+ キャンセルに対応するコード
21
+ ---
22
+ ```
23
+ Function コピー関数() As Boolean
24
+ Dim input_rg As Range
25
+ Dim output_rg As Range
26
+
27
+ コピー関数 = False
28
+ On Error Resume Next
29
+ Set input_rg = Application.InputBox("コピーするセルを選択してください", _
30
+ Title:="入力フォーム", Type:=8)
31
+ If Err.Number <> 0 Then
32
+ MsgBox "キャンセルされました。"
33
+ Exit Function
34
+ End If
35
+ Set output_rg = Application.InputBox("貼り付け先を選択してください", _
36
+ Title:="出力フォーム", Type:=8)
37
+ If Err.Number <> 0 Then
38
+ MsgBox "キャンセルされました。"
39
+ Exit Function
40
+ End If
41
+
42
+ If input_rg Is Nothing Or output_rg Is Nothing Then
43
+ Exit Function
44
+ End If
45
+ input_rg.Copy Destination:=output_rg
46
+ If Err.Number = 0 Then
47
+ コピー関数 = True
48
+ End If
49
+ End Function
50
+ ```
51
+
52
+ せっかく Function にしているので、コピーに成功したかどうかを返す仕様にしてみました。