VBAでは、メソッドのオーバーロードができなかった

やってみた。

準備

標準モジュールのコード

Private Sub makeUserSick()                       '……(1)
  MsgBox "     _________" & vbCrLf & _
         " /          \ " & vbCrLf & _
         "/ /・\  /・\    \" & vbCrLf & _
         "|   ̄ ̄    ̄     | ち~んw" & vbCrLf & _
         "|    (_人_)    |" & vbCrLf & _
         "|     \     |          |" & vbCrLf & _
         "\      \_|     /"
End Sub

Private Sub makeUserSick(ByVal msg As String)               '……(2)
  MsgBox msg & vbCrLf & _
         "     _________" & vbCrLf & _
         " /          \ " & vbCrLf & _
         "/ /・\  /・\    \" & vbCrLf & _
         "|   ̄ ̄    ̄     | ち~んw" & vbCrLf & _
         "|    (_人_)    |" & vbCrLf & _
         "|     \     |          |" & vbCrLf & _
         "\      \_|     /"
End Sub

説明

  • (1)の「makeUserSick」プロシージャは、引数なし。
  • (2)の「makeUserSick」プロシージャは、引数「msg」がある。

同じプロシージャ名で、違うのは引数の構成だけなので、これができるんなら、メソッドのオーバーロードが可能、ということになる。

実行

では、実行してみよう。

実行用のコード

Sub test()
  Call makeUserSick                     '……(1)
  Call makeUserSick("アホwww")       '……(2)
End Sub

コードの説明

  • (1)は、引数なしで呼び出し。
  • (2)は、引数として文字列「アホwww」を渡して呼び出し。

果たして、実行結果は……???

実行結果

f:id:akashi_keirin:20170318072916j:plain

実行以前にコンパイルエラーwww

結論

VBAでは、メソッドのオーバーロードはできません。

え? 当たり前、ですか?

そら知らなんだw サーセンwww

@akashi_keirin on Twitter