質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

ハイパーリンク

ハイパーリンクとは、ハイパーテキストにおいて、複数の文書を結び付ける役割を担う「参照」である。単にリンクとも呼びます

Q&A

解決済

1回答

989閲覧

【VBA】アクティブなシートに関係なく指定したシートにハイパーリンクを挿入したい

ravb-qwerty

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

ハイパーリンク

ハイパーリンクとは、ハイパーテキストにおいて、複数の文書を結び付ける役割を担う「参照」である。単にリンクとも呼びます

0グッド

0クリップ

投稿2022/11/24 08:56

前提

VBAでのHyperlinks.addについて分からない事象が発生しており困っています。
素人ながら色々ネットで調べてみたのですが解決できずご質問させていただいています。
対策と後学の為に原因の理解をしたいと考えております。

実現したいこと

アクティブなシートに関係なく、指定したワークシートの指定したセルにハイパーリンクを挿入したいです。

発生している問題・エラーメッセージ

Sheet1のRange(”A25”)に変数でパスを入力したリンクをハイパーリンクで挿入しようとすると
現在ActiveなシートであるSheet2のRange("A25")に指定したハイパーリンクが挿入されます。
要望としてはアクティブなシートに関係なく正常にSheet1にハイパーリンクを挿入したいです。
(それともHyperlinksはアクティブなシートに反映されるものなのでしょうか。)

ご参考までに、前後でハイパーリンクを使わず、セルに文字挿入しているのですが、それはSheet1に正常に入力されます。

該当のソースコード

Sub test()

Dim sheet as string
Dim add as string
sht = "Sheet1"
add = "C\file.xlsm"

MsgBox Activesheet.Name '"Sheet2"が表示されます。

Workshhets(sht).cells(1, 1).Value = 1 'Sheet1(1,1)に"1"が入力されます。

Worksheets(sht).hyperlinks.add Anchor:=Range("A25"), Address:=add, TextToDisplay:="〇" '"Sheet2のA25に〇というテキストにaddというリンクのハイパーリンクが挿入されています。"

Workshhets(sht).cells(2, 1).Value = 2 'Sheet1(2,1)に"2"が入力されます。

End Sub

VBA

試したこと

Sheet1だけの状態にして(アクティブなシートがSheet1)、マクロ走らせると正常に動作します。
※恐らくアクティブなシートになぜかハイパーリンクの文だけ反映されてしまっていると思います。

補足情報(FW/ツールのバージョンなど)

Excel2016 win10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Range("A25")というようにシート指定を省略すると、アクティブシートを指定していると解釈されます。つまり ActiveSheet.Range("A25")という意味になります。

下記のようにシート指定を省略しなければ、Sheet1のRange(”A25”) にハイパーリンクが挿入されます。

vba

1Worksheets(sht).hyperlinks.add Anchor:=Worksheets(sht).Range("A25"), Address:=add, TextToDisplay:="〇"

おなじ記述(Worksheets(sht).)を繰り返すのを避けるためにWithを使う場合が多いです。

vba

1With Worksheets("Sheet1") 2 .hyperlinks.add Anchor:=.Range("A25"), Address:=add, TextToDisplay:="〇" 3End With

あるいは、シート名を変数にするのではなくWorkSheetオブジェクトを変数にします。

vba

1Dim ws As WorkSheet 2Set ws = Workshhets("Sheet1") 3ws.hyperlinks.add Anchor:=ws.Range("A25"), Address:=add, TextToDisplay:="〇"

投稿2022/11/24 11:46

編集2022/11/24 13:17
hatena19

総合スコア33757

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ravb-qwerty

2022/11/24 23:47

ご回答ありがとうございます。 Worksheets().hyperlinks.addで指定したシートはrangeにはかかってこないということなんですね。 rangeのシートも再度指定して走らせたところ正常に処理できました。 ご教示頂きありがとうございました。
hatena19

2022/11/25 01:31

そういうことです。Excel君はそこまで気を使ってくれないんですよね。 例えば、 Worksheets(1).Range(Cells(1,1), Cells(5,5)) とセル範囲を指定すると、Worksheets(1)がアクティブの時はいいですが、別のシートがアクティブだとエラーになります。
ravb-qwerty

2022/11/25 05:40

ありがとうございます。 上記はrangeに指定したワークシートが掛かっているがcellsにも指定したワークシートをリンクさせてないといけないということですね。 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問