2016-06-30 2 views
0

Я создал скрипт, который сравнивает столбцы в двух разных листах с sse, если одни и те же значения найдены в обоих документах.Вставка формулы через VBA со ссылкой на другой лист не работает. Нужно обходное решение

Я делаю это, вставляя формулу через VBA в один из двух документов.

формула: =IF(ISNA(MATCH(A1;'[Filename]SheetName'!$B:$B;0));"NO MATCH","MATCH")

Проблема заключается в том, что если SheetName является ничем иным, кроме Sheet(insert number here) скрипт не работает. Я не знаю, почему он не узнает лист, но мне нужно обходное решение для этого.

VBA сценария:

Formula1 = "=IF(ISNA(MATCH(" & Chr(col1 + 64) & MyCell1 & ",'[" & fi2 & "]" & SheetName & "'!$" & Chr(col3 + 64) & ":$" & Chr(col3 + 64) & ",0)),""NO MATCH"",""MATCH"")" 

Formula2 = "=IF(" & Chr(col1 + 65) & MyCell1 & "=""NO MATCH"",""-"",IF(INDEX('[" & fi2 & "]" & SheetName & "'!$" & Chr(col4 + 64) & ":$" & Chr(col4 + 64) & ",MATCH(" & Chr(col1 + 64) & MyCell1 & ",'[" & fi2 & "]" & SheetName & "'!$" & Chr(col3 + 64) & ":$" & Chr(col3 + 64) & ",0))=" & Chr(col21 + 63) & MyCell1 & ",""MATCH"",""NO MATCH""))" 

With Range(myRange1) 

     .NumberFormat = "General" 
     .Value = Formula1 
     .Value = .Value 
     .HorizontalAlignment = xlCenter 
     .ColumnWidth = 27 

End With 

With Range(myRange2) 

     .NumberFormat = "General" 
     .Value = Formula2 
     .Value = .Value 
     .HorizontalAlignment = xlCenter 
     .ColumnWidth = 27 

End With 
+0

Код выглядит нормально для меня, кроме того, что иногда вы добавляете 65 к номеру столбца, иногда 64 или 63 (вы можете найти ссылки R1C1 проще). Что на самом деле происходит с другими именами листов? – Rory

+0

Не могли бы вы объяснить, к чему относятся некоторые из переменных, которые вы используете? (т. е. 'fi2') – RGA

+0

Перед тем, как использовать vba, вы должны проверить свои функции в ячейке, чтобы убедиться, что они действительно работают. – phil652

ответ

0

Если SheetName является WorkSheet то в вашей формуле, вы должны написать SheetName.Name Кроме того, я не уверен в ' до и после названия рабочей книги и рабочего листа.

+0

Имя_файла определяется в соответствии с 'SheetName = ActiveSheet.Name' ранее в скрипте. Что касается '' 's, я просто попытался сделать формулу« Формула-1 »и« Формула-2 »похожим на то, как выглядела бы формула перекрестного файла. –

+0

Хорошо. Как вам было ранее предложено: можете ли вы рассказать нам, что означают ваши переменные? (MyCell1, fi2, SheetName, ...) Без этого мы не можем попробовать и запустить код в том же контексте, что и вы, поэтому трудно догадаться, в чем проблема. Кроме того, когда вы говорите, что сценарий не запускается, значит ли это ошибка во время выполнения, ошибка компиляции, ...? –