Страницы: 1 2 3 След.
RSS
Перенос форматирования ячейки ссылкой
 
Добрый день! Нужна помощь с ссылками с excel. Если использовать ссылку по типу =ЯЧЕЙКА, то данная формула перенесет просто значение ячейки. Скажите, возможно ли, переносить не только значение ячейки, но и полное ее форматирование формулой?
 
{quote}{login=BioVR}{date=20.08.2010 02:12}{thema=Перенос форматирования ячейки ссылкой}{post}Добрый день! Нужна помощь с ссылками с excel. Если использовать ссылку по типу =ЯЧЕЙКА, то данная формула перенесет просто значение ячейки. Скажите, возможно ли, переносить не только значение ячейки, но и полное ее форматирование формулой?{/post}{/quote}Вопрос задавался сотню (и не одну) раз.  
Ответ: Нет.
 
{quote}{login=Serge 007}{date=20.08.2010 02:13}{thema=Re: Перенос форматирования ячейки ссылкой}{post}{quote}{login=BioVR}{date=20.08.2010 02:12}{thema=Перенос форматирования ячейки ссылкой}{post}Добрый день! Нужна помощь с ссылками с excel. Если использовать ссылку по типу =ЯЧЕЙКА, то данная формула перенесет просто значение ячейки. Скажите, возможно ли, переносить не только значение ячейки, но и полное ее форматирование формулой?{/post}{/quote}Вопрос задавался сотню (и не одну) раз.  
Ответ: Нет.{/post}{/quote}  
Спасибо. Тогда такой вопрос, возможно ли написать макрос, который добавит функцию в книгу в виде формулы и в случае ее использования соответственно переносится форматирование и значение ячейки?
 
Макрос написать можно. Покажите на примере, что должно получиться.
 
{quote}{login=Юрий М}{date=20.08.2010 02:43}{thema=}{post}Макрос написать можно. Покажите на примере, что должно получиться.{/post}{/quote}
 
{quote}{login=Юрий М}{date=20.08.2010 02:43}{thema=}{post}Макрос написать можно. Покажите на примере, что должно получиться.{/post}{/quote}  
По не понятным причинам не могу выложить файл на форум, идет сбой отправки сообщения. Вот ссылка:  
 
http://ifolder.ru/18964274  
 
В файле есть запись макроса копирования/вставки. Примерно это он и должен делать, но при этом оставаясь в ячейке в виде функции, по подобию =макрос1(А1).
 
{quote}{login=Юрий М}{date=20.08.2010 02:43}{thema=}{post}Макрос написать можно. Покажите на примере, что должно получиться.{/post}{/quote}  
 
Удалось закрепить на форум :)
 
Я, вообще-то был всегда раньше уверен, что UDF всегда возвращает значение, вычисляемое по значениям указанных ей аргументов...  
А вот чтобы UDF могла ещё и формат ячейки, в которую она вписана, менять... ???  
ИМХО, Сергей правильно ответил: "НЕТ"  
Но вот когда Юрий написАл : "Макрос написать можно."...    
Либо, что-то я в вопросе BioVR не понял, либо Юрий что-то знает о скрытых от большинства возможностей Ёкселя.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=23.08.2010 09:42}{thema=}{post}  
Либо, что-то я в вопросе BioVR не понял, либо Юрий что-то знает о скрытых от большинства возможностей Ёкселя.{/post}{/quote}  
Пусть за базар ответит. Только сейчас он наверное отдыхает после дежурства. Ждем.  
Да не, и The_Prist что-то в этом духе писал. Автору желательно в поиск.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=23.08.2010 10:03}{thema=Re: }{post}Автору желательно в поиск.{/post}{/quote}  
 
Уже искал... и не раз. На запросы с форматированием поиск выдает темы с условным форматированием, что в общем то и логично. Так что поиск пока результатов не дал.
 
Да не, можно конечно по Worksheet_Change анализировать формулу и по результату копировать формат. Но я подожду Юрин вариант. Наверняка у него что-то повкусней.
Я сам - дурнее всякого примера! ...
 
Я на сутках времени пока нет... Именно так и планировал - по Change. Плюс    
If Target.HasFormula Then  
Для Алекса: когда я писал "Макрос написать можно", естественно, имел ввиду, что форматирование будет выполнять макрос :-)
 
Тогда:  
Код
Private Sub Worksheet_Change(ByVal Target As Range)   
    Dim a As String   
    On Error Resume Next   
    Application.EnableEvents = False   
    If Target.HasFormula Then   
        If Len(Target.Formula) > 8 Then Exit Sub   
        a = Replace(Target.Formula, "=", "")   
        If TypeName(Range(a)) <> "Range" Then   
            Application.EnableEvents = True   
        Exit Sub   
        End If   
        Range(a).Copy    '   
        Target.PasteSpecial xlPasteFormats   
    End If   
    Application.CutCopyMode = False   
    Application.EnableEvents = True   
End Sub
Я сам - дурнее всякого примера! ...
 
Но, понятно, что могут быть ляпсусы. В процессе надо будет дорабатывать напильником:-) С колена писалось.
Я сам - дурнее всякого примера! ...
 
KuklP,  
решение, конечно, интересное...    
Но назвать процедуру определения, является ли введённая формула ссылкой на ячейку назвать ФОРМУЛОЙ никак нельзя...    
А топик-стартер, ИМХО, спрашивал именно о формуле...  
Ну, что-то типа: пишешь в какой-то ячейке =ФОРМАТ_ЯЧЕЙКИ(А1) и её формат становится таким же, как и у А1
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=23.08.2010 02:17}{thema=}{post}KuklP,  
А топик-стартер, ИМХО, спрашивал именно о формуле...  
Ну, что-то типа: пишешь в какой-то ячейке =ФОРМАТ_ЯЧЕЙКИ(А1) и её формат становится таким же, как и у А1{/post}{/quote}  
 
Alex_ST, да так, только не много больше - должно перенестись не только форматирование, а также, должно перенестись и значение содержащееся в данной ячейке. Реализовывать необходимо через формулу, т.к. есль потребность при выборе ячейки видеть на какую конкретную ячейку она ссылается.
 
Тогда отслеживать обычную ссылку типа =А1?
 
KuklP,  Ваш код тоже представляет собой решение - в примере у меня переносится только  форматирование типа ячейки (текст/цифра/т.д.), нужно еще чтобы переносился цвет ячейки, остальное можно нарисовать на месте.  
НО, есть одно но - макрос реагирует на все ячейки в которых есть "=" - это не много не корректно, с точки зрения того, что в книге может содержаться куча формул, к которым применять это не нужно.  
 
Видимо, наиболее простым вариантом будет вписать в данный код или написать дополнительно код, в котором простая ссылка "=А1" работала бы через формулу, например "=ФОРМАТ(А1)" (следовательно формула выполняет функцию соответствующую "=А1", а в макросе указываем, что если используется "=ФОРМАТ", то переносить форматирование (цвет и тип ячейки).
 
{quote}{login=Юрий М}{date=23.08.2010 02:48}{thema=}{post}Тогда отслеживать обычную ссылку типа =А1?{/post}{/quote}  
Нет, так тоже не пойдет, т.к. могут присутствовать и обычные ссылки, к которым не нужно применять форматирование источника.
 
{quote}{login=Alex_ST}{date=23.08.2010 02:17}{thema=}{post}KuklP,  
решение, конечно, интересное...    
А топик-стартер, ИМХО, спрашивал именно о формуле...  
Ну, что-то типа: пишешь в какой-то ячейке =ФОРМАТ_ЯЧЕЙКИ(А1) и её формат становится таким же, как и у А1{/post}{/quote}  
Да не, Леш, Юр я писал: "Но, понятно, что могут быть ляпсусы. В процессе надо будет дорабатывать напильником:-) С колена писалось." Так что, пыхтим.
Я сам - дурнее всякого примера! ...
 
Да нет там никаких грубых ляпов, Сергей!  
Всё нормально.  
А по поводу заявления, что мол "макрос реагирует на все ячейки в которых есть "="", так тут BioVR не прав.  
Не разглядел он в твоём коде проверку на то, является ли формула ссылкой на диапазон:  
If TypeName(Range(a)) <> "Range" Then ... Exit Sub  
 
Только я бы ещё проверку на то, что в диапазоне - одна ячейка добавил.  
 
Но всё равно. ЭТО НЕ UDF! И в качестве UDF макрос работает коряво, т.к. пытается выполнить не свойственные UDF функции.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=24.08.2010 09:55}{thema=}{post}  
А по поводу заявления, что мол "макрос реагирует на все ячейки в которых есть "="", так тут BioVR не прав.  
Не разглядел он в твоём коде проверку на то, является ли формула ссылкой на диапазон:  
If TypeName(Range(a)) <> "Range" Then ... Exit Sub  
{/post}{/quote}  
А как быть, если в книге есть просто ссылки на ячейки, в которых нужно просто отображение значение ячейки и есть ссылки, в которых нужно значение+формат?
 
Так и укажите - какие диапазоны макрос должен контролировать, а на какие "не обращать внимания".
 
Никак!  
Ну не может формула возвращать в ячейку (при этом именно в ту ячейку, где она прописана) ничего кроме значения!  
Ну ведь не зря же каждая формула начинается со знака "="  
Это как раз и обозначает, что ЗНАЧЕНИЕ ЭТОЙ ЯЧЕЙКИ равно чему-то вычисляемому по формуле.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=24.08.2010 03:33}{thema=}{post}Никак!  
Ну не может формула возвращать в ячейку (при этом именно в ту ячейку, где она прописана) ничего кроме значения!  
Ну ведь не зря же каждая формула начинается со знака "="  
Это как раз и обозначает, что ЗНАЧЕНИЕ ЭТОЙ ЯЧЕЙКИ равно чему-то вычисляемому по формуле.{/post}{/quote} Компьютер тем и хорош, что всегда есть пути обхода препятствий:-)Это из области "не бывает здоровых людей, бывают плохо обследованные".
Я сам - дурнее всякого примера! ...
 
{quote}{login=Юрий М}{date=24.08.2010 03:28}{thema=}{post}Так и укажите - какие диапазоны макрос должен контролировать, а на какие "не обращать внимания".{/post}{/quote}  
Так тоже нельзя, потому что нет таких диапазонов в книге, нужен вариант использования через функцию.  
Если сейчас в коде указана проверка на формулу, которая ссылается на ячейку и к ней применяется макрос, то значит можно указать проверку на функцию, например =ФОРМАТ(А1) и написать код, в котором данное =ФОРМАТ(А1) будет работать как обычная ссылка - =А1.
 
{quote}{login=Alex_ST}{date=24.08.2010 03:33}{thema=}{post}Никак!  
Ну не может формула возвращать в ячейку (при этом именно в ту ячейку, где она прописана) ничего кроме значения!  
Ну ведь не зря же каждая формула начинается со знака "="  
Это как раз и обозначает, что ЗНАЧЕНИЕ ЭТОЙ ЯЧЕЙКИ равно чему-то вычисляемому по формуле.{/post}{/quote}  
Пусть формула и возвращает только значение, а макрос возвращает форматирование.
 
Может быть я не совсем корректно выражаюсь... Дело в том, что я не очень хорошо, мягко говоря, разбираюсь в VBA программировании и в итоге не могу создавать какие либо не хватающие блоки.  
 
По моему видению, реализация данной функции возможно через:  
1. Макрос, который применит ФОРМАТ в виде функции, которая будет работать через =ФОРМАТ(выбираем ячейку), при этом она выполняет функцию обычной ссылки на ячейку и возвращает значение из нее.  
2. Макрос, который уже есть, проверяет наличие в ячейки =ФОРМАТ и в случае наличия данной функции, он копирует форматирование (тип ячейки и цвет заливки) ячейки на которую ссылается =ФОРМАТ() и вставляет данное форматирование в ячейку в которой прописана функция.
 
Ну, что ж, Сергей... Ты попал!  
Раз BioVR продолжает настаивать на своих заблуждениях, а ты его не разубеждаешь, то напиши примерчик как можно компьютер заставить "обойти это препятствие".  
 
В общем: "Назвался клизмой, полезай в ..."  
:-)  
А я послежу за дискуссией. Вдруг сам чего-то не так понимаю?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Да ради Бога! Так еще проще.  
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
Я сам - дурнее всякого примера! ...
Страницы: 1 2 3 След.
Читают тему
Наверх