[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ハイパーリンクにユーザーフォルダを指定したい』(スフレ)
お世話になります。
VBAでセルに「開く」という文字を入力してハイパーリンクを設定しています。
ハイパーリンクにはフォルダを指定しているのでクリックするとフォルダがエクスプローラで開くようになっています。
このハイパーリンクでユーザーフォルダを指定するにはどのようにパスを記述したらよいのでしょうか?
私のpcのユーザーパスはc:\user\account1\だとしても他人のユーザーパスはc:\user\account2\のように違います。
%useraccount%のような特殊フォルダをハイパーリンクのパスに記述する方法はないでしょうか?
一度ハイパーリンクを仕込んだらそのエクセルファイルをどのPCで使ってもユーザーフォルダが開くようにしたいです。
どうぞよろしくお願いします。
< 使用 Excel:Excel2007、使用 OS:Windows8 >
参考まで
Sub Sample() Dim p As String
p = Split(Environ(39), "=")(1) 'USERPROFILE
MsgBox p
p = CreateObject("WScript.Shell").SpecialFolders("desktop") MsgBox p
'SpecialFoldersの引数は以下
'AllUsersDesktop 'AllUsersStartMenu 'AllUsersPrograms 'AllUsersStartup 'Desktop 'Favorites 'Fonts 'MyDocuments 'NetHood 'PrintHood 'Programs 'Recent 'SendTo 'StartMenu 'Startup 'Templates
p = CreateObject("Scripting.FileSystemObject").GetSpecialFolder(0) MsgBox p
'GetSpecialFolderの引数は以下。参照設定すれば定数名も使用可能(と思う)
'0 (定数名は SystemFolder) '1 (定数名は WindowsFolder) '2 (定数名は TemporaryFolder)
MsgBox Application.Path
' そのほかに
' Application.AltStartupPath
' Application.NetworkTemplatesPath
' Application.Path
' Application.StartupPath
' Application.TemplatesPath
' Application.UserLibraryPath
' Application.AltStartupPath
' Application.LibraryPath
End Sub
(β) 2015/02/06(金) 13:42
おまけです。
Sub おまけ()
MsgBox CreateObject("WScript.Network").UserName 'Windows Login User
'おまけのおまけ
MsgBox ThisWorkbook.UserStatus(1, 1) 'Office User
End Sub
(β) 2015/02/06(金) 14:00
↑(β) 2015/02/06(金) 13:42 で記述ミスがあります(汗)
'0 (定数名は SystemFolder) '1 (定数名は WindowsFolder)
こう書きましたが正しくは
'1 (定数名は SystemFolder) '0 (定数名は WindowsFolder)
(β) 2015/02/06(金) 14:17
それで質問にも書いていますが、ハイパーリンクに%USERACCOUNT%のような環境変数のような
感じでユーザーフォルダを書き込むことはできないでしょうか?
私のPCでこのVBAを実行すると私のユーザーフォルダのパスがハイパーリンクに設定されてしまい、他のPCでxlsxを開いたときにリンクパスが合わなくなってしまいます。
どのPCで開いてもそれぞれのPCでロングインしたアカウントのユーザーフォルダが開くようにしたいのです。
PCにxlsxを移動した後にVBAを実行すればいいのですが、先方に渡すのはハイパーリンクが仕込まれたxlsxファイルのみなのです。
お手数ですがおわかりでしたらご回答頂けると助かりますm(_ _)m
どうぞよろしくお願い致します。
(スフレ) 2015/02/06(金) 14:19
まず、p = Split(Environ(39), "=")(1) 'USERPROFILE と書きましたが p = Environ("USERPROFILE") でもOKです。
で、質問の件、現在のコードの中で、パスをハードコーディングしている場所がありますよね。 そのハードコード部分をEnvironから取得した変数を文字連結させるコードにすればいいんですが? (それが、まさしく、環境変数ですから)
コードがアップされていないので、具体的に、このコードのここを、このように記述 というアドバイスができません。
(β) 2015/02/06(金) 14:37
「先方に渡すのはハイパーリンクが仕込まれたxlsxファイルのみなのです」
ここを読み飛ばしていました。 なるほど・・・・・
ちょっと調べてみます。どなたか、識者さんから先に回答があればいいですね。
(β) 2015/02/06(金) 14:41
とりあえず、シートのどこかに =CELL("filename",A1) と打ち込みますと c:\user\account1\・・・・ と、ブックフルパスが取得できますね。 あとは識者さんにバトンタッチせざるを得ないんですが(当方、エクセル音痴故)このセルの値の先頭の c:\user\account1\ の部分を関数で取り出せば、お望みの環境変数ということになりますね。
(β) 2015/02/06(金) 14:51
とりあえず、コテコテの数式ですが、上記のCELL関数があるセルが ●だとすれば =LEFT(●,FIND("\",●,FIND("\",●,FIND("\",●)+1)+1)) これで、c:\user\account1\ が取り出せますね。
なので、ハイパーリンクの、当該部分を、この数式にしておかれたらいけますよね。 数式そのものをもっとスマートなものにするためには識者さんたちからの回答をお待ちください。
(β) 2015/02/06(金) 15:03
とりあえず、シートのどこかに =CELL("filename",A1) と打ち込みますと c:\user\account1\・・・・ と、ブックフルパスが取得できますね。
これはブックがc:\user\account1\以下にある場合ですよね。
ブックがどこにあるか関係なくユーザーフォルダを取得したいのですがどうもできないような気がしてきました・・・。
もし他の方でおわかりになられる方がいましたらどうぞよろしくお願い致します。
(スフレ) 2015/02/06(金) 15:15
CELL関数だと、ネットワークドライブとかでは無理っすよね?
ということは、送ったブックを決められたところに保存してもらわなくてはいけない なら相対リンクだから、開いてほしいフォルダの下の階層に入れてもらえばいいような?? やったことないからわからないけど!
興味本位ですが、何がしたいのですか?
(稲葉) 2015/02/06(金) 15:23
はい、CELL関数では取れませんでした・・・。
稲葉さん
「何がしたいのですか?」についてお答えします。
c:\Users\[アカウント名]
このフォルダの下にデータがあります。
私のPCにも、作業者Aさん、Bさんのアカウントフォルダ以下にもデータがあります。
そのデータにアクセスするためにハイパーリンクを使いたいのですが、当然ですが皆さんのアカウント名が違うのでどうすればいいのかお聞きしました。
※関係ないですがこのサイト、返答しても返答が消えるのですね・・・。4回返答していますが2回分消えています・・・。
(スフレ) 2015/02/06(金) 15:33
消えたことないよ。 プレビューだけ押して、投稿押し忘れてるとか? あと誰かが編集しているときにやると、競合が起きて投稿できなくなるから、入力したコメントを 自分でコピペして残しておくくらい。 いずれにしろ、それを確かめずにそういうのはどうかと思います。 実際そういうことをしていないのに消えているのでしたら、別の問題ですので、ブラウザの種類とバージョン を記載してもらえば、校長先生が何んとかしてくれるかも!!
本題ですが、 http://answers.microsoft.com/ja-jp/office/forum/office_2007-outlook/outlook%E3%81%A7%E7%92%B0%E5%A2%83%E5%A4%89/f44d5a04-1898-4851-a426-8909e7f397c7 Outlookのやりとりですが、やはりハイパーリンク等での環境変数へのアクセスはセキュリティ上やっぱり よしたほうがいいみたいですね。
コマンドプロンプトに/cオプションで・・・とも試しましたが、やっぱりだめでした。
そこまでやるのに、どうしてマクロ有効ブックじゃダメなんでしょう?
(稲葉) 2015/02/06(金) 15:55
で、本題の件は了解しました。
マクロブックでもいいんですが、取引先の人が素人さんで、渡したブックのシートの一部分だけを他のブックのシートにコピって使っているようなので新しいブックのほうにはVBAが適用されないので数式かエクセル関数だけでできないかなと思って質問しました。
とりあえず他の方法を考えます。
どうもありがとうございました。
(スフレ) 2015/02/06(金) 16:05
>マクロブックでもいいんですが、
でしたら、Openイベントで初回だけ走るようなプログラムにして、それで ハイパーリンクを書換→保存、してしまえばいいのではないですか(アイデアだけですけど、、、)
(半平太) 2015/02/06(金) 16:39
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim cFile As String
If Target.Address <> "$A$1" Then Exit Sub
cFile = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\test.xlsx" If Dir(cFile) <> "" Then Workbooks.Open cFile Cancel = True End If End Sub (???) 2015/02/06(金) 16:40
マクロブックでいいなら、フォローハイパーリンクイベントで、表示文字が「開く」だけ エクスプローラー開くやりかたとかどうですか?
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) If Target.Name = "開く" Then CreateObject("Shell.Application").explore Environ("USERPROFILE") End If End Sub
(稲葉) 2015/02/06(金) 17:11
Function USER_NAME() USER_NAME = Environ("USERNAME") End Function
というユーザー定義関数を作ってワークシート上に =HYPERLINK("C:\USERS\"&user_name()) としてはどうだろうか?
(ねむねむ) 2015/02/06(金) 17:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.