Страницы: 1
RSS
Макрос для автоматического переименовывания листа по значению из ячейки с формулой
 
У меня есть макрос:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("А1") Then
        If Target.Value <> "" Then
            If Len(Target.Value) < 30 Then
                Target.Parent.Name = Target.Value
            End If
        End If
    End If
End Sub
То есть когда изменяется ячейка А1, название соответствующего листа меняется автоматически. Но у меня в А1 не просто текст или числа. Применяется формула. И пока я не нажму снова на эту ячейке в формулу не нажму ентер, название листа не меняется. Макросу нужно вручную показывать что расчет произошел и теперь его значение другое. Пробовала сама получилось примерно вот это:
Код
Sub Ìàêðîñ1()

    Range("А1").Select
    ActiveCell.FormulaR1C1 = "=TEXT(RC[-10],""ää.ÌÌ.ãããã"")&R[1]C[-1]"
    Range("А2").Select
End Sub
Но совместить их правильно я не смогла. Чего-то не работает да и как совмещать правильно не знаю.
Во вложении есть файл с примером.
Z в макросах не бум бум. Надеюсь на Вашу помощь! Заранее спасибо!

P.S. В примере макрос находится: Исходный текст  -  контекстное меню листа
Изменено: Honey - 07.09.2015 13:36:09
 
на второй ссылке в поиске в модуль листа
Код
Private Sub Worksheet_Calculate()
    Me.Name = Me.Cells(1, 1)
End Sub
Лень двигатель прогресса, доказано!!!
 
Сергей, спасибо большое! Я была бы благодарна, если бы к тому же и объяснили еще подробней что и куда)))
Простите, я совсем чайник...
Изменено: Honey - 07.09.2015 12:37:11
 
вот
Лень двигатель прогресса, доказано!!!
 
Сергей,УАУ!!! То есть Вы тот макрос вообще убрали? Это так круто! Спасибо большое прибольшое!!! А можете объяснить почему так? Что означает именно этот макрос?

И еще вопрос... Если мои исходные данные находятся не в вышеуказанных ячейках а в С1 и Н3? Как тогда мне быть? Можно ли переформировывать макрос?
Изменено: Honey - 07.09.2015 12:44:20
 
Цитата
Honey написал: А можете объяснить
неа, патамушто я тоже чайник макрос нашел поиском а лезть в справку мне лень
Лень двигатель прогресса, доказано!!!
 
Что Вы хотите, чтобы получилось?
В верхнем макросе - код, который срабатывает только на событие "Изменение (..._Change) значения в ячейке".
Это событие происходит, если Вы нажали на яч. например F2? а затем - ентер..
В самом коде написано, что отслеживаются 3 условия первое из которых - это изменение значения в яч. А1 (If Target = Range("А1") Then).

Ваш код - это просто запись макрорекордером процесса редактирования ячейки А1, в которой записана формула.

Если Вы хотите, чтобы изменение названия листа происходило только для первого листа - внесите в модуль этого листа код, предложенный Сергеем.
Если для любого активного листа - тогда в модуль книги внесите код, похожий на код Сергея:
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    With Me.ActiveSheet
    .Name = .Cells(1, 1)
    End With
End Sub
или в модуль каждого листа код Сергея.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Но в А1 должна быть формула
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Honey написал: Если мои исходные данные находятся не в вышеуказанных ячейках а в С1 и Н3?
А это куда применить? Из какой ячейки должно браться наименование листа?
Согласие есть продукт при полном непротивлении сторон
 
Каждый день будут создаваться новые листы в книге. И соответственно каждый день меняется дата и фамилия в ячейках. Поэтому я хочу чтобы в зависимости кто и когда применял файл изменялось название соответствующего листа, просто чтобы было легче прослеживать и далее применять данную информацию для др формул. При этом возможно в будущем названия листов будут исходить из других ячеек на этом листе. Как мне это можно контролировать? В макросе, который я использовала до этого есть пометка из какой именно ячейки берутся данные. Можно что-то вроде этого?
 
Цитата
Honey написал: Вы тот макрос вообще убрали?
Тот макрос отслеживал 3 условия, макрос Сергея - только одно.
Условия, что А1 не пустая If Target.Value <> "" Then) и что его длина не больше 30 символов (If Len(Target.Value) < 30 Then) - он не отслеживал.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал: Но в А1 должна быть формула
А если она будет меняться? Например не в А1 а в М6?
 
.Cells(6, 13)
Изменено: Сергей - 07.09.2015 12:56:00
Лень двигатель прогресса, доказано!!!
 
Может лучше вести ЛОГ работы с файлом?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, это нужно мне также для того, чтобы путь к данным в листе я могла применять в формуле ДВССЫЛ... Мне так удобнее будет...
Но статью обязательно прочитаю. Уже взяла себе на заметку. Спасибо!!!)))
 
Цитата
Honey написал:
При этом возможно в будущем названия листов будут исходить из других ячеек на этом листе
Возможно Вам поможет вот такой вариант.
Дать собственное имя той ячейке, из которой макросом будет браться имя для листа.
Тогда эту ячейку можно перетаскивать (или "вырезать-вставить") в любое место листа.
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    With Me.ActiveSheet
    .Name = .Range("ИмяЛиста")
    End With
End Sub
А вообще - Ваш подход, на мой взгляд, не очень удачный...
Цитата
Honey написал:
Каждый день будут создаваться новые листы в книге. И соответственно каждый день меняется дата и фамилия в ячейках. Поэтому я хочу чтобы в зависимости кто и когда применял файл изменялось название соответствующего листа, просто чтобы было легче прослеживать и далее применять данную информацию для др формул
Вы сколько листов планируете создать в одной книге? [рабочих дней в году] * [кол-во менеджеров]? У Вас достаточно мощный компьютер?
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев,спасибо большое! Ваш последний вариант - то, что нужно! Насчет остального: компьютер достаточно мощный, до этого они просто вручную переименовывали листы - у каждого свой формат, поэтому удобнее если все будет автоматически выводиться в одном. Книга создается на месяц, каждый день по 10 максимум новых листов на одного менеджера. Как обычно, макрос не позволяет создавать копии листа (н-р 01.02.10Соколов, а копия 01.02.10Соколов (2) - выдает ошибку), но это небольшая проблема))) Ведь при этом он все-равно продолжает отлично работать!
Еще раз огромное спасибо всем!!!
Страницы: 1
Читают тему
Наверх