2016-08-16 76 views
0

我有2个不同的Excel工作簿,一个叫做DATA,一个叫ReportTemplate。所以现在我需要将数据从DATA插入到ReportTemplate中相应的行/列中。VBA:Loop来映射来自2个不同工作簿的数字

如何我现在做的是,例如: “其他(这是对其他货币)

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是存储值中数据的特定细胞,然后将其插入范围(“X36”)。REPORTTEMPLATE中的值。所以目前我正在以硬编码的方式进行“映射”。

这是我的数据看起来像: DATA TEMPLATE

这是我REPORTTEMPLATE看起来像:REPORTTEMPLATE

对于“其他”及以上的货币,它们都是固定的,这样我就可以硬编码单元格。

但是,如果有任何新货币,我的宏应该检测到,然后在下拉列表中选择货币,并进行映射。

我怎样才能实际参数化我的代码上面为了其余货币的映射?

谢谢您的建议。

回答

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 --"不匹配。

如果您有任何疑问或问题,只问;)

+0

喜德克,我想了解这 OutRow = Application.Match(wsIn.Cells(I,3).Value2,wsOut.COLUMNS( 3),0)。所以这试图将wsIn.cells(i,3).value2与wsOut.columns(3)匹配,但后面的.value2和0是什么意思? – Chun

+0

@Chun'Value2'只是单元格内的值。和'0'完全匹配(或者找到完全相同的,或者返回错误)。 –

+0

当我厌倦调试outrow = application.match ...给我outRow =错误2042,和wsout.Range = wsIn.Range给我类型不匹配。可能是造成这个问题的原因是什么? – Chun

相关问题