У меня есть макрос, который копирует таблицу в другую.
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?