在我的表中(下面有一个示例),我从每周更改数据的另一张表中导入前两列。我的问题是我想将其他列(例如Age)绑定到第一列。我有一个按钮,可以按此按钮导入前2列,当数据更改(添加其他列或更改顺序)时,其他列中的数据保持不变(例如在导入后,John与Samara更改,年龄将保持不变,而不是针对正确的人)。 用户使用表单时将填充年龄列,因此我不能使用任何VLOOKUP。 我有什么办法可以阻止这种变化?
答案 0 :(得分:1)
据我了解,您仅导入列A和B,而列C中的信息仅存在于此当前工作簿中。因此,无法将其导入。
如果是正确的话,则需要采取几个步骤。
我采用的方法是使用Dictionary对象,因为它们相对有效,并且在存储键值对时效果很好。在下面的代码中,我将ID保存为键,将Age保存为值。然后,我导入新信息。然后我重新设定年龄。根据您进行导入的方式,您可能可以合并步骤2和3,但这很难在不看代码的情况下说出来。请参见下文,如果您需要其他帮助或信息,请告诉我们。
Sub StoreAgeInformation()
Dim oDict As Object
Dim rng As Range 'Range with the ID Primary Key
Dim rIterator As Range
'Offset to the ID column (in this case, we are saving the
'data that is 2 columns to the right
Const COL_OFFSET As Integer = 2
Set oDict = CreateObject("Scripting.Dictionary")
'Change the range to match your data (only need the ID column)
Set rng = Range("A2:A4")
For Each rIterator In rng
'If the ID is not already in the dictionary, then add it
If Not oDict.exists(rIterator.Value2) Then
'Add: KEY, VALUE
oDict.Add rIterator.Value2, rIterator.Offset(, COL_OFFSET).Value2
End If
Next rIterator
''''''''''''''''''''''''''''''''''''''''''''''''''''''
' RUN IMPORT CODE HERE
''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Redefine the range in case new rows have been added or deleted
Set rng = Range("A2:A6")
For Each rIterator In rng
If oDict.exists(rIterator.Value2) Then
rIterator.Offset(, COL_OFFSET).Value2 = oDict(rIterator.Value2)
Else
'If a new row, then the age is set to 0
rIterator.Offset(, COL_OFFSET).Value2 = 0
End If
Next rIterator
End Sub