【VBA】Goto文とFor Each分の組み合わせによる配列のロック

ハマりましたよ。

For文の前に配列にSplitで値を代入して、その配列をなめるかたちでFor Eachを記述していましたが、このステップを2回目とおると
・「この配列は固定されているか、または一時的にロックされています。
というエラーがでてきて値が代入できませんでした。

一日悩んでしまいましたが、原因はGoto文でした。

配列の値をもとにFor文が回るのですが、そのFor文をExit Forではなく、Goto文で抜けると、配列がロックされてしまい上書きできないというのがVBAの仕様のようです。

VBAの場合、For文の途中で次に行くという命令がないので、For文の最後にラベルを書いて、Goto文で次に行くコードになるかと思いますが、そのラベルがNextの後ろにあったのが、Goto文で抜けてしまう要因になっていたのですが、Goto文を許すなら、ロックはしてくれなくていいよ、という感じですね。

また、Exit Forをしたかったのか、ループの次に行きたかったのか忘れたので検証するきっかけになりましたけどね。

いやはや。

この記事が気に入ったらサポートをしてみませんか?