0

Word 2010でブックマークとしてスタイルを作成する方法は?

ここに画像の説明を入力

4

1 に答える 1

1

ドキュメント内のほとんどのテキストをブックマーク名として使用することはできません。Word/VBA のブックマーク名に特定の文字を使用することは違法です。ドキュメントのXML形式のブックマーク名にそのような文字を追加できる場合がありますので、必要な場合は別途質問してください。

これは、SO に投稿するにはコードが多すぎるように感じます。どのようなフレームワークを採用しているかを説明し、ハードルがどこにあるかを教えてください。これは二度とできません。「私のために働く」。ご不明な点がございましたら、お気軽にお問い合わせください。

下部にある「RunMe」マクロを実行します。

Private Function IsParagraphStyledWithHeading(para As Paragraph) As Boolean
    Dim flag As Boolean: flag = False
    If InStr(1, para.Style, "heading", vbTextCompare) > 0 Then
        flag = True
    End If
    IsParagraphStyledWithHeading = flag
End Function

Private Function GetTextRangeOfStyledParagraph(para As Paragraph) As String
    Dim textOfRange As String: textOfRange = para.Range.Text
    GetTextRangeOfStyledParagraph = textOfRange
End Function

Private Function BookmarkNameAlreadyExist(bookmarkName As String) As Boolean
    Dim bookmark As bookmark
    Dim flag As Boolean: flag = False
    For Each bookmark In ActiveDocument.Bookmarks
        If bookmarkName = bookmark.name Then
            flag = True
        End If
    Next
    BookmarkNameAlreadyExist = flag
End Function

Private Function CreateUniqueBookmarkName(bookmarkName As String)
    Dim uniqueBookmarkName As String
    Dim guid As String: guid = Mid$(CreateObject("Scriptlet.TypeLib").guid, 2, 36)
    guid = Replace(guid, "-", "", , , vbTextCompare)
    uniqueBookmarkName = bookmarkName & guid
    CreateUniqueBookmarkName = uniqueBookmarkName
End Function

Private Function BookmarkIt(rng As Range, bookmarkName As String)
    Dim cleanName As String: cleanName = MakeValidBMName(bookmarkName)
    If BookmarkNameAlreadyExist(cleanName) Then
        cleanName = CreateUniqueBookmarkName(cleanName)
    End If
    ActiveDocument.Bookmarks.Add name:=cleanName, Range:=rng
End Function

''shamelessly stolen from gmaxey at http://www.vbaexpress.com/forum/showthread.php?t=37674
Private Function MakeValidBMName(strIn As String)
    Dim pFirstChr As String
    Dim i As Long
    Dim tempStr As String
    strIn = Trim(strIn)
    pFirstChr = Left(strIn, 1)
    If Not pFirstChr Like "[A-Za-z]" Then
        strIn = "A_" & strIn
    End If
    For i = 1 To Len(strIn)
        Select Case Asc(Mid$(strIn, i, 1))
        Case 49 To 58, 65 To 90, 97 To 122
            tempStr = tempStr & Mid$(strIn, i, 1)
        Case Else
            tempStr = tempStr & "_"
        End Select
    Next i
    tempStr = Replace(tempStr, "  ", " ")
    MakeValidBMName = tempStr
End Function

Sub RunMe()
    Dim para As Paragraph
    Dim textOfPara As String
    For Each para In ActiveDocument.Paragraphs
        If IsParagraphStyledWithHeading(para) Then
            textOfPara = GetTextRangeOfStyledParagraph(para)
            If para.Range.Bookmarks.Count < 1 Then
                BookmarkIt para.Range, textOfPara
            End If
        End If
    Next
End Sub
于 2012-07-06T06:23:40.590 に答える