2014-10-18 4 views
1

Фон: Я создал шаблон Word, содержащий процедуру, которая создает массив, который содержит заголовок проекта в первом измерении и название цели во втором измерении. Этот массив переносится в таблицу в Excel, которая будет использоваться при создании графика временной шкалы/gantt.Excel Listobject Таблица Вставка строк вызывает ошибку формулы ячейки

Задача: Перестановка помещает информацию о массиве соответствующим образом в таблицу Excel и расширяет размер этой таблицы по желанию. Cell B5 - это начало DataBodyRange и начало того, где я хочу вставить информацию о массиве.

' paste headings from array into excel 
xlWS.Range("B5:C" & UBound(gHeadings, 2)) = xlApp.Transpose(gHeadings) 

То, что не происходит должным образом, находится в последующих ячейках данных внутри таблицы. Линия времени клетка имеет следующую формулу:

=IF(AND(COLUMNS($H$5:H10)>=$E5,COLUMNS($H$5:H10)<=$F5),IF(COLUMNS($H$5:H10)-$E5<ROUND(($F5-$E5+1)*$G5,0),fillblock,""),"") 

Когда транспонирование покрытие, ряд ячеек, содержащие ошибки, на которые ссылаются формула на строке таблицы, которая была оригинальной последней строкой DataBodyRange. В этой строке, строка 10, формула получает изменилось от того, что отображается выше:

=IF(AND(COLUMNS($H$5:H119)>=$E10,COLUMNS($H$5:H119)<=$F10),IF(COLUMNS($H$5:H119)-$E10<ROUND(($F10-$E10+1)*$G10,0),fillblock,""),"") 

Любые мысли или понимания того, почему это происходит, и как это предотвратить?

+0

Точная проблема немного неясна. Является ли формула меняющейся единственной проблемой? Если нет, пожалуйста, уточните. Что касается формулы, вы не можете добавить '$' перед частями, которые вы не хотите менять? (Например, вы не хотите, чтобы H10 изменился на H119, поэтому измените его на $ H $ 10). Если это не вариант, можете ли вы предоставить полные процедуры, которые ваш код выполняет с массивом и даже пример некоторых данных массива ? –

+0

Приношу извинения за любую путаницу. Позвольте мне попытаться разъяснить. Транспонирование массива в таблицу будет автоматически вставлять строки в таблицу. Эта часть кода, показанная выше, работает по назначению. Проблема заключается в следующем: шаблон уже имеет формулу ячейки в ячейках, начинающихся с столбца H. Когда новые строки вставляются в таблицу с транспозицией, эта формула должна копироваться во все новые строки. Это происходит со всеми строками вставки, за исключением указанной строки. По какой-то причине Excel изменил ссылку на эту строку, чтобы указать на последнюю строку таблицы –

ответ

0

Общий ответ о том, почему таблицы Excel ведут себя так, как я описал, не получил ответа. Но, вот мое обходное решение. Снижение скорости незначительно.

' variable to hold the formula and fix the double-quote ("") issue in vba 
     sEmpty = Chr(34) & Chr(34) 
     sFormula = "=IF(AND(COLUMNS($H$5:H5)>=$E5,COLUMNS($H$5:H5)<=$F5),IF(COLUMNS($H$5:H5)-$E5<ROUND(($F5-$E5+1)*$G5,0),fillblock," & sEmpty & ")," & sEmpty & ")" 

    ' paste cell formula into the new worksheet 
     lTblRows = xlLO.DataBodyRange.Rows.Count 
     xlWS.Range("H5:AK" & lTblRows + 4).Formula = sFormula 

Это эффективно копирует формулу в каждую ячейку ссылаются в таблице, копирование над клетками, которые получили MIS-ссылки во время вставки строки.

Смежные вопросы