|
>'==============================================================
>Sub test2()
> Dim ws As Worksheet
> Set ws = Worksheets("sheet1")
> 'ws.変数 = "bbb"
> 'MsgBox ws.変数
>End Sub
Worksheetというクラスには、変数というメンバないので
コンパイルエラーが発生する。
又、Object型にすれば、メンバまでのチェックが出来ないの
コンパイルエラーにならない。
という道理はわかりますが、シートオブジェクトがカスタマイズ可能な仕様だと言うことは、念頭になかったのでしょうか?
そこでwsの変数の型をもっと詳細な型であるSheet1にすると、
Sub test4()
Dim ws As Sheet1
Set ws = Worksheets("sheet1")
ws.変数 = "ddd"
MsgBox ws.変数
End Sub
見事に作動し、これで道理も通ると納得したのですが・・・・。
似たようなことをThisworkbookでやってみると・・・・、
新規ブックにて
ThisWorkBookのモジュールに
Option Explicit
Public 変数 As String
とこれだけ
標準モジュール
'==============================================================
Option Explicit
'==================================
Sub test5()
Dim nm As String
nm = ThisWorkbook.Name
Workbooks(nm).変数 = "aaa"
MsgBox Workbooks(nm).変数
End Sub
'==================================
Sub test6()
Dim nm As String
Dim wb As Workbook
nm = ThisWorkbook.Name
Set wb = Workbooks(nm)
wb.変数 = "bbb"
MsgBox wb.変数
End Sub
'==================================
Sub test7()
Dim nm As String
Dim wb As Object
nm = ThisWorkbook.Name
Set wb = Workbooks(nm)
wb.変数 = "bbb"
MsgBox wb.変数
End Sub
'==================================
Sub test8()
Dim nm As String
Dim wb As ThisWorkbook
nm = ThisWorkbook.Name
Set wb = Workbooks(nm)
wb.変数 = "bbb"
MsgBox wb.変数
End Sub
今度は、test5〜test8まで全て正常にブックのプロパティを参照できてしまいます。
あれ、test6では、Workbookのメンバに変数はないからエラーになるはずじゃあ
なかったっけ?
どっちの仕様が正しいのかなあ・・・。
これは、コンパイラーのバグなのでしょうか?
対処法があるから、よいけど一貫性がないなあ
|
|