[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.