5

これは、元の質問「現在の段落の数は?」の拡張として意図されています。これは、iWork Pages に関する質問にうまく答えてくれます。http://macscripter.net/viewtopic.php?id=29125

Microsoft Word で同じことをしたいと思います。段落番号を取得できる VBA スクリプトを見つけました (以下を参照) が、VBA スクリプトがどのように機能するかがわからないため、行き詰まっています (以下も参照)


更新 17-05-2013

この問題には 2 つの解決策があります。VBA を読んでコードを調べたところ、VBA スクリプトが段落番号を決定する方法に気付きました。実際、それは非常に簡単です。文字 0 からカーソル位置までの範囲を設定し、その範囲内の段落をカウントします。

したがって、私の質問には2つの解決策があります。

  1. CurPosドキュメントの位置 0 から位置 までの範囲を作成するには、VBA に相当する AppleScript を使用しますcursor。範囲内の段落をカウントします。
  2. VBA スクリプトを使用して段落番号を変数に設定し、AppleScript を介してその変数にアクセスします

私の最終的な目標は、すべてのテーブルを検索し、その前後に連続するセクション区切りを挿入するドキュメントに対してループを実行することです。

次の VBA スクリプトは、必要なデータなど (段落、絶対行番号、相対行番号) を表示するポップアップ ダイアログを提供します。このスクリプトの出力を、AppleScript 経由でアクセスできるドキュメント変数に設定するのを手伝ってくれる人がいるかもしれません。

Open this Scriplet in your Editor:

get variable value of variable "paragraphNum" of active document

VBAスクリプトは次のとおりです。

Option Explicit

Sub WhereAmI()
    MsgBox "Paragraph number: " & GetParNum(Selection.Range) & vbCrLf & _
        "Absolute line number: " & GetAbsoluteLineNum(Selection.Range) & vbCrLf & _
        "Relative line number: " & GetLineNum(Selection.Range)
End Sub


Function GetParNum(r As Range) As Integer
    Dim rParagraphs As Range
    Dim CurPos As Integer

    r.Select
    CurPos = ActiveDocument.Bookmarks("\startOfSel").Start
    Set rParagraphs = ActiveDocument.Range(Start:=0, End:=CurPos)
    GetParNum = rParagraphs.Paragraphs.Count
End Function

Function GetLineNum(r As Range) As Integer
    'relative to current page
    GetLineNum = r.Information(wdFirstCharacterLineNumber)
End Function

Function GetAbsoluteLineNum(r As Range) As Integer
    Dim i1 As Integer, i2 As Integer, Count As Integer, rTemp As Range

    r.Select
    Do
        i1 = Selection.Information(wdFirstCharacterLineNumber)
        Selection.GoTo what:=wdGoToLine, which:=wdGoToPrevious, Count:=1, Name:=""

        Count = Count + 1
        i2 = Selection.Information(wdFirstCharacterLineNumber)
    Loop Until i1 = i2

    r.Select
    GetAbsoluteLineNum = Count
End Function

段落番号を取得したら、これと同様のことを行うことで、前に連続するセクション区切りを挿入できます (もちろん、前の段落の最後の文字と後続の段落の最初の文字を選択する必要がありますが、最初にテーブルの段落番号を取得します!):

Open this Scriplet in your Editor:

insert break at text object of selection break type section break continuous

モデル: Macbook Air 2011 AppleScript: 2.5.1 (138.1) ブラウザ: Firefox 20.0 オペレーティング システム: Mac OS X (10.8)

4

2 に答える 2

8

解決策は、上記の質問に記載されている解決策番号 1 に基づいています (純粋な AppleScript 解決策)

現在選択されている段落の段落番号を取得するにparagraphNumは、次のスクリプトで変数にアクセスできます

tell application "Microsoft Word"
    set myDoc to active document
    set myRange to create range myDoc start 0 end (start of content of text object of selection)
    set paragraphNum to (count paragraphs in myRange)
end tell
于 2013-05-17T21:52:47.070 に答える