Private Sub scrMain_Change()
Dim v As Long
v = scrMain.Value
'...
'...
'...
Dim c As Long
For c = 1 To 4
Controls("chk" & c).Value = Range("D" & v).Offset(, c).Value = True '[1]
Controls("chk" & c).Value = Range("D" & v).Offset(, c).Value '[2]
Next
'...
End Sub
受講生さんの投稿
(投稿ID: 3065)
新規登録の場合も、チェックボックスはnullにはなりませんでした。
これもバージョンの違いなのでしょうか?当方は2016を使用しています。
小川慶一さんのコメント
(コメントID: 4517)
いつも、細かいご指摘ありがとうございます。
26:30くらいの件ですね。
これはエクセルのバージョンの問題ではなく、ソースの側での書き方の違いから生じています。
当初から提供されているフォームの、イベントプロシージャ scrMain_Change では、以下の[1]のように書かれています。
この動画内での実装は[2]に近い書き方をしています。
[1] では、後半の Range("D" & v).Offset(, c).Value = True は評価式で、その演算結果が true/false のどちらかとして、 Controls("chk" & c).Value に渡されます。
故に、 Range("D" & v).Offset(, c).Value が ブランクのとき、true でないので false が渡されます。
[2] では、 Range("D" & v).Offset(, c).Value の値がそのまま Controls("chk" & c).Value に渡されます。
故に、 Range("D" & v).Offset(, c).Value が ブランクのとき、true でもfalseでもなく、ブランクが渡されます。ブランクはnullと解釈されます。
ちょうどよい機会なので、[1],[2]の違いを、当初から提供されているフォームを改変して確かめてみてください。
> お世話になっております。
> 新規登録の場合も、チェックボックスはnullにはなりませんでした。
> これもバージョンの違いなのでしょうか?当方は2016を使用しています。