目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
40 / 270 ←次へ | 前へ→

【248】Re:ちょっと気になる現象5 シートモジュールの変数
Excel  ichinose  - 09/11/4(水) 8:18 -

引用なし
パスワード
   >'==============================================================
>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のメンバに変数はないからエラーになるはずじゃあ
なかったっけ?

どっちの仕様が正しいのかなあ・・・。

これは、コンパイラーのバグなのでしょうか?
対処法があるから、よいけど一貫性がないなあ

966 hits

【247】ちょっと気になる現象5 シートモジュールの変数 ichinose 09/11/4(水) 7:54 Excel[未読]
【248】Re:ちょっと気になる現象5 シートモジュール... ichinose 09/11/4(水) 8:18 Excel[未読]

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
40 / 270 ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free