2012-12-04 169 views
1

我目前有一个名为“DataMap”的电子表格,它有一个键/值布局。 关键是对另一个电子表格和单元格的引用,并且该值由用户输入。用VBA设置另一个单元格引用的excel单元格的值

例如,键列可能具有以下个体的引用:

  • = Sheet 1中B25
  • = '表2' B25
  • =表名[TableRowName]

此页面上还有一个名为“传输数据”的按钮。

当按下“传输数据”时,会运行一个宏,将这些值复制到由键列引用的单元中。

这个页面的要点是有一个单独的位置,可以从第三方系统注入数据,但不知道其他Excel工作簿 - 除非存在“DataMap”表。

目前,我遍历每个“数据地图”键/值对行,并使用下面的代码可以注入价值为“= Sheet1中B25!”:

reference = Replace(Sheets("MAPPINGS").Range("A" & row).Formula, "=", "") 
refSplit = Split(reference, "!") 

Sheets(refSplit(0)).Range(refSplit(1)) = Sheets("MAPPINGS").Range("B" & row).Value 

如果我使用一个字符串替换,我也可以处理“='Sheet 2'!B25”的情况。

但是,我对指定的表格有很大的麻烦。

可能吗? 或者,或者没有人有建议更好的方法来专门处理将值复制到'key'列引用的单元格中(不管引用的格式如何)?

感谢

回答

0

见下文。

Dim sht As Worksheet 
Dim address As Range 

Set sht = Sheet2 

Set address = Range(Replace(sht.Range("A" & 5).Value, "=", vbNullString)) 
address.Value = sht.Range("B" & 5).Value 

夫妇的建议:

  1. 变动表(“映射”)片(在VBA窗口中找到)的内部名称,所以如果工作表名称在Excel中改变了它不会影响你的宏。
  2. 请勿在单元格引用中添加“=”,因此您不需要替换语法。
+0

谢谢菲利普。这是一种享受。 –

1
Dim sht As Worksheet 
Dim ref As Range 

Set sht = Sheets("MAPPINGS") 

Set ref = Application.Evaluate(Replace(sht.Range("A" & Row).Formula, "=", "")) 
ref.Value = sht.Range("B" & Row).Value 
+0

Tim, 这实际上非常有用,虽然我认为Philip的Range()例子更清晰。 希望我可以将它们标记为正确! 通过使用代码,我能够完全从两个示例(Range或Application.Evaluate)中提取工作表(例如,在对偏移进行任何更改后): cellFormula =“'”&ref.Parent.Name& “'!” &ref.address(External:= False) 因此,Range和Application.Evaluate在面值上似乎在这种情况下是相同的。 –

相关问题