[[20190418100825]] 『vba/ thisworkbook などの記述を1回で済ませる方』(あきお) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『vba/ thisworkbook などの記述を1回で済ませる方法』(あきお)

お手柔らかによろしくおねがいします。

今、いろいろなシートに
?@
sub test()

Dim FilePath As String
FilePath = ThisWorkbook.Path

End sub()

みたいな形でプロシージャ毎に宣言しています。

見た目長くなるし、スマートではないなぁと思うのですが
?A
public FilePath As String
sub test()

FilePath = ThisWorkbook.Path

End sub()

とするところまではなんとなく
こうすればプロシージャが違うところでも宣言不要なのはわかります。
これを
?B
public FilePath As String
FilePath = ThisWorkbook.Path
sub test()

End sub()

とすると、「ThisWorkbook」が「プロシージャの外では無効です」とエラーを吐いてしまいます。

ファイルの場所が移動しても使えるようにしたいので「ThisWorkbook」記述は外したくないのですが、これは?@か?Aのパターンで記述するしかないのでしょうか?
それとも、なんらか別の方法で「ThisWorkbook」を一度の記述で取得し、他のプロシージャでも使えるようにできるのでしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


標準モジュールに

 Public FilePath As String 

と宣言して、ThisWorkbookモジュールに

 Private Sub Workbook_Open()
     FilePath = Me.Path 
 End Sub

と記述すればどうでしょうか。
(hatena) 2019/04/18(木) 10:26


ありがとうございます。
やってみたところ、思ったことができました。

他に、Setの宣言も同じようにしたいのです。
例えば、今まではプロシージャ毎に
sub test()
Dim wb as Workbook
set wb = workbooks(ThisWorkbook.Name)
End sub
この場合もプロシージャ毎ではなく、1度の記述で済む方法はあるのでしょうか?
(あきお) 2019/04/18(木) 10:46


オブジェクトでも同じことです。

 標準モジュール
Public wb As Workbook
Public FilePath As String 

 ThisWorkbookモジュール
Private Sub Workbook_Open()
    Set wb = Me
    FilePath = Me.Path 
End Sub

ただ、ThisWorkbook が wb と短く記述できますが、他人が見たとき、コードは読みづらくなりますね。
自分一人しか使わないものならそれでもいいですが、社内で共有するものなら、引継ぎなども考えると避けたいですね。長くても意味がだれにでもすぐにわかるものの方がベターだと思います。

ちなみに、

 set wb = workbooks(ThisWorkbook.Name) 

は、無意味に冗長なコードですね。

 set wb = ThisWorkbook

これと同じことになたますので。

(hatena) 2019/04/18(木) 11:26


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.