2016-08-16 6 views
0

У меня есть две разные книги excel, одна называется DATA, а одна называется ReportTemplate. Поэтому теперь мне нужно вставить данные из DATA в соответствующую строку/столбец в ReportTemplate.VBA: Цикл для сопоставления рисунков из 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 для хранения значений для этой конкретной ячейки в DATA, а затем вставьте его в диапазон («X36»). Значение в REPORTTEMPLATE. Поэтому в настоящее время я делаю «сопоставление» жестко.

Это как мой DATA выглядит следующим образом: 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