Добрый день! Нужна помощь с ссылками с excel. Если использовать ссылку по типу =ЯЧЕЙКА, то данная формула перенесет просто значение ячейки. Скажите, возможно ли, переносить не только значение ячейки, но и полное ее форматирование формулой?
Перенос форматирования ячейки ссылкой
20.08.2010 14:12:46
|
|
|
|
20.08.2010 14:43:16
Макрос написать можно. Покажите на примере, что должно получиться.
|
|
|
|
20.08.2010 16:11:15
{quote}{login=Юрий М}{date=20.08.2010 02:43}{thema=}{post}Макрос написать можно. Покажите на примере, что должно получиться.{/post}{/quote}
|
|
|
|
20.08.2010 16:16:09
{quote}{login=Юрий М}{date=20.08.2010 02:43}{thema=}{post}Макрос написать можно. Покажите на примере, что должно получиться.{/post}{/quote}
По не понятным причинам не могу выложить файл на форум, идет сбой отправки сообщения. Вот ссылка: В файле есть запись макроса копирования/вставки. Примерно это он и должен делать, но при этом оставаясь в ячейке в виде функции, по подобию =макрос1(А1). |
|
|
|
23.08.2010 08:59:16
{quote}{login=Юрий М}{date=20.08.2010 02:43}{thema=}{post}Макрос написать можно. Покажите на примере, что должно получиться.{/post}{/quote}
Удалось закрепить на форум :) |
|
|
|
23.08.2010 11:56:33
Но, понятно, что могут быть ляпсусы. В процессе надо будет дорабатывать напильником:-) С колена писалось.
Я сам - дурнее всякого примера! ...
|
|
|
|
23.08.2010 14:17:22
KuklP,
решение, конечно, интересное... Но назвать процедуру определения, является ли введённая формула ссылкой на ячейку назвать ФОРМУЛОЙ никак нельзя... А топик-стартер, ИМХО, спрашивал именно о формуле... Ну, что-то типа: пишешь в какой-то ячейке =ФОРМАТ_ЯЧЕЙКИ(А1) и её формат становится таким же, как и у А1 |
|
|
|
23.08.2010 14:44:13
{quote}{login=Alex_ST}{date=23.08.2010 02:17}{thema=}{post}KuklP,
А топик-стартер, ИМХО, спрашивал именно о формуле... Ну, что-то типа: пишешь в какой-то ячейке =ФОРМАТ_ЯЧЕЙКИ(А1) и её формат становится таким же, как и у А1{/post}{/quote} Alex_ST, да так, только не много больше - должно перенестись не только форматирование, а также, должно перенестись и значение содержащееся в данной ячейке. Реализовывать необходимо через формулу, т.к. есль потребность при выборе ячейки видеть на какую конкретную ячейку она ссылается. |
|
|
|
23.08.2010 14:48:08
Тогда отслеживать обычную ссылку типа =А1?
|
|
|
|
23.08.2010 14:56:39
KuklP, Ваш код тоже представляет собой решение - в примере у меня переносится только форматирование типа ячейки (текст/цифра/т.д.), нужно еще чтобы переносился цвет ячейки, остальное можно нарисовать на месте.
НО, есть одно но - макрос реагирует на все ячейки в которых есть "=" - это не много не корректно, с точки зрения того, что в книге может содержаться куча формул, к которым применять это не нужно. Видимо, наиболее простым вариантом будет вписать в данный код или написать дополнительно код, в котором простая ссылка "=А1" работала бы через формулу, например "=ФОРМАТ(А1)" (следовательно формула выполняет функцию соответствующую "=А1", а в макросе указываем, что если используется "=ФОРМАТ", то переносить форматирование (цвет и тип ячейки). |
|
|
|
23.08.2010 14:58:55
{quote}{login=Юрий М}{date=23.08.2010 02:48}{thema=}{post}Тогда отслеживать обычную ссылку типа =А1?{/post}{/quote}
Нет, так тоже не пойдет, т.к. могут присутствовать и обычные ссылки, к которым не нужно применять форматирование источника. |
|
|
|
24.08.2010 03:45:40
{quote}{login=Alex_ST}{date=23.08.2010 02:17}{thema=}{post}KuklP,
решение, конечно, интересное... А топик-стартер, ИМХО, спрашивал именно о формуле... Ну, что-то типа: пишешь в какой-то ячейке =ФОРМАТ_ЯЧЕЙКИ(А1) и её формат становится таким же, как и у А1{/post}{/quote} Да не, Леш, Юр я писал: "Но, понятно, что могут быть ляпсусы. В процессе надо будет дорабатывать напильником:-) С колена писалось." Так что, пыхтим.
Я сам - дурнее всякого примера! ...
|
|
|
|
24.08.2010 09:55:19
Да нет там никаких грубых ляпов, Сергей!
Всё нормально. А по поводу заявления, что мол "макрос реагирует на все ячейки в которых есть "="", так тут BioVR не прав. Не разглядел он в твоём коде проверку на то, является ли формула ссылкой на диапазон: If TypeName(Range(a)) <> "Range" Then ... Exit Sub Только я бы ещё проверку на то, что в диапазоне - одна ячейка добавил. Но всё равно. ЭТО НЕ UDF! И в качестве UDF макрос работает коряво, т.к. пытается выполнить не свойственные UDF функции. |
|
|
|
24.08.2010 15:26:10
{quote}{login=Alex_ST}{date=24.08.2010 09:55}{thema=}{post}
А по поводу заявления, что мол "макрос реагирует на все ячейки в которых есть "="", так тут BioVR не прав. Не разглядел он в твоём коде проверку на то, является ли формула ссылкой на диапазон: If TypeName(Range(a)) <> "Range" Then ... Exit Sub {/post}{/quote} А как быть, если в книге есть просто ссылки на ячейки, в которых нужно просто отображение значение ячейки и есть ссылки, в которых нужно значение+формат? |
|
|
|
24.08.2010 15:28:34
Так и укажите - какие диапазоны макрос должен контролировать, а на какие "не обращать внимания".
|
|
|
|
24.08.2010 15:33:01
Никак!
Ну не может формула возвращать в ячейку (при этом именно в ту ячейку, где она прописана) ничего кроме значения! Ну ведь не зря же каждая формула начинается со знака "=" Это как раз и обозначает, что ЗНАЧЕНИЕ ЭТОЙ ЯЧЕЙКИ равно чему-то вычисляемому по формуле. |
|
|
|
24.08.2010 15:43:04
{quote}{login=Alex_ST}{date=24.08.2010 03:33}{thema=}{post}Никак!
Ну не может формула возвращать в ячейку (при этом именно в ту ячейку, где она прописана) ничего кроме значения! Ну ведь не зря же каждая формула начинается со знака "=" Это как раз и обозначает, что ЗНАЧЕНИЕ ЭТОЙ ЯЧЕЙКИ равно чему-то вычисляемому по формуле.{/post}{/quote} Компьютер тем и хорош, что всегда есть пути обхода препятствий:-)Это из области "не бывает здоровых людей, бывают плохо обследованные".
Я сам - дурнее всякого примера! ...
|
|
|
|
24.08.2010 16:14:26
{quote}{login=Юрий М}{date=24.08.2010 03:28}{thema=}{post}Так и укажите - какие диапазоны макрос должен контролировать, а на какие "не обращать внимания".{/post}{/quote}
Так тоже нельзя, потому что нет таких диапазонов в книге, нужен вариант использования через функцию. Если сейчас в коде указана проверка на формулу, которая ссылается на ячейку и к ней применяется макрос, то значит можно указать проверку на функцию, например =ФОРМАТ(А1) и написать код, в котором данное =ФОРМАТ(А1) будет работать как обычная ссылка - =А1. |
|
|
|
24.08.2010 16:16:06
{quote}{login=Alex_ST}{date=24.08.2010 03:33}{thema=}{post}Никак!
Ну не может формула возвращать в ячейку (при этом именно в ту ячейку, где она прописана) ничего кроме значения! Ну ведь не зря же каждая формула начинается со знака "=" Это как раз и обозначает, что ЗНАЧЕНИЕ ЭТОЙ ЯЧЕЙКИ равно чему-то вычисляемому по формуле.{/post}{/quote} Пусть формула и возвращает только значение, а макрос возвращает форматирование. |
|
|
|
24.08.2010 16:22:32
Может быть я не совсем корректно выражаюсь... Дело в том, что я не очень хорошо, мягко говоря, разбираюсь в VBA программировании и в итоге не могу создавать какие либо не хватающие блоки.
По моему видению, реализация данной функции возможно через: 1. Макрос, который применит ФОРМАТ в виде функции, которая будет работать через =ФОРМАТ(выбираем ячейку), при этом она выполняет функцию обычной ссылки на ячейку и возвращает значение из нее. 2. Макрос, который уже есть, проверяет наличие в ячейки =ФОРМАТ и в случае наличия данной функции, он копирует форматирование (тип ячейки и цвет заливки) ячейки на которую ссылается =ФОРМАТ() и вставляет данное форматирование в ячейку в которой прописана функция. |
|
|
|
24.08.2010 16:26:26
Ну, что ж, Сергей... Ты попал!
Раз BioVR продолжает настаивать на своих заблуждениях, а ты его не разубеждаешь, то напиши примерчик как можно компьютер заставить "обойти это препятствие". В общем: "Назвался клизмой, полезай в ..." :-) А я послежу за дискуссией. Вдруг сам чего-то не так понимаю? |
|
|
|
24.08.2010 17:01:50
Да ради Бога! Так еще проще.
Private Sub Worksheet_Change(ByVal Target As Range) Dim a As String On Error Resume Next If Target.HasFormula Then If UCase(Left(Target.Formula, 2)) <> "=F" Then Exit Sub Application.EnableEvents = False a = Mid(Target.Formula, 4, Len(Target.Formula) - 4) If TypeName(Range(a)) <> "Range" Then Application.EnableEvents = True Exit Sub End If Range(a).Copy ' Target.PasteSpecial xlPasteFormats Target.Formula = "=" & a End If Application.CutCopyMode = False Application.EnableEvents = True End Sub
Я сам - дурнее всякого примера! ...
|
||||
|
|
|||
Читают тему