Invoke Code内のプロシージャについて

Invoke Code内で、SubやClass、Functionを使用すると、以下のようなエラーが必ず出ます。

①ステートメントをメソッド本体の内部に表示することはできません。本体の終了と見なします。
②’End Sub’の前には、対応する’Sub’を指定しなければなりません。

①は、Fuction~と書いた行に出て、
②は一番最後の次の行(200行までしかコードが書かれていないなら、201行)を指して出ます。
また、②はSubを使用していなくても出ます。

エラーを回避する方法はありますでしょうか?

エラーが再現するシンプルなコードにして提示していただくと、解決早いと思います。

簡単なコードを記述します。
以下のコードだと、ライン7に①、ライン12に②のエラーが出ています。

1 Dim first As Date
2 Dim year As Integer
3 Dim month As Integer
4
5 first = firstDay(year, month)
6
7 Function firstDay(intY As Integer, intM As Integer) As Date
8 Dim day As Date
9 day = New Datetime(intY, intM, 1)
10 Return day
11 End Function

@Rea12 さん
こんにちは このエラーを回避するのは無理と思います。
invoke code は実際関数を定義しました。
関数の中で新しい関数を定義するのは不可能と思います。
ご参照まで

なるほど。Invoke Code 自体が関数だから、不可能なのですね…。
でしたら、invoke codeの中で他のinvoke codeを呼び出すことは可能なのでしょうか?

やりかたは色々あるかもですが、こんな方法もあります。

Dim firstDay As Func(Of Integer, Integer, Date) = _
  Function (intY As Integer, intM As Integer) As Date
    Dim day As Date
    day = New Datetime(intY, intM, 1)
    Return day
  End Function

' Dim year As Integer ' Invoke Codeの引数でテストしました
' Dim month As Integer
' Dim first As Date
first = firstDay(year, month)

ちなみに、Subを定義する場合は Func、Functionを、Action、Subにするとできます(たぶん)。

2 Likes

@Legacy32 さん

提案していただいたコーディング方法で試したところ、エラーが消え、処理も正常に行われました!
ありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.