2013-09-11 3 views
6

Я пытаюсь установить формулу для ячейки с использованием (динамически созданного) имени листа и фиксированного адреса ячейки. Я использую следующую строку, но не могу заставить его работать:VBA, устанавливающий формулу для ячейки

"=" & strProjectName & "!" & Cells(2, 7).Address 

Любые советы о том, почему это не работает или прод в правильном направлении было бы весьма признателен.

Заранее спасибо

+0

я не пробовал вашу формулу, но в качестве альтернативы вы можете всегда создавать изменения событие в модуле рабочего листа и сделать расчет программно. – Trace

+1

Что такое примерное значение для 'strProjectName'? Вы пытаетесь ссылаться на рабочий лист или книгу, которая не существует? – Stewbob

+0

В этот момент он не существует, но несколько строк позже создается лист. Не думал бы, что это будет проблемой, когда макрос заканчивается; лист на месте – Ryuu

ответ

12

Не уверен, что не работает в вашем случае, но следующий код поместит формулу в ячейку A1, которая будет извлекать значение в ячейке G2.

strProjectName = "Sheet1" 
Cells(1, 1).Formula = "=" & strProjectName & "!" & Cells(2, 7).Address 

Учебное пособие и рабочий лист, который должен существовать strProjectName ссылки в то время, что эта формула помещается. Excel немедленно попытается оценить формулу. Возможно, вы сможете остановить это, если отключить автоматический пересчет до тех пор, пока книга не будет существовать.

+0

Это то, что я делал, но он не разрешает формулу - просто показывает #REF! Если это какая-то помощь, всякий раз, когда я запускаю макрос; он открывает диалоговое окно просмотра файла после передачи этой точки в коде – Ryuu

+0

@Ryuu, если он запрашивает имя файла, то strProjectName не указывает на действительное имя листа. Полная ссылка для формулы: ** [Имя_файла] Имя_файла! Адрес **. Вы можете пропустить [Имя файла] для текущего файла, и вы можете пропустить имя файла [Имя_файла] для текущего листа, но это единственные комбинации, допустимые в ссылке на ячейку – SeanC

+0

@Ryuu Если у вашего имени проекта есть пробел, вы должны добавьте один кавычек до и после имени проекта. – pashute

4

Try:

.Formula = "='" & strProjectName & "'!" & Cells(2, 7).Address 

Если имя листа (strProjectName) имеет пробелы, нужно включить одинарные кавычки в формуле строки.

Если это не разрешено, предоставьте дополнительную информацию о конкретной ошибке или ошибке.

Update

В комментариях вы указываете, что вы заменяя пробелы на подчеркивания. Может быть, вы делаете что-то вроде:

strProjectName = Replace(strProjectName," ", "_") 

Но если вы не подталкивают, что изменения в Worksheet.Name собственности, вы можете ожидать, это произойдет:

  1. Диалог файла просмотра появляется
  2. Формула возвращает #REF error

Причина того, что вы передаете ссылку на лист, который не существует, что является wh y вы получаете ошибку #REF. Диалоговое окно файла - это попытка позволить вам исправить эту ссылку, указав файл, в котором указано имя листа .. Когда вы отменяете, ожидается ошибка #REF.

Так что вам нужно сделать:

Worksheets(strProjectName).Name = Replace(strProjectName," ", "_") 
strProjectName = Replace(strProjectName," ", "_") 

Тогда ваша формула должна работать.

+0

Я занимаюсь проблемой пространства, заменяя пробелы символами подчеркивания. Нет никакой ошибки как таковой, она просто не разрешает формулу (показывает #REF!) Если это какая-то помощь, всякий раз, когда я запускаю макрос; он открывает диалоговое окно просмотра файла после передачи этой точки в коде – Ryuu

+0

Если вы не также нажимаете функцию 'REPLACE' на свойство« Worksheet.Name », это именно то, что я ожидаю. См. Ревизию выше. –

+0

@ Комментарии Stewbob выше указывают на основную причину ошибки. Поместите формулу ** после ** листа. то вы должны быть настроены. –

0

Если вы хотите сделать адрес напрямую, рабочий лист должен существовать.

Отключение автоматического перерасчета хочу помочь вам :)

Но ... вы можете получить значение косвенно ...

.FormulaR1C1 = "=INDIRECT(ADDRESS(2,7,1,0,""" & strProjectName & """),FALSE)" 

Введенная формула вернет ошибку #REF, поскольку лист strProjectName не существует.

Но после этого листа таблицы Excel будет вычислять формулу снова и будет отображаться правильное значение.
Недостаток: отслеживания не будет, поэтому, если вы переместите ячейку или измените имя рабочего листа, формула не будет корректироваться к изменениям, как в прямой адресации.

0

Если Cells (1, 1) .Formula дает ошибку 1004, как в моем случае, изменяет его:

Cells(1, 1).FormulaLocal 
Смежные вопросы