- 締切済み
セルの値でのファイル名保管、ハイパーリンクの件
※4/22に質問しましたが、カテ(Office)も違うのか・・・ 全くアドバイス頂けなかったので、 再度投稿します。 いつもお世話になっています。 EXCELマクロの自動記録で、 毎回ローカルディスクの決められた場所(固定)に 作成・保管した見積書のEXCELファイルを、 複数のメンバーが共有する見積台帳を開いて、ボタンを押すことにより、 最新の見積書番号を取得して、見積書の各項目を、 見積台帳に転記するまでは出来ました。 このあと、最終行にセルが行った状態で、 その前の操作で別のセルから取得した値で、 決められた場所にそのファイル名(セルから取得)で保存し、 次に台帳の明細のファイル名のセルからハイパーリンクを付けたいのです。 ※最終行にカーソールを移動(値もコピー)は、 ここでやり方を見つけています。 どのようなVBAを記述すれば良いでしょか? 記録したマクロに追加するとか位の技術しかなく、 自動記録では右クリックの操作が出来ないようですので、 宜しくお願い致します。 ※EXCEL2000です。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
> WORK = ActiveCell > file$ = WORK > ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=file$ & ".xls", _ > TextToDisplay:=file$ ActiveCellはRangeオブジェクトを返すともいます RangeオブジェクトのデフォルトプロパティがValueだったと思います WORKがバリアント型なら セルに設定された数式の計算結果(日付なら Date型、数値ならDouble型など)が代入されます file$は文字型なので 取得したデータの既定の文字列表現になるでしょう 今回のように『対象が文字列だ』とはっきりしているなら別変数を用意するまでも無いと思います
- imogasi
- ベストアンサー率27% (4737/17069)
もう既回答で解決してるのかもしれません。そうそうあるケースではないので、私なりにやってみました。 ーー ブック名 りンクテスト.xls そのSheet1 のA1に C:\Documents and Settings\XXXX\My Documents\DSUM関数5.xls と文字列を入れています。 標準モジュールModule1に Sub trst01() x = Range("A1") n = ActiveWorkbook.Name MsgBox n '---- Workbooks.Open x n = ActiveWorkbook.Name MsgBox n Set sh = ActiveWorkbook.Sheets("Sheet2") sh.Hyperlinks.Add Anchor:=Range("A15"), _ Address:="C:\Documents and Settings\OTO\My Documents\リンクテスト.xls", _ TextToDisplay:="元のシート" 'Address:="C:\Documents and Settings\OTO\My Documents\[リンクテスト.xls]Sheet1!A1", _ 'Address:="リンクテスト.xls", _ '[リンクテスト.xls]のように[]で囲まないこと 'Addressには、ファイル名を指定する 'そのファイルのアクチブシート、アクチブセルに飛ぶ。 End Sub これで実行します。 実行前はDSUM関数5.xlsはまだ開いてないです。 ーー 実行後は DSUM関数5.xls の Sheet2 の A15セルに ハイパーリンクが設定され、そのA15をクリックすると りンクテスト.xlsに飛びました。 コードの注釈は私の失敗も入れて書いて見ました。 これで質問課題に役に立ちませんか。
- redfox63
- ベストアンサー率71% (1325/1856)
『管理台帳へ』か『管理台帳から』は大差ないでしょ ・・・ ハイパーリンクを設定する対象を変えればいいだけなのですから 台帳と個別ファイルが同じフォルダーにあるなら Sub MakeLink(sh as WorkSheet, rg as Range) sh.HyperLinks.add rg, rg.Value & ".xls", TextDisplay:= rg.value End Sub といった具合で出来るかと ・・・ このマクロを呼び出すには MakeLink ActiveSheet, Range("A3") といった具合で出来ると思います 別フォルダーなら rg.Value & ".xls" を "ブックへのフルパス\" & rg.Value & ".xls" と言った具合に変更しましょう
- redfox63
- ベストアンサー率71% (1325/1856)
マクロの記録で出来ると思いますよ マクロの記録を起動する リンクを設定したいセルを選択 メニューから 挿入 > ハイパーリンクを実行 管理台帳を設定 ブックマークボタンをクリックして シートを選択 記録の終了 としてやれば セルのSelect文 HyperLiinksのAdd メソッド といった マクロが完成するはずです Addメソッドの SubAddresの部分に シート名!セル番地 といった具合に設定してみましょう
補足
ありがとうございます。 でも、違うのです。 管理台帳へのリンクではなくて、 管理台帳からのリンクです。 例えば、 A2のセルに、SEC01-20080001の番号だったら、 SEC01-20080001のファイル名で保管して、 A2のセルからリンクしてSEC01-20080001を開けるようにしたいです。 同じように、A3のセルにSEC01-20080002の番号だったら、 SEC01-20080002のファイル名で保管して、 A3のセルからリンクしてSEC01-20080002を開けるにしたいです。 宜しくお願い致します。
補足
#1はよく見たら、自動記録を修正・・・と意味でしたね。 ごめんなさい。 なんとか自力でここまで出来ました。 動きました。 Okwebを見てると、アクティブセルの値は簡単には取れない・・・ とも回答が有りましたが、 社内の事例を見て、下記のようにしました。 でも、なぜ、このようにするのか?今ひとつです。 出来れば、教えて頂けると・・・ WORK = ActiveCell file$ = WORK ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=file$ & ".xls", _ TextToDisplay:=file$