我有两个不同的excel工作簿,一个叫做DATA,一个叫做ReportTemplate。所以现在我需要将DATA中的数据插入ReportTemplate中的相应行/列。
我现在的表现如下: '其他(这是其他货币)
DATA_FILE.activate
Sheets("SA_FX_2").select
SRC_SA_FX_2_D25 = Range("D25").Value
SRC_SA_FX_2_E25 = Range("E25").Value
SRC_SA_FX_2_F25 = Range("F25").Value
SRC_SA_FX_2_G25 = Range("G25").Value
SRC_SA_FX_2_H25 = Range("H25").Value
REPORTTEMPLATE_FILE.activate
Sheets("SA_FX_2").select
Range("D36").Value = SRC_SA_FX_2_D25
Range("E36").Value = SRC_SA_FX_2_E25
Range("F36").Value = SRC_SA_FX_2_F25
Range("G36").Value = SRC_SA_FX_2_G25
Range("H36").Value = SRC_SA_FX_2_H25
SRC_SA_FX_2_X25用于存储DATA中特定单元格的值,然后将其插入Range(" X36")。REPORTTEMPLATE中的值。所以目前我正在进行"映射"以硬编码的方式。
这就是我的DATA的样子: DATA TEMPLATE
这就是我的REPORTTEMPLATE的样子:REPORTTEMPLATE
对于"其他"以上货币,它们都是固定的,所以我可以对单元格进行硬编码。
但是,如果有任何新货币,我的宏应检测到该货币,然后在下拉列表中选择货币,然后进行映射。
如何实际参数化上面的代码以映射其余货币?
感谢您的建议。
答案 0 :(得分:0)
一种简单的方法是MATCH
他们喜欢:
'we look for rows 3 to 5 of DATA_FILE in REPORTTEMPLATE_FILE
Dim i As Long, OutRow As Variant, wsIn As Worksheet, wsOut As Worksheet
Set wsIn = DATA_FILE.Sheets("SA_FX_2")
Set wsOut = REPORTTEMPLATE_FILE.Sheets("SA_FX_2")
For i = 3 To 5
'get the row of the active item in REPORTTEMPLATE_FILE
OutRow = Application.Match(wsIn.Cells(i, 3).Value2, wsOut.Columns(3), 0)
If Not IsNumeric(OutRow) Then OutRow = Application.Match("-- Please Select Currency --", wsOut.Columns(3), 0) 'not there -> new line
wsOut.Range("C" & OutRow & ":H" & OutRow).Value2 = wsIn.Range("C" & i & ":H" & i).Value2
Next
只需更改For i = 3 To 5
以满足您的需求,并检查"-- Please Select Currency --"
是否匹配。
如果您有任何问题或疑问,请询问;)