excel2002vbaで選択しているセルがハイパーリンクとそれ以外のものを区別する方法

このQ&Aのポイント
  • excel2002vbaで選択しているセルがハイパーリンクとそれ以外のものを区別する方法について教えてください。
  • ハイパーリンクをenterキーでリンク先に飛べるようにマクロを挿入したのですが、ハイパーリンク以外のセルでenterキーを押下した時に、「インデックスが有効範囲にありません」というエラーメッセージが表示されています。
  • 使用しているマクロは以前に掲載されていたマクロですが、他に良い方法があるでしょうか?
回答を見る
  • ベストアンサー

excel2002vbaで選択しているセルがハイパーリンクとそれ以外のものを区別する方法

ハイパーリンクをenterキーでリンク先に飛べるようにマクロを挿入したのですが、ハイパーリンク以外のセルでenterキーを押下した時に、「インデックスが有効範囲にありません」というエラーメッセジが表示されていまい通常のセル移動が行えません。 使用しているマクロは以前に掲載されていた以下のマクロをしようしています。 何かいい方法はあるでしょうか? Sub Auto_Open() '起動時 キー設定 On Call SettingKeys(True) End Sub Sub Auto_Close() '終了時 キー設定 Off Call SettingKeys(False) End Sub Sub SettingKeys(flg As Boolean) If flg Then Application.OnKey "{Enter}", "JumpHyperLink" Application.OnKey "~", "JumpHyperLink" Else Application.OnKey "{Enter}" Application.OnKey "~" End If End Sub Sub JumpHyperLink() If TypeName(Selection) = "Range" Then Selection.Hyperlinks(1).Follow NewWindow:=False End If End Sub

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

これでいかが? If TypeName(Selection) = "Range" Then   If Selection.Hyperlinks.Count > 0 Then     Selection.Hyperlinks(1).Follow NewWindow:=False   End If End If

j_iizuka
質問者

お礼

早速のご回答ありがとうございました。 上記の方法で問題なく成功しました。

関連するQ&A

  • Excel VBA ENTERで特定のセルへ移動

    他の質問でみつけたコードですが どなたか以下のコードの内容を説明(翻訳)していただけないでしょうか よろしくお願いします。 '<標準モジュール> Private Sub ReturnDirectrion2SelectCell()  If ActiveCell.Address(0, 0) Like "A2" Then   Range("B5").Select  Else   'Original ReturnDirection の再現   On Error Resume Next   Select Case Application.MoveAfterReturnDirection   Case xlDown     ActiveCell.Offset(1).Select   Case xlToRight     ActiveCell.Offset(, 1).Select   Case xlToLeft     ActiveCell.Offset(, -1).Select   Case xlUp     ActiveCell.Offset(-1).Select   End Select  End If End Sub Sub SetKeys()   '設定用   Application.OnKey "~", "ReturnDirectrion2SelectCell"   Application.OnKey "{Enter}", "ReturnDirectrion2SelectCell" End Sub Sub SetOffKeys()  '解除用  Application.OnKey "~"  Application.OnKey "{Enter}" End Sub '----------------------------------------- 自動設定が必要な場合は、以下のコードを加えてください。 '----------------------------------------- '<標準モジュール> Sub Auto_Open()  Call SetKeys End If Sub Auto_Close()  Call SetOffKeys End If '----------------------------------------- 以上です。よろしくお願いします。

  • セルの選択

    よろしくお願いします。 AE1:AI15の中のあるセル(6桁の値が入っています)を選択している状態から始まりまり、セルAA3に貼り付け、別のマクロ(検索)を実行後、また元のセルにマクロで戻りたいのですが、 どなたか詳しい方教えて下さい、よろしくお願いします。 Private Sub CommandButton2_Click() '検索ボタン Application.ScreenUpdating = False Selection.Copy Range("AA3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False 検索 End Sub

  • 複数のブックを開いているとエラーが出てしまいます

    エクセルのマクロ初心者でたいへん恐縮です。質問の仕方が悪ければお詫び申し上げます。  エクセルでそれぞれ違うマクロが記録された二つのブックを開いて、シートの表から抽出などの操作をしています。例えば、(1).xlsと (2).xlsにはそれぞれ部品表のようなリストを含めて3つのシートがあります。その二つのブックを頻繁にアクティブに切り替えながら作業をしようとしているのですが、片方を使っていると別のブックを使った時に「インデックスが有効範囲にありません」というエラーが出て、アクティブブックとは違うシートを読み込んでしまっているようです。 ちなみにブックを一つだけ開いて操作している時は全くエラーはでません。二つのブックを扱っている時だけです。マクロはエンターを押すと実行されるようになっており、一方を実行するともう片方のブックでエラーが出てしまいます。 その二つのブックのコードでエラー(黄色く表示)になるのは以下の★~★の部分です。 ------------------------------------------------------------------------------------ <(1).xlsのマクロ> Sub Auto_Open() ' Auto_Open Macro ActiveSheet.Unprotect ' ★Sheets("パッキンリスト").Columns("B:N").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("検索出力表!Extract"), Unique _ :=False★ ActiveWindow.SmallScroll Down:=-28 Range("C19:N19").Select Selection.Copy Range("D3:E14").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=True ActiveWindow.SmallScroll Down:=4 Rows("21:21").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp ActiveWindow.ScrollRow = 1 Range("B3").Select Application.OnKey Key:="{RETURN}", Procedure:="Auto_Open" Application.OnKey Key:="{ENTER}", Procedure:="Auto_Open" ActiveSheet.Protect UserInterfaceOnly:=True End Sub ----------------------------------------------------------------------------------- <(2).xlsのマクロ> Sub Auto_Open() ' Auto_Open Macro ActiveSheet.Unprotect If Range("B3").Cells = "" Then MsgBox "  ☆ パーツNo,が未入力です。" ActiveSheet.Protect UserInterfaceOnly:=True Exit Sub End If ★Sheets("パーツリスト").Columns("C:G").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("B20:E20"), Unique:= _ True★ Range("C21:E21").Copy Range("D3:E5").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=True ActiveWindow.ScrollRow = 1 Application.OnKey Key:="{RETURN}", Procedure:="Auto_Open" Application.OnKey Key:="{ENTER}", Procedure:="Auto_Open" ActiveSheet.Protect UserInterfaceOnly:=True End Sub ------------------------------------------------------------------------------------  二つのブックを開いて、下のタスクバーでブックを切り替えて操作してもお互いが干渉せずそれぞれのブックのプログラムがエラー無く動くようにしたいのですが、 もし、何か解決法などございましたらご教授いただければ幸いです。 何卒よろしくお願い申し上げます。

  • VBA実行後、キー入力ができない

    こんにちは。エクセル2007を使用しています。 下記の行削除のコードを実行した直後、 Enterキー以外はどのキーを押しても反応せず、 一度どこかのセルをクリックすると、ようやく全ての キーが反応します。どこかコードに問題はあるでしょうか。 よろしくお願いいたします。 Private Sub cmd行削除_Click() Application.EnableEvents = False Application.ScreenUpdating = False If Selection.Row = 1 Then Range("A1").Select MsgBox "削除したい行にカーソルを合わせてください。", vbOKOnly, _ "指定したカーソル行が削除されます。" Exit Sub End If If Selection.Row > 1 Then Selection.EntireRow.Delete Shift:=xlUp End If Application.ScreenUpdating = True Application.EnableEvents = True End Sub

  • VBA 選択したセルが空白であったらシートを削除

    こんばんは!いつもお世話になっています。 選択したシート1のセル(C9)が空白であったら、選択したシートを削除するマクロ(VBA)を作りましたが、上手く作動しなくて困っています。 どうしたらよいのかよろしくお願い致します。 'シート1のセルC9を選択し、空白か判断する Sub セルの選択()   Worksheets("Sheet1").Activate   Range("C9").Select  If Len(Application.Trim(ActiveCell)) = 0 Then   MsgBox("空白セル")  End If End Sub '現在アクティブなシートを削除する Sub DeleteWorksheet() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub

  • PowerPointでマクロをショートカットキーに割り当てる方法

    現在、エクセルで以下のようなマクロをアドインとして作成して、「CTRL+,」と「CTRL+.」で表示倍率を変えれるようなショートカットを割り当ててます。 同じことをパワーポイントでアドインを作成してやろうとすると、Application.OnKeyのところでエラーになってしまいます。同じVBAでも違うんでしょうか。 PowerPointで同じことをやろうとするとどうすればいいでしょうか? ご存知の方がいらっしゃれば教えてください。 ==================================================== Option Explicit Sub auto_open() Start 1 End Sub Sub Start(num%) Dim myBar As CommandBar Dim myCtrl As CommandBarControl Application.OnKey "^{.}", "Zoomup" Application.OnKey "^{,}", "Zoomdown" End Sub Sub Zoomup() If ActiveWindow.Zoom < 390 Then ActiveWindow.Zoom = ActiveWindow.Zoom + 5 End If End Sub Sub Zoomdown() If ActiveWindow.Zoom > 10 Then ActiveWindow.Zoom = ActiveWindow.Zoom - 5 End If End Sub

  • 罫線を除く全て貼り付けをマクロCtrl+Alt+Vしたい

    ショートカットキーの余裕がありません。 Ctrl+Shift+v は「値のみ貼り付け」に使っています。 Ctrl+Alt+v で「罫線を除く全て貼り付け」をVBAでお願いできますか? 当方コピーするしか脳がありませんが。 また、マクロで[Ctrl]+[Alt]+[アルファベット文字]キーをショートカットキーに使えるような汎用型のBVAはできませんか? 以前PC相談で教わったのですが、Ctrl+Alt+矢印キーはセル増減で便利に使っておりますが、改造する能力はありません。 以下は参考コピーです。 ご回答者 2001/08/18 12:46 たっきー 様  改良者 2001/08/18 16:50 パリポ 様 Sub Auto_Open() Application.OnKey "^%{UP}", "DelUp" Application.OnKey "^%{DOWN}", "InsDown" Application.OnKey "^%{LEFT}", "DelLeft" Application.OnKey "^%{RIGHT}", "InsRight" End Sub Sub DelUP() Selection.Delete Shift:=xlUp End Sub Sub DelLeft() Selection.Delete Shift:=xlToLeft End Sub Sub InsRight() Selection.Insert Shift:=xlToRight End Sub Sub InsDown() Selection.Insert Shift:=xlDown End Sub

  • vba boolean変数を開放する方法

    エクセルのセルに「○○○○○○○○○○××××××××××」と入っているものをランダムに並べ代えるマクロを探してみました。 Sub macro2() Dim i, m As Integer Dim b, c As String Dim flg(1 To 20) As Boolean b = Cells(1, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(1, 2).Value = c End Sub これはうまく動くのですが、10行分やろうとして、以下のように変更すると暴走(終わらない)します。 Sub macro2() Dim i, m, n As Integer Dim b, c As String Dim flg(1 To 20) As Boolean For n = 1 To 10 b = Cells(n, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(n, 2).Value = c next n End Sub 一行目が終わってもboolean変数の値がそのまま残っているのが原因らしいのですが開放する方法がわかりません。 取りあえずもう一つマクロを追加してやりたいことはできたのですが、 Sub macro1() Dim n As Integer For n = 1 To 10 Call macro2(n) Next n End Sub Sub macro2(n As Variant) 以下略 なんかスッキリしません。 boolean変数を開放し、マクロひとつですます方法を教えて頂きたくお願いします。 flg(m) = Falseを挿入してもダメでした。

  • VBAショートカットキー セルの結合・解除

    VBAでエクセルで使用するショートカットキーを作成しております。 エクセルは2007を使用しています。 Ctrl+Shift+F で 選択したセルが、結合していたら解除、解除されていたら結合  という命令を作成しました。(ネットから拝借ですが、、、) 選択した範囲のセルに何も書かれていないときは良いのですが、何かが入力された範囲を 選択して、実行するとエクセル上で 【選択範囲には複数のデータ値があります。1つのセルとして結合すると、選択したセル範囲になるもっとも左上端になるデータのみが保持されます(空白セルは無視されます)】 という警告(?)ウインドウが表示されます。 その後「 OK 」 を押すと問題ないのですが「 キャンセル 」を選択すると VBAで ”実行時エラー’1004” RangeクラスのMergeCells プロパティを設定できません。 と エラーになってしまいます。 「キャンセル」を選択した際に、エラーにならないようにするには、どのように修正すれば良いか 教えて頂きたいです。 以下、作成したマクロです。 デバッグを確認すると[ .MergeCells = True ]の部分が黄色くなります。 ---------------------------------------------------------------------- Sub auto_open() Application.OnKey "+^F", "セルの結合解除" End Sub ’------------------------------ Sub セルの結合解除() With Selection If .MergeCells = False Then .MergeCells = True .HorizontalAlignment = xlCenter Else .MergeCells = False End If End With End Sub ---------------------------------------------------------------------- 何卒宜しくお願い致します。

  • わあー。

    わあー。 エンターキーにマクロを設定したのですが、 解除ができなくなってしまい、エンターキーを押すごとにマクロが走ってしまいます。 どうにかお願いします。 Sub Onkey_Off1() Application.OnKey "{Enter}" End Sub

専門家に質問してみよう