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

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

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

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

ハイパーリンク

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

解決済

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

ravb-qwerty
ravb-qwerty

総合スコア2

VBA

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

ハイパーリンク

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

1回答

0グッド

0クリップ

291閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

2

ベストアンサー

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

総合スコア32005

ravb-qwerty, pig_vba👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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にも指定したワークシートをリンクさせてないといけないということですね。 大変勉強になりました。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

ハイパーリンク

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