0

「All_tables」と呼ばれる元のシート内の各テーブルの開始セルを指すハイパーテキスト リンクを含む追加のシートを作成する必要がある次のマクロを記録し、洗練しました。このシートでは、すべてのテーブルがハッシュ記号 (#) で区切られています。 スクリーンショットを見る:

Sub Create_list_of_tables()

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "list of tables"

ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "All_Tables!A22", TextToDisplay:="some variable pointing at the table name"
Range("A2").Select
End Sub

ここで、それを 10 回 (またはそれ以上) 繰り返すループに入れたいと思います。ハッシュ記号をプログラムの参照点として使用して、ハイパーリンクをどのセルに向けるべきかを調べようとしました。結果は次のとおりです。

Sub Create_list_of_tables()    
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "list of tables"

Const cStrDivider As String = "#"

Dim rMyCell As Range
Dim table_number As Long
table_number = 0


Do Until table_number = 10
Set rMyCell = Range("cStrDivider").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "All_Tables!&rMyCell", TextToDisplay:="some variable pointing at the table name"
ActiveCell.Offset(1, 0).Select
table_number = table_number + 1
Loop

End Sub

そして、それは機能しません。マクロやVBプログラミングは全くの初心者なので、せめて方向性を教えていただけると嬉しいです。私のアプローチは完全に間違っていますか?

どうもありがとう

4

1 に答える 1

1

ハイパーリンクをどこに向けたいか正確にはわかりませんが、これで良いスタートが切れるはずです。注意事項:

  • SelectorSelectionステートメントを使用しないでください。それらは遅く、望ましくない効果を生み出す可能性があります。代わりに、カーソルの位置に依存しない非常に明示的なステートメントを使用しますが、物事が存在する場所の絶対位置を評価します。
  • 範囲オブジェクトのFindandメソッドを使用して、文字列を検索します。これ以上何も見つからないFindNext場合は、 を返します。table_number ループを実行する代わりに確認することをお勧めします。FindNextnothing

更新しました

Sub Create_list_of_tables()

    Const cStrDivider As String = "#"

    Dim sht As Worksheet, rMyCell As Range, rSearchRange As Range
    Dim testSht As Worksheet, firstMyCell As Range

    Set sht = ActiveSheet

    On Error Resume Next
    Set testSht = ActiveWorkbook.Sheets("All_Tables")
    If Err.Number <> 9 Then
        Application.DisplayAlerts = False
        testSht.Delete
        Application.DisplayAlerts = True    'important to set back to true!
    End If
    On Error GoTo 0

    ActiveWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
    ActiveWorkbook.Sheets(Sheets.Count).Name = "All_Tables"

    Set rSearchRange = sht.Range("A:A")

    'do initial "Find"
    Set rMyCell = rSearchRange.Find(cStrDivider)
    Set firstMyCell = rMyCell

    Do
        sht.Hyperlinks.Add Anchor:=rMyCell.Offset(0, 1), Address:="All_Tables!" & rMyCell.Address, _
            TextToDisplay:="Link"

        'get the next "MyCell" to use from the master range to search
        Set rMyCell = rSearchRange.FindNext(rMyCell)
        'increment your table counter (if you want to do this you can still
        table_number = table_number + 1
        Debug.Print firstMyCell.Address
        Debug.Print rMyCell.Address
    Loop While firstMyCell.Address <> rMyCell.Address

End Sub

それがどのように機能するかを見てください。

于 2013-02-25T20:12:30.473 に答える