Honey Пользователь Сообщений: 204 |
#1 07.09.2015 11:55:30 У меня есть макрос:
То есть когда изменяется ячейка А1, название соответствующего листа меняется автоматически. Но у меня в А1 не просто текст или числа. Применяется формула. И пока я не нажму снова на эту ячейке в формулу не нажму ентер, название листа не меняется. Макросу нужно вручную показывать что расчет произошел и теперь его значение другое. Пробовала сама получилось примерно вот это:
Но совместить их правильно я не смогла. Чего-то не работает да и как совмещать правильно не знаю. P.S. В примере макрос находится: Исходный текст — контекстное меню листа Прикрепленные файлы
Изменено: Honey — 07.09.2015 13:36:09 |
||||
Сергей Пользователь Сообщений: 11251 |
#2 07.09.2015 12:10:28 на второй ссылке в поиске в модуль листа
Лень двигатель прогресса, доказано!!! |
||
Honey Пользователь Сообщений: 204 |
Сергей, спасибо большое! Я была бы благодарна, если бы к тому же и объяснили еще подробней что и куда))) Изменено: Honey — 07.09.2015 12:37:11 |
Сергей Пользователь Сообщений: 11251 |
вот Лень двигатель прогресса, доказано!!! |
Honey Пользователь Сообщений: 204 |
Сергей,УАУ!!! То есть Вы тот макрос вообще убрали? Это так круто! Спасибо большое прибольшое!!! А можете объяснить почему так? Что означает именно этот макрос? И еще вопрос… Если мои исходные данные находятся не в вышеуказанных ячейках а в С1 и Н3? Как тогда мне быть? Можно ли переформировывать макрос? Изменено: Honey — 07.09.2015 12:44:20 |
Сергей Пользователь Сообщений: 11251 |
#6 07.09.2015 12:44:26
неа, патамушто я тоже чайник макрос нашел поиском а лезть в справку мне лень Лень двигатель прогресса, доказано!!! |
||
Михаил Лебедев Пользователь Сообщений: 2855 |
#7 07.09.2015 12:47:10 Что Вы хотите, чтобы получилось? Ваш код — это просто запись макрорекордером процесса редактирования ячейки А1, в которой записана формула. Если Вы хотите, чтобы изменение названия листа происходило только для первого листа — внесите в модуль этого листа код, предложенный Сергеем.
или в модуль каждого листа код Сергея. Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||
Но в А1 должна быть формула Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
|
Sanja Пользователь Сообщений: 14838 |
#9 07.09.2015 12:51:36
А это куда применить? Из какой ячейки должно браться наименование листа? Согласие есть продукт при полном непротивлении сторон. |
||
Honey Пользователь Сообщений: 204 |
Каждый день будут создаваться новые листы в книге. И соответственно каждый день меняется дата и фамилия в ячейках. Поэтому я хочу чтобы в зависимости кто и когда применял файл изменялось название соответствующего листа, просто чтобы было легче прослеживать и далее применять данную информацию для др формул. При этом возможно в будущем названия листов будут исходить из других ячеек на этом листе. Как мне это можно контролировать? В макросе, который я использовала до этого есть пометка из какой именно ячейки берутся данные. Можно что-то вроде этого? |
Михаил Лебедев Пользователь Сообщений: 2855 |
#11 07.09.2015 12:53:15
Тот макрос отслеживал 3 условия, макрос Сергея — только одно. Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||
Honey Пользователь Сообщений: 204 |
#12 07.09.2015 12:53:16
А если она будет меняться? Например не в А1 а в М6? |
||
Сергей Пользователь Сообщений: 11251 |
.Cells(6, 13) Изменено: Сергей — 07.09.2015 12:56:00 Лень двигатель прогресса, доказано!!! |
Sanja Пользователь Сообщений: 14838 |
Может лучше вести ЛОГ работы с файлом? Согласие есть продукт при полном непротивлении сторон. |
Honey Пользователь Сообщений: 204 |
Sanja, это нужно мне также для того, чтобы путь к данным в листе я могла применять в формуле ДВССЫЛ… Мне так удобнее будет… |
Михаил Лебедев Пользователь Сообщений: 2855 |
#16 07.09.2015 13:32:39
Возможно Вам поможет вот такой вариант.
А вообще — Ваш подход, на мой взгляд, не очень удачный…
Вы сколько листов планируете создать в одной книге? [рабочих дней в году] * [кол-во менеджеров]? У Вас достаточно мощный компьютер? Прикрепленные файлы
Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||||||
Honey Пользователь Сообщений: 204 |
#17 08.09.2015 05:36:11 Михаил Лебедев,спасибо большое! Ваш последний вариант — то, что нужно! Насчет остального: компьютер достаточно мощный, до этого они просто вручную переименовывали листы — у каждого свой формат, поэтому удобнее если все будет автоматически выводиться в одном. Книга создается на месяц, каждый день по 10 максимум новых листов на одного менеджера. Как обычно, макрос не позволяет создавать копии листа (н-р 01.02.10Соколов, а копия 01.02.10Соколов (2) — выдает ошибку), но это небольшая проблема))) Ведь при этом он все-равно продолжает отлично работать! |
Здравствуйте! Мне нужно чтобы лист сам автоматически переименовывался в название из ячейки. Например на листе1 есть ячейка A1. Там, в ячейке забито слово Колобок. Нужно чтобы лист1 сам переименовывался в название Колобок.
Через кнопку наверное так:
Sub Кнопка1_Щелкнуть()
NewIm = Range(«A1»)
Sheets(«Лист1»).Name = NewIm
End Sub
Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.
Wasilic спасибо, но как же автоматом сделать?
Цитата: ActionFace от 05.01.2010, 17:32
Wasilic спасибо, но как же автоматом сделать?
Что значит «АВТОМАТОМ»? Если не по нажатию кнопки, то при каких условиях? При включении комьютера или открытия книги? Или ….
Может я и не смогу ответить.
Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.
Wasilic , впринципе и так хорошо! Спасибо! Но можно еще вопрос? У меня есть и второй лист который должен переименовываться Можно написать код для двух листов в пределах одного макроса? У листа2 есть свой A1 и там название предположим пчелка.
Sub Кнопка1_Щелкнуть()
NewIm = Range(«A1»)
Sheets(«Лист1»).Name = NewIm
NewIm = Sheets(«Лист2»).Range(«A1»)
Sheets(«Лист2»).Name = NewIm
End Sub
Не понимаю смысла этой автоматизации.
Если это одноразовая процедура, то почему не ручками — нажав правую кнопку на имени листа.
Но, если и новое имя листа будет переименовываться, то этот макрос не подойдет.
В общем то, это в тему о макросах VBA.
Внизу под сообщением есть выбор тем:
Выбери «Проекты VBA»
А много разных ответов поищи здесь.
http://msoffice.nm.ru/faq/macros.htm
Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.
Если автоматически, то может быть так?
Меняйте ячейки А1 в разных листах
Скажи мне, кудесник, любимец ба’гов…
Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995
_Boroda_ Круто! Спасибо! Но как вы это сделали? Я не вижу ни формулы, ни макроса в присланном файле. Можете написать пошаговую инструкцию?
Нужно два раза кликнуть мышой по «Эта книга» в VBA. Там макрос и сидит.
Сам макрос:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$A$1" Then
On Error Resume Next
Sh.Name = Sh.Range("a1")
If Not Err.Number = 0 Then MsgBox "Лист " & Sh.Name & " нельзя переименовать в " _
& Sh.Range("a1") & "," & Chr(10) & "лист " & Sh.Range("a1") & " уже есть в этой книге."
On Error GoTo 0
End If
End Sub
Скажи мне, кудесник, любимец ба’гов…
Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995
_Boroda_ Спасибо Большое все заработало! Не сочтите за наглость, а можно вас еще кое о чем спросить? Проблема такая. Мне нужно с экспортить с листа1 данные в текстовом файле с разделителем табуляции(.txt) Но вот незадача. В моих данных имеются точка с запятой ; . И при создании txt в экспортируемом тексте у меня появляются кавычки » ! Кавычки мне не нужны! Как можно от них избавиться? Я конечно могу не экспортировать, а просто скопировать и вставить, но проблема в том что у меня данные в разных ячейках и при копировании txt понимает что это разные ячейки и ставит между ними невидимую палку |. Как от нее можно избавиться?
Мне это нужно для одной управляющей програмки, которая кушает только txt.
1.Вообщем я на листе1 в ячейке A1 пишу допустим Kolobok.
2.Потом там же в A1 дописываю точку с запятой(;).
3.Далее в ячейке B1 пишу цифру 1.
4.Затем в ячейке C1 пишу точку с запятой(;).
5.Потом делаю экспорт в формате txt с раздел табуляции.
6.В файле txt должно получиться: Kolobok;1;
Но этот Excel делает между словом Kolobok и знаком ; невидимый промежуток в виде знака | и самое страшное, между знаком ; excel пишет кавычки!
То есть TXT файл получается: «Kolobok;» 1 «;»
Приложил пример.
Если я правильно понял, необходимо сохранить значения из ячеек разделив их знаком точка с запятой «;». Попробуйте сохранить в формате *.csv. У меня на 2003 как раз такой результат получается. Формат .csv можно просто переименовать в .txt или же напрямую открыть текстовым редактором.
Еще один вариант автонаименования листа по ячейке. Используются свойства листа:
1. В случае изменения ячейки вручную на активном листе
Private Sub Worksheet_Change(ByVal Target As Range)
Me.Name = Me.Cells(1, 1)
End Sub
2. В случае измениния ячейки в неактивном листе посредством формулы-ссылки (в приложении третий лист)
Private Sub Worksheet_Calculate()
Me.Name = Me.Cells(1, 1)
End Sub
Цитата: ActionFace от 13.01.2010, 23:46
Мне это нужно для одной управляющей програмки, которая кушает только txt.
1.Вообщем я на листе1 в ячейке A1 пишу допустим Kolobok.
2.Потом там же в A1 дописываю точку с запятой(;).
3.Далее в ячейке B1 пишу цифру 1.
4.Затем в ячейке C1 пишу точку с запятой(;).
5.Потом делаю экспорт в формате txt с раздел табуляции.
Извратиться, как написал boroda, наверное можно через дополнительный лист формулой «=Лист1!A1 & Лист1!B1 & Лист1!C1»
Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.
Цитата: ActionFace от 13.01.2010, 23:46
Мне это нужно для одной управляющей програмки, которая кушает только txt.
1.Вообщем я на листе1 в ячейке A1 пишу допустим Kolobok.
2.Потом там же в A1 дописываю точку с запятой(;).
3.Далее в ячейке B1 пишу цифру 1.
4.Затем в ячейке C1 пишу точку с запятой(;).
5.Потом делаю экспорт в формате txt с раздел табуляции.
6.В файле txt должно получиться: Kolobok;1;
Посмотри файлик. Выкрутишся наверняка.
Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.
В этом примере детально описана и разобрана автоматизация копирования и переименования листов Excel с исходными кодами макросов.
Как копировать и переименовать лист Excel макросом
Представьте ситуацию: Вы готовите планы работ для сотрудников определенного отдела фирмы. Пример таблицы плана выглядит так:
Руководитель этого отдела пожелал, чтобы названия листов планов работ для каждого сотрудника содержали их имена и фамилии.
Многократное копирование листов шаблона для составления и заполнения планов работ сотрудников с переименованием, потребует много времени и сил если делать все это вручную. Поэтому напишем свой макрос, который упростит данную задачу.
Техническое Задание (ТЗ) для макроса заключается в следующем. После выделения ячеек, которые содержат названия для листов нужно скопировать лист с шаблоном для планов работ ровно столько сколько будет выделенных ячеек и ввести соответствующие названия в ярлычки.
Примечание. В программировании, как и в многих других технических сферах деятельности (например, в бизнес-планировании) – без ТЗ результат ХЗ! Автор цитаты известный бизнесмен и предприниматель Дмитрий Потапенко.
Для этого сначала откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» (ALT+F11):
В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него следующий код макроса:
Sub PlanRabot()
Dim diapaz As Range
Dim i As Long
Dim list As Worksheet
On Error Resume Next
Set diapaz = Application.InputBox("Пожалуйста, выделите диапазон ячеек, который содержит названия для новых листов!", Type:=8)
On Error GoTo 0
If diapaz Is Nothing Then Exit Sub
Set list = ActiveSheet
For i = 1 To diapaz.Count
list.Copy after:=ActiveSheet
ActiveSheet.Name = Left(diapaz(i), 31)
Next
End Sub
Теперь если вы хотите скопировать лист шаблона для заполнения плана работ и создать копии плана для каждого сотрудника имена с фамилиями которых будут присвоены названиям листа, то перейдите на исходный лист с шаблоном плана работ и выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«PlanRabot»-«Выполнить». Сразу же после запуска макроса появиться диалоговое окно:
Теперь перейдите на лист «Имена и Фамилии» и выделите в нем диапазон ячеек, которые содержат имена и фамилии сотрудников. И нажмите на кнопку ОК.
В результате чего макрос сам автоматически скопирует планы работ для каждого сотрудника и присвоит новым листам соответственные имена и фамилии.
Описание исходного кода макроса для копирования и переименования листов
В начале кода макроса вызываем диалоговое окно для выделения диапазона ячеек на рабочем листе Excel и присвоения адреса диапазона в качестве значения для поля ввода данного диалогового окна.
Перед вызовом инструкции открытия диалогового окна отключается контроль ошибок. А после создания экземпляра объекта Range в переменной diapaz, снова включается контроль ошибок. Сделано так потому, что нажатие на кнопку «Отмена» в диалоговом окне вызовет ошибку выполнения макроса. Если же отключить обработку ошибок то, когда пользователь нажмет на кнопку «Отмена», тогда просто не будут выполняться никакие инструкции макроса.
В случаи если пользователь заполнил поле ввода и нажал на кнопку «ОК», тогда в переменную list присваиваться текущий рабочий лист. После чего внутри цикла он копируется ровно столько раз, сколько было выделено ячеек.
В процессе копирования каждому новому листу присваивается имя, которое берется из значения текущей ячейки из предварительно выделенного диапазона. Текст в ячейках обрезается до 31 символов, так как максимальная длинна наименования листа не может содержать более чем 31 символ.
Если необходимо сделать так чтобы соответственные имена и фамилии сотрудников были не только на ярлычках листов, а и в значении ячейки B1 в каждом листе, тогда перед строкой конца цикла Next добавьте следующую строку кода:
ActiveSheet.Range(«B1») = diapaz(i)
Подобным способом можно вводить имена и названия для других ячеек листа. Достаточно указать желаемый адрес ячейки в кавычках.
Версия кода макроса с дополнительной строкой кода выглядит так:
Sub PlanRabot()
Dim diapaz As Range
Dim i As Long
Dim list As Worksheet
On Error Resume Next
Set diapaz = Application.InputBox("Пожалуйста, выделите диапазон ячеек, который содержит названия для новых листов!", Type:=8)
On Error GoTo 0
If diapaz Is Nothing Then Exit Sub
Set list = ActiveSheet
For i = 1 To diapaz.Count
list.Copy after:=ActiveSheet
ActiveSheet.Name = Left(diapaz(i), 31)
ActiveSheet.Range("B1") = diapaz(i)
Next
End Sub
Пример вставки имен и фамилий не только в ярлычки листов, а и в их определенные пользователем ячейки:
Читайте также: Макрос для копирования листов Excel с заданным количеством копий.
Таким образом, благодаря макросу в пару кликов мышкой можно выполнить большой объем работы. В данном примере скопировано копий только для 8-ми сотрудников. Особенно ощутимую пользу приносит данный макрос при необходимости копировать большое количество листов. Ведь в некоторых фирмах количество сотрудников, заполняющих планы работы, может превышать 100 человек и более.
Типичная задача. Есть много листов названия которых нас не устраивают. Мы хотим их переименовать. Делать это вручную очень долго.
C надстройкой ЁXCEL это сделать легко.
Перейдите во вкладку «ЁXCEL» главного меню, нажмите кнопку «Листы», в выпавшем списке выберите пункт «Получить список листов книги»:
В открывшемся диалоговом окне установите переключатель в положение «Простой список листов (все листы)» и нажмите «ОК»:
Программа создаст в активной книге новый лист на который выведет названия всех листов:
Исключите из списка листы, которые вы не хотите переименовывать, а напротив оставшихся введите новые названия, чтобы получилось так:
Выделите диапазон со старыми и новыми названиями листов, перейдите во вкладку «ЁXCEL» главного меню, нажмите кнопку «Листы» и выберите команду «Переименовать листы из списка»:
В открывшемся диалоговом окне нажмите «ОК»:
Указанные листы будут переименованы.
Добавить комментарий
формула на автоматическое изменение названия листа книги |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |