Многомерный массив в VBA для Microsoft Word на Mac

Я работаю над макросом, чтобы перебрать ряд строк (a1, a2, a3) и замените их рядом соответствующих значений (b1, b2, b3). Я создал массив для хранения соответствующих строк:

Dim search_strings(1 To 2) As String
search_strings(1) = "match1"
search_strings(2) = "match2"

Я могу перебрать этот массив с For Each петля. Но я не могу понять, как хранить и ссылаться на соответствующий текст замены. Я знаю, что мне нужна какая-то пара ключ / значение. Я попытался использовать словарь, как это:

Dim dict As New Scripting.Dictionary
dict.Add "match", "replace"

Но чтобы это работало, мне нужно сослаться на Microsoft Scripting Runtime, которая недоступна в Mac OS X. (В настоящее время я получаю эту ошибку: Compile error: User-defined type not defined.)

Есть ли другой способ?

Вот полный код:

Sub MyMacro()
    ' Initialize variables
    Dim search_strings(1 To 2) As String
    Dim this_search_string As Variant
    Dim myRange As Range
    Dim Reply As Integer
    ' Define strings to match
    search_strings(1) = "match1"
    search_strings(2) = "match2"
    ' Run a search for each string in the array of strings to match
    For Each this_search_string In search_strings
        ' Define the search range to be the whole document
        Set myRange = ActiveDocument.Content
        ' Set the Find parameters
        myRange.Find.ClearFormatting
        myRange.Find.MatchWildcards = True
        ' Loop through each match in the document
        Dim cached As Long
        cached = myRange.End
        Do While myRange.Find.Execute(this_search_string)
            myRange.Select
            ' Prompt the user to replace the match
            Reply = MsgBox("Replace '" & myRange.Find.Text & "'?", vbYesNoCancel)
            If Reply = 6 Then ' "Yes" clicked
                myRange.Text = "replacement"
            ElseIf Reply = 2 Then ' "Cancel" clicked
                Exit Do
            End If
            myRange.Start = myRange.Start + Len(myRange.Find.Text)
            myRange.End = cached
        Loop
    Next this_search_string
End Sub

1 ответ

Решение

Это может быть полностью отключено, и я могу выглядеть как дурак, но вы пытались использовать двумерный массив, чтобы вы могли хранить значения с их заменами в двумерном массиве. Затем вы можете перейти к циклу, чтобы получить значения замены. Это всего лишь идея, которая у меня была, это может быть далеко.

Sub MyMacro()
    ' Initialize variables
    Dim search_strings(1 To 2, 1 to 2) As String
    Dim this_search_string As Variant
    Dim myRange As Range
    Dim Reply As Integer
    ' Define strings to match
    search_strings(1, 1) = "match1"
    search_strings(2, 1) = "match2"
    search_strings(1, 2) = "result"
    search_strings(2, 2) = "result"
    ' Run a search for each string in the array of strings to match
    For Each this_search_string In search_strings
        ' Define the search range to be the whole document
        Set myRange = ActiveDocument.Content
        ' Set the Find parameters
        myRange.Find.ClearFormatting
        myRange.Find.MatchWildcards = True
        ' Loop through each match in the document
        Dim cached As Long
        cached = myRange.End
        Do While myRange.Find.Execute(this_search_string)
            myRange.Select
            ' Prompt the user to replace the match
            Reply = MsgBox("Replace '" & myRange.Find.Text & "'?", vbYesNoCancel)
            If Reply = 6 Then ' "Yes" clicked
                myRange.Text = search_strings(1, 2)
            ElseIf Reply = 2 Then ' "Cancel" clicked
                Exit Do
            End If
            myRange.Start = myRange.Start + Len(myRange.Find.Text)
            myRange.End = cached
        Loop
    Next this_search_string
End Sub

Я действительно не уверен, что это то, что вы ищете, поэтому я прошу прощения, если я трачу ваше время.

Другие вопросы по тегам