VBA l oop для установки переменной на основе таблицы с совпадающим именем - PullRequest
0 голосов
/ 16 июня 2020

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

В основном файл, который загружается в этот файл, может измениться, независимо от того, добавлены ли столбцы или удалены, или просто переименованы . Я сделал таблицу сопоставления для некоторых столбцов, и должны ли они выводиться или нет, вместе с сокращенным именем столбца (это имя не изменится). Идея состоит в том, что если имена столбцов должны были изменить остальную часть кода, не нужно изменять, поскольку сокращенная версия будет переименовывать то же самое, мне просто нужно обновить длинную версию в таблице сопоставления.

Код, который я пытаюсь сделать, это: - Объявить общую переменную - Затем должна быть запущена процедура, которая затем будет l oop через переменные, которые я перечислил в массиве - Если в столбце спецификаций c содержит это имя переменной, тогда код установит значение переменной как другой столбец в той же строке.

Я приложил пример кода, с которым у меня возникли проблемы.

'' '

Public Col_ColTitle         As String
Public Col_KeepRemove       As String
Public Col_HiPort           As String
Public Col_FundName         As String
Public Col_Status           As String
Public Col_CompBD           As String
Public Col_IMA              As String
Public Col_Deadline         As String
Public Col_ClientRep        As String
Public Col_ClientRepSO      As String
Public Col_InvDir           As String
Public Col_InvDirSO         As String
Public Col_Comments         As String
Public Col_CManager         As String
Public Col_CDirector        As String

Sub GetDataValues()

Dim r As Integer
Dim vCols As Variant

Set tbl_ColNames = ws_Settings.ListObjects("tbl_ColNames")

vCols = Array(Col_ColTitle, _
                Col_KeepRemove, _
                Col_HiPort, _
                Col_FundName, _
                Col_Status, _
                Col_CompBD, _
                Col_IMA, _
                Col_Deadline, _
                Col_ClientRep, _
                Col_ClientRepSO, _
                Col_InvDir, _
                Col_InvDirSO, _
                Col_Comments, _
                Col_CManager, _
                Col_CDirector)


On Error GoTo ErrCatcher
For i = LBound(vCols) To UBound(vCols)


    With tbl_ColNames
        For r = 1 To .ListRows.Count
            If .DataBodyRange(r, .ListColumns("Code Name").Index).Value = vCols(i) Then
                vCols(i) = .DataBodyRange(r, .ListColumns("Column Title").Index).Value

                Debug.Print vCols(i)


            End If
        Next r
    End With


Next i
On Error GoTo 0

Exit Sub

ErrCatcher:
MsgBox "Test"

End Sub

'' '

...