プロが教えるわが家の防犯対策術!

ファイルパスの汎用性について教えてください!
一覧表をつくりそこをダブルクリックするとハイパーリンクを設定するマクロを組んだのですが、ファイルパスに汎用性がなく困っています。以下のコードはどう直せばいいですか?
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
Dim h As Range
Dim path As String
Dim s As String

For Each h In Range("M4:V4")
If h.Value <> "" Then
path = "C:\Documents and Settings\marsh\デスクトップ\特殊\1111\02\01/チェックシート\"
s = Dir(path & h & "*.*")
ActiveSheet.Hyperlinks.Add Anchor:=h, address:=path & s
End If
Next h
End Sub
上記コードでpathの部分を可変にしたいんです。例えばpath = "C:\Documents and Settings\marsh\デスクトップ\特殊\・・・以降をこのコードが書いてあるエクセルのA1から拾ってくるとかしたいんです。できますでしょうか?よろしくご教授ください。

A 回答 (4件)

何をしたいのか良く分からんが



?thisworkbook.path

とか

?environ("userprofile")

をイミディエイトウィンドウで実行してみてくださいまし。
    • good
    • 0

回答2、myRangeです。



セル範囲にミスあり。。。

>If Intersect(target, Range(●"M4:O4"●))

Range("M4:V4")

以上です。
    • good
    • 0

別なブック、別なシートで使う場合に、


パスが違っても使えるようにというのは分かりますが、
その時、一覧表の範囲(M4:V4)は同じなんでしょうか?
範囲が違えばそれも汎用的でないと片手落ちになりますよね。

と、それは置いといて、パスだけA1の内容を使う場合。
'------------------------------------------
  Path = Range("A1").Value
'-------------------------------------------

それから、ダブルクリックしたセルが
(1)範囲(M4:V4)以外の時はジャンプ
(2)範囲のときは、ダブルクリック通常処理(セル編集)のキャンセル
の処理も必要でしょうね。

それには、For Each の前に次の2行を追加
'---------------------------------------------------
If Intersect(target, Range("M4:O4")) Is Nothing Then Exit Sub 
 Cancel = True
'---------------------------------------------------

更にいえば、File Not Foundの処理も。。。
恐らく、 s = Dir(path & h & "*.*")
これでやろうとしているのでしょうが。。

"*.*"の部分がちょと気になる。。(^^;;;


以上です。
 
    • good
    • 0

>でpathの部分を可変にしたいんです


の意味が良く説明されて無いと思うが。
独断でやると
Option Explicit
Sub test01()
Dim h As Range
Dim path As String
Dim s As String
Dim i As Integer
i = 1
For Each h In Range("B1:B3")
If h.Value = "" Then
path = "C:\Documents and Settings\XXX\My Documents"
's = Dir(path & h & "*.*")
ActiveSheet.Hyperlinks.Add Anchor:=h, Address:=path & "\" & Range("A" & i)
i = i + 1
End If
Next h
End Sub
ーー
内容からシートのイベントにする必要を感じないので、標準モジュールに入れて実行するようにした。
ハイパーリンクはB1:B3のセルに対し設定している。
セルのA1:A3にRange("B1:B3")に対応したブック名を入れた。
例A1:A3
01化X.xls
01化Y.xls
01化Z.xls
ーー
私の場合は上記の名前のブックが
"C:\Documents and Settings\XXX\My Documents"
に存在する。
ーーー
実行するとB1 セルに
C:\Documents and Settings\XXX\My Documents\01化X.xls
がブルーの文字で入り、クリックすると01化X.xlsガ開く。
B2,B3も同様に01化Y.xls 、01化Z.xlsの分がセットされた。
これでは見当はずれですか。

この回答への補足

すみません。説明不足で・・・。プログラムを流用したいということです。このプログラムをコピーして作りは同じだがファイル名が違うデータに貼り付けて使いたいんです。そうするにはファイルパスが固定だとハイパーリンクの参照先が変わらないので、コピペしても自動で使えるようなプログラムにしたいんです!

補足日時:2010/10/29 15:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!