• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザフォームのボタンにハイパーリンクを割当てたい)

ユーザフォームのボタンにハイパーリンクを割当てたい

このQ&Aのポイント
  • VBAのユーザフォームでボタンにハイパーリンクを割り当てる方法について教えてください。
  • ボタン数が可変の場合、ボタンに参照アドレスのリンクをセットして、ボタンが押された時にはそのアドレスに無条件に飛んでいく方法はありますか?
  • ユーザフォームのボタンに自動的にハイパーリンクを割り当てる方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

> xxx_click()を定義していなくても飛んでいってほしい ということですが、xxx_click()を動的に作成するという方法でよろしければ試してみてください。 元ネタはカレンダーを探しているときに見つけたサイトのクラスを使うカレンダーです。 https://ateitexe.com/excel-vba-calendar-control/ クラスモジュールClass1に Private WithEvents Target As MSForms.CommandButton Private SetUrl As String '新しくイベントを作成する Public Sub SetCtrl(New_Ctrl As MSForms.CommandButton, ByVal mUrl As String) Set Target = New_Ctrl SetUrl = mUrl End Sub Private Sub Target_Click() If InStr(SetUrl, "https://") > 0 Then ActiveWorkbook.FollowHyperlink Address:=SetUrl Else MsgBox "対象文字列 [ " & SetUrl & " } は暗号化されたURLではありません。" & vbCrLf & "もしくはURLではありません。", vbCritical End If End Sub フォームモジュール Private mCmdButton() As Class1 Private Sub UserForm_Initialize() Dim j As Long Dim mUrl As String Me.Frame1.SetFocus Me.大外フレーム.Copy 'CommandButton1も動的にclick()作成 ------------------------- '質問にあった「ActiveWorkbook.FollowHyperlink Address:=Range("C5")」から、対象セルはC5から始まっているとして mUrl = ThisWorkbook.Sheets("Sheet1").Cells(5, "C").Value Call Make_Event(1, mUrl) '----------------------------------------------------------- For j = 1 To 10 Me.大外フレーム.Paste '中略 Me.Controls("CommandButton" & j + 1).Caption = Me.Controls("CommandButton" & j + 1).Name '動的に作成されたCommandButtonのclick()作成 ------------------------- mUrl = ThisWorkbook.Sheets("Sheet1").Cells(5 + j, "C").Value 'C5から下に続いているとして Call Make_Event(j + 1, mUrl) --------------------------------------------------------------------- Next Me.大外フレーム.ScrollHeight = Me.大外フレーム.ScrollHeight + Me.Frame1.Height * j 'j=(Past回数+1) End Sub Function Make_Event(ByVal i As Long, ByVal mUrl As String) ReDim Preserve mCmdButton(i) Set mCmdButton(i) = New Class1 mCmdButton(i).SetCtrl Me("CommandButton" & i), mUrl End Function

gge00741
質問者

お礼

いつもフォローして頂きありがとうございます。 もちろん、xxx_click()を動的に作成するという方法でも構いませんでした。 先の方のご教授にもありましたが、クラスモジュールと、動的ハンドラの割り当て方法は非常に参考になりました。 また、記載して頂いたロジックも、かなり参考になり助かりました。 ただ、ReDim Preserve など使用したこともなりものもあり、まだちょっと調査が必要です。 ありがとうございました。

その他の回答 (1)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.1

そういう場合はクラスモジュールを使うと良いです。 下記の URLにクラスモジュールを使った電卓が紹介されています。 電卓のボタンの数だけ Clickイベントを作成しなくても良い方法で、似たような例かと思います。 https://blog.goo.ne.jp/pc_college/e/9ca2b0c452e9e691cad1dbd2783868cf

gge00741
質問者

お礼

回答ありがとうございました。 クラスモジュールと、ボタンにxxxxx_clickを動的に割り当てるやりかた等、すごく参考になりました。 電卓モジュールは、昔作成したことがありましたが、全てにとび先を設定していました。共通化できるのやり方も参考になりました。 ありがとうございました。

関連するQ&A