[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『定数式が必要です』(めんとす)
標準モジュールの先頭に Option Explicit Public Const csv_path As String = ThisWorkbook.Path
.Pathの部分定数式が必要です。 とエラーしますが、どう言う意味でしょうか)
>Public Const csv_path As String = ThisWorkbook.Path ^^^^^^^^^^^^^^^^^ ↑ これじゃぁ定数にならない、実行コード?なので。
↓使った事が無いけど、これはありみたい。 Const ab As Long = 5 Const st As Long = ab + 10
Sub aaaaa() MsgBox st End Sub BJ
定数は最初から決まっている値で、 ThisWorkbook.Path は、その都度変わるプロパティなので定数として入れられません。 Public変数に割り当てるのでしたら、標準モジュールならAuto_Openプロシージャで 値をセットするとかで対応されてはどうでしょう?
Option Explicit Public csv_path As String
Private Sub Auto_Open() csv_path = ThisWorkbook.Path End Sub
(momo)
理由がわかりました、ありがとうございます。 Public Constで定義すると、他のマクロで構文エラーとか起こしても 内容は消えませんが、 Private Sub Auto_Open() csv_path = ThisWorkbook.Path とすると、publicで宣言しても消えてしまいます。 絶対に消えては困るものは、それぞれのプログラム開始時に再定義 csv_path = ThisWorkbook.Pathを実行する必要がある。 と言う事で良いでしょうか? (めんとす)
>絶対に消えては困るものは、それぞれのプログラム開始時に再定義 >csv_path = ThisWorkbook.Pathを実行する必要がある。 意味が良く解りませんが、PCの違い、媒体の違い、OSの違いで、 パスは変わったりする時があるので、ファイルのパスを定数で宣言しようと、 思う所がちょっと・・・・。 と、思ったりします。 BJ
消えて困るものは非表示の作業シートを使ってセルに書き込んでおいたりします。 Publicで定義したからと言って、ずっと消えないとは限りません。 色々なタイミングで変数が開放されてしまう事があるのでおすすめしません。 BJさんが仰るように、自ブックのパス程度でしたら変数にしなくても良いのでは? と思います。 (momo)
>絶対に消えては困るものは、それぞれのプログラム開始時に再定義 >csv_path = ThisWorkbook.Pathを実行する必要がある。
ThisWorkbook.Pathなら、その都度ThisWorkbook.Pathと記述すれば良いではないか とも思いますが、 大きいプログラムになると、この記述さえも面倒になることがありますね!! 記述が面倒なら、
Function mypath() As String mypath = ThisWorkbook.Path End Function
こんな関数を作っておいて運用は
sub test() msgbox mypath end sub
でもよさそうですが・・・、そうではなく、
ThisWorkbook.Pathは、一例にすぎず、実際は、取得に結構時間のかかる データなので、どこかに保存しておきたいというなら、安全は、セルに保存することです。 他には DocumentPropertyを使う方法も考えられます。
一例ですが、
Sub test1() Call mk_cdp("mph", msoPropertyTypeString, ThisWorkbook.Path) MsgBox get_cdp("mph").Value End Sub 7======================================================================= Function mk_cdp(pnm As Variant, mytype As MsoDocProperties, myvalue) On Error Resume Next ThisWorkbook.CustomDocumentProperties.Add pnm, False, mytype, myvalue mk_cdp = Err.Number On Error GoTo 0 End Function '====================================================================== Function get_cdp(pnm As String) As DocumentProperty Dim cp As DocumentProperty On Error Resume Next Set get_cdp = Nothing Set get_cdp = ThisWorkbook.CustomDocumentProperties(pnm) On Error GoTo 0 End Function
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.