Высокие статистические технологии

Форум сайта семьи Орловых

Текущее время: Чт ноя 07, 2024 12:02 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Вставка формулы из модуля VBA в лист рабочей книги
СообщениеДобавлено: Ср окт 04, 2006 6:40 pm 
Не в сети

Зарегистрирован: Ср окт 04, 2006 6:18 pm
Сообщений: 7
Задача:
Необходимо из модуля VBA в ячейку "C1" рабочего листа вставить формулу "=ГИПЕРССЫЛКА(A1;B1)" .
Параметры гиперссылки А1 и В1 должны формироваться программо в модуле VBA.
Знатоки, подскажите решение (list code).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 05, 2006 9:16 am 
Не в сети

Зарегистрирован: Ср окт 04, 2006 10:05 am
Сообщений: 47
Удалено


Последний раз редактировалось Игорь Пн май 07, 2007 4:04 pm, всего редактировалось 2 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 05, 2006 11:52 pm 
Не в сети

Зарегистрирован: Пн дек 19, 2005 10:45 am
Сообщений: 19
Предыдущий совет естественно работать не будет, ибо формулы вводятся либо в стандартном виде (англ.), либо с учётом национальных настроек. Да, и выделять ячейку перед изменением свойств, необходимо только в первые три знакомства с VBA, ибо это действие, в большинстве случаев, является ненужным.

Код:
Private Sub Formula()
    Worksheets(1).Range("C1").Formula = "=HYPERLINK(A1,B1)"
End Sub

Private Sub FormulaLocal()
    Worksheets(1).Range("C1").FormulaLocal = "=ГИПЕРССЫЛКА(A1;B1)"
End Sub


Предполагается, что в активной рабочей книге существует как минимум один рабочий лист, и первый рабочий лист и ячейка "C1" незащищены.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 07, 2006 1:59 pm 
Не в сети

Зарегистрирован: Ср окт 04, 2006 10:05 am
Сообщений: 47
Удалено


Последний раз редактировалось Игорь Пн май 07, 2007 4:04 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 07, 2006 2:45 pm 
Не в сети

Зарегистрирован: Пн дек 19, 2005 10:45 am
Сообщений: 19
Цитата:
Должно сработать. © Игорь Чт Окт 05, 2006 9:16 am


Цитата:
Конечно, не будет. Это же не кусок кода ... © Игорь Сб Окт 07, 2006 1:59 pm


Если прочитать внимательно второй пост, то там достаточно чётко говорится о том, что представленный вариант является оператором (инструкцией) т.е. является кодом. А почему одну единственную инструкцию нельзя сразу опубликовать без ошибок, мы видимо никогда не узнаем. Конечно, гораздо легче сваливать всё на необходимость просмотра рекламируемого проекта, чем признать свою ошибку, ибо для последнего - нужно иметь мужество.

Цитата:
У меня шла речь о выделении ячейки? Очень интересно. Установить курсор на нужную ячейку, конечно же, следует средствами VBA. © Игорь Сб Окт 07, 2006 1:59 pm


Я внимательно читаю сообщения, поэтому повторюсь, что выделять ячейку в т.ч. и программно, перед изменением свойств, необходимо только в первые три знакомства с VBA, ибо это действие, в большинстве случаев, является ненужным и данный вопрос не является исключением.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 07, 2006 4:44 pm 
Не в сети

Зарегистрирован: Ср окт 04, 2006 10:05 am
Сообщений: 47
Удалено


Последний раз редактировалось Игорь Пн май 07, 2007 4:05 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 07, 2006 6:51 pm 
Не в сети

Зарегистрирован: Пн дек 19, 2005 10:45 am
Сообщений: 19
Всегда приятно общаться с человеком, который может признать свои заблуждения, поэтому сразу оговорюсь, что и я заблуждался - когда подозревал отсутствие весьма нужной, на мой взгляд, черты характера.

Что касается стиля ссылок R1C1, то при желании, формулу можно ввести с учётом этой нотации, но в данном конкретном случае, это наверное не имеет особого смысла.

Код:
Private Sub FormulaR1C1()
    Workbooks("Имя_Книги.xls").Worksheets("Имя_Листа").Range("C1").FormulaR1C1 = "=HYPERLINK(RC[-2],RC[-1])"
End Sub


Код:
Private Sub FormulaR1C1Local()
    Workbooks(Индекс_Книги).Worksheets(Индекс_Листа).Cells(3).FormulaR1C1Local = "=ГИПЕРССЫЛКА(RC[-2];RC[-1])"
End Sub


Примечание :
- В первом примере используются абстрактные имена рабочей книги и листа, поэтому они могут отличаться от реально существующих.
- Во втором примере используются номера рабочей книги и листа, которые также могут отличаться. Более того, использовать индекс применительно к рабочей книги, лично я, не советую.
- Во всех двух примерах, стандартная функция рабочего листа =ГИПЕРССЫЛКА() вводится в ячейку "C1"

При необходимости можно проверить : открыта ли указанная книга и наличествует ли в ней нужный рабочий лист (первая проверка теряет смысл, если нужная книга была открыта Вашим макросом, а вторая проверка не нужна, если рабочий лист также был создан программно)

Информация к размышлению :
Эти способы, в отличии от выделения, имеют свои преимущества, во-первых они позволяют изменять значение ячейки (если это возможно, см. пост#3) которая может принадлежать неактивному рабочему листу и неактивной рабочей книги. Во-вторых, выделение это операция, которая снижает скорость выполнения кода (даже, если во время выполнения кода, значение свойства ScreenUpdating об'екта Application установлено = False) Понятно, что говорить о оптимизации применительно к единственной ячейке - несерьёзно, но всё изменится, если речь пойдёт о обработке данных целого листа.

Кстати, для тех кого интересует только авторитетное мнение маститых старцев, скажу, что общий смысл моих высказываний, насчёт ненужности выделения, совпадает с аналогичным утверждением Джона Уокенбаха.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 12, 2006 3:41 pm 
Не в сети

Зарегистрирован: Ср окт 04, 2006 6:18 pm
Сообщений: 7
mart313 благодарит Игоря и Pashulku за ответ на мой вопрос. Вопрос закрыт!.
Ключевой момент - если хочешь присвоить ячейке значение равное формуле необходимо учитывать ... ЛОКАЛИЗАЦИЮ (!).
Т.е для "передачи" в ячейку значения в виде формулы записанной на русском языке необходимо использовать "FormulaLocal", а не "Formula".

PS. Для полного счастья всегда не хватает какой-то мелочи! :D
Вроде той, на которую Вы мне указали.
Еще раз благодарю!.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB