Excel (VBA) |
![]() ![]() |
(Windows 10 Pro : Microsoft 365)
RSS情報を取得して、別の列にハイパーリンクの設定をしたい
投稿日時: 23/02/02 17:07:06
投稿者: takatada72
|
---|---|
お世話になります。
|
![]() |
投稿日時: 23/02/02 17:14:16
投稿者: simple
|
---|---|
どこかのWebページへのリンクを挿入する動作をマクロ記録してみてはいかがですか?
|
![]() |
投稿日時: 23/02/02 22:10:50
投稿者: simple
|
---|---|
この質問ページへのハイパーリンクを張る動作を記録すると、下記になります。
Sub Macro1() ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _ "https://www.moug.net/faq/viewtopic.php?t=82038", TextToDisplay:= _ "https://www.moug.net/faq/viewtopic.php?t=82038" End Sub引数をカッコで囲んだりしていないですよね。そのとおりに真似をしてもらえばOKです。 ちなみに、Cells(j, 4)は、 .Offset(j, 4) の単純ミスでしょう。(j=0のときにエラーになるので直ぐわかります) 助言のとおりにしていただければ、問題は簡単に解決するはずです。 マクロ記録なんか意味無いよ、ということで試していないとかですか? ================= 以下、理屈的なことを若干補足説明します。 (1) Hyperlinks.Addメソッドはオブジェクトブラウザで確認すると Function Add(Anchor As Object, Address As String, [SubAddress], [ScreenTip], [TextToDisplay]) As Object Object(実際はhyperlinkオブジェクト)を返す Function で構築されています。 戻り値を必要としない場合は、マクロ記録のように、Subプロシージャー的な書き方ができるようです。 (これは Range1.Copy Range2 と同じです。 Copy も Functionで定義されているので、 ans = Range1.Copy(Range2) とも書けます(成功した場合、Trueを返します)が、 普通こんな書き方はしません。) (2) Hyperlinks.AddメソッドはFunctionですから、 ActiveSheet.Hyperlinks.Add(Anchor:=Selection, Address:= URL1, TextToDisplay:=URL1) (URL1は説明のための省略記法です) と書くと、戻り値を戻す書き方であるにも関わらず戻り値指定がないなので、構文エラーになります。 (3) Dim hl As Hypeylink Set hl = ActiveSheet.Hyperlinks.Add(Anchor:=Selection, Address:= URL1, TextToDisplay:=URL1)とすればエラーになりません。 (4) なお、単に引数をカッコに入れたいのであれば、 Call ActiveSheet.Hyperlinks.Add(Anchor:=Selection, Address:= URL1, TextToDisplay:=URL1) と書くこともできます。 (もっとも、これはSubプロシージャー的に扱ったものです。 Callを使う時は、引数はカッコで囲む必要があるという制約に従っただけです) 異常の話は、次のVBAのヘルプが参考になると思います。 「Sub プロシージャと Function プロシージャの呼び出し」 https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/calling-sub-and-function-procedures # 私の記述は正確性を欠いたところがあるかもしれません。 |
![]() |
投稿日時: 23/02/03 08:45:41
投稿者: simple
|
---|---|
誤字がありました。
|
![]() |
投稿日時: 23/02/03 09:07:39
投稿者: takatada72
|
---|---|
simpleさん
|
![]() |
投稿日時: 23/02/03 09:29:18
投稿者: takatada72
|
---|---|
表示名も変えてみました。/表示名も表示されるようになりました。
|
![]() |
投稿日時: 23/02/03 10:16:19
投稿者: takatada72
|
---|---|
simpleさん
|
![]() |
投稿日時: 23/02/03 10:20:05
投稿者: simple
|
---|---|
再掲します。
引用:と回答したとおりです。 それだけのコードが書けるかたなら、わかると思いますが。 |
![]() |
投稿日時: 23/02/03 10:52:41
投稿者: takatada72
|
---|---|
simpleさん
|
![]() |
投稿日時: 23/02/03 10:57:38
投稿者: simple
|
---|---|
当初のコードを前提にした修正案はこういうものです。
j = 0 For i = 1 To 20 With ActiveCell .Offset(j, 0).Value = titleNodes(i).Text .Offset(j, 1).Value = linkNodes(i).Text .Offset(j, 2).Value = Mid(pubDateNodes(i).Text, 6, 11) ActiveSheet.Hyperlinks.Add Anchor:=.Offset(j, 4), _ Address:=linkNodes(i).Text, TextToDisplay:=titleNodes(i).Text End With j = j + 1 Next i 変更したのは、ここだけです。 ActiveSheet.Hyperlinks.Add Anchor:=.Offset(j, 4), _ Address:=linkNodes(i).Text, TextToDisplay:=titleNodes(i).Text |
![]() |
投稿日時: 23/02/03 11:02:32
投稿者: takatada72
|
---|---|
ありがとうございました。
|