|    | 
     >'============================================================== 
>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のメンバに変数はないからエラーになるはずじゃあ 
なかったっけ? 
 
どっちの仕様が正しいのかなあ・・・。 
 
これは、コンパイラーのバグなのでしょうか? 
対処法があるから、よいけど一貫性がないなあ 
 
 | 
     
    
   |