Как динамически экранировать символы от строки - PullRequest
0 голосов
/ 27 марта 2020

У меня есть макрос, который копирует таблицу в другую.

Sub CopyTable(tb1 As String, tb2 As String, lookupField As String)

    Dim tRows As Long
    Dim tCols As Long
    Dim ColName As String
    Dim Match As Long
    Dim ob1 As ListObject
    Dim ob2 As ListObject
    Dim nRow As ListRow
    Dim Status As String

    Set ob1 = ThisWorkbook.Worksheets(tb1).ListObjects(tb1)
    Set ob2 = ThisWorkbook.Worksheets(tb2).ListObjects(tb2)

    With ob1.DataBodyRange
        tRows = .Rows.Count
        tCols = .Columns.Count
    End With


    With ob1
        For x = 1 To tRows
            Match = FindMatch(ob2, Range(tb2 & lookupField), Range(tb1 & lookupField)(x).Value)
            If Match Then
                For y = 1 To tCols
                    ColName = Worksheets(tb1).Cells(1, y)
                    If Range(tb2 & "[" & ColName & "]")(Match).Value <> Range(tb1 & "[" & ColName & "]")(x).Value Then
                        Range(tb2 & "[" & ColName & "]")(Match).Value = Range(tb1 & "[" & ColName & "]")(x).Value
                    End If
                Next y
            Else
                Set nRow = ob2.ListRows.Add
                With nRow
                    For y = 1 To tCols
                        ColName = Worksheets(tb1).Cells(1, y)
                        .Range.Cells(1, ob2.ListColumns(ColName).Index) = Range(tb1 & "[" & ColName & "]")(x).Value
                    Next y
                    Status = "New"
                    If Range(tb1 & "[Release Date]")(x).Value <> "?" Then
                        If Range(tb1 & "[Billing Type]")(x).Value <> "REG" Then
                            Status = "Released"
                        Else
                            Status = "Completed"
                        End If
                    End If
                    If .Range.Cells(1, ob2.ListColumns("Status").Index) <> "To Bill" Then
                        If .Range.Cells(1, ob2.ListColumns("Status").Index) <> "To Correct" Then
                            .Range.Cells(1, ob2.ListColumns("Status").Index) = Status
                        End If
                    End If
                End With
            End If
        Next x
    End With

    MsgBox "Complete!"

End Sub

Теперь, поскольку в заголовках исходной таблицы есть такие символы, как [%DECIMAL%]VFD of Shipment. Мне нужно избегать символов, которые могут динамически мешать. Переменная ColName содержит заголовок, включая символы. Но когда я строю свой Range (), он генерирует 400 ошибок.

.Range.Cells(1, ob2.ListColumns(ColName).Index) = Range(tb1 & "[" & ColName & "]")(x).Value

В PHP я бы просто использовал двойные кавычки вокруг переменной. Как мне добиться того же результата в Excel VBA?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...