[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAで自動生成したハイパーリンクが効かない』(dk22)
こんにちは。
VBAでSheet1からSheet2へのハイパーリンクを自動生成したいのですが、
リンクが機能しません。
Found_1,Found_2はFindメソッドで特定の文字列を検索し、その文字列が存在するセルをAnchor,Adressに指定しています。
どなたかご伝授お願いします。
//コード
With Worksheets("Sheet1")
.Hyperlinks.Add Anchor:=.Range("B" & Found_1.Row), Address:=Worksheets("Sheet2").Range("A" & Found_2.Row)
End With
< 使用 Excel:Excel2019、使用 OS:Windows10 >
リンク先のセルは不定なので、A1のように文字列指定はできません。
SubAddressでRangeメソッドやCellsメソッドを使ってリンク先を指定することはできないのでしょうか?
(dk22) 2020/07/30(木) 13:11
セルが可変、といっても、飛び先のシートはSheet2固定ですよね? シート名だけ固定で、セル位置は現状通り & でくっつければ良いだけでしょう?
RangeやCellsはオブジェクトであり、メソッドじゃないですし、何か大きな勘違いをしているように思えます。
(???) 2020/07/30(木) 13:48
■ ハイパーリンク先の指定はRangeで代用できるか → (結論)できません。 すでに指摘いただいているとおりです。
HyperlinksオブジェクトのAddメソッドの引数は ヘルプによると、 ・Addressが String型と規定されていることから、 ・SubAddressはVariant型とされているものの、 実質的には文字列でないと受け付けない。(内部はString型のVariantと推測)
実際に、Rangeオブジェクトでやるとエラーになるので、 ユーザーが頑張っても無駄に終わります。(また、MS社に翻意を促すのは非現実的。)
■そこで、「Rangeオブジェクト」から「セル範囲文字列」を作成する小道具を作ってみました。 (1)まず、SubAddressにセットするセル範囲文字列は、 Rangeオブジェクト.Address(external:=True) をそのまま利用することにします。 (2)難点は、セルへの表示です。(1)の文字列にはブック情報が含まれているので、 それをリンク元のセルに表示すると、ブック名が冗長、邪魔になります。 これは表示だけの話でリンクそのものには影響ないので、修正して問題ありません。
==== 以下は参考コードです。
Sub ハイパーリンクの設定() Dim anchor As Range Dim target As Range Dim adrs As String
' サンプル Set anchor = Range("A1") 'Hyperlinkをセットするセル Set target = Worksheets("Sheet3").Range("A1") 'リンク先のセル
adrs = target.Address(external:=True)
' Hyperlinkの設定 ActiveSheet.Hyperlinks.Add anchor:=anchor, Address:="", _ SubAddress:=ads, TextToDisplay:=setTextToDisplay(target)
End Sub
'Hyperlink先を表示する文字列の設定(ブック名を除く処理) Function setTextToDisplay(target As Range) As String Dim adrs$, bookname$
adrs = target.Address(external:=True) bookname = target.Parent.Parent.Name
setTextToDisplay = Replace(adrs, "[" & bookname & "]", "")
' もし"'"で始まる場合は、それがセルに表示されないので、重複させます。 If Left(setTextToDisplay, 1) = "'" Then setTextToDisplay = "'" & setTextToDisplay End Function
(γ) 2020/07/30(木) 18:15
(γ) 2020/07/30(木) 18:24
ActiveSheet.Hyperlinks.Add anchor:=anchor, Address:="", _ SubAddress:=ads, TextToDisplay:=setTextToDisplay(target) のadsはadrsの間違いです。(修正もれです) 訂正願います。 (γ) 2020/07/30(木) 23:31
見つけたセルそのものに飛ばしたいなら、Subaddressに Found_2.Address(True, True, xlA1, True) を指定するだけ。 ブック名は付いたままで構いません。 でも、A列に飛ばしたいなら、行位置だけ使って、"Sheet2!A" & Found_2.Row で良いと思う訳ですよ。 こんなに簡単な話なのに、なんでRangeやCellで指定したい、なんて無理を言うのかが判らなかったです。
(???) 2020/07/31(金) 10:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.