Excel макрос изменение листа

Ребят, я в этом деле новичок (сильно сказано), попробовал, не получается, при изменении данного диапазона все равно приходится каждый раз выполнять макрос. Скину файл. Есть кстати еще вопрос, по этому же файлу, но он вроде сложнее. Возможно косяк в том, что в выбранном диапазоне стоит проверка данных, т.е. данные вставляю с выпадающего меню. Покажите ошибки, подскажите где должен быть текст макроса, всё в одном модуле или в отдельном и имеет ли это значение.
Заранее большое спасибо.

Ребят, я в этом деле новичок (сильно сказано), попробовал, не получается, при изменении данного диапазона все равно приходится каждый раз выполнять макрос. Скину файл. Есть кстати еще вопрос, по этому же файлу, но он вроде сложнее. Возможно косяк в том, что в выбранном диапазоне стоит проверка данных, т.е. данные вставляю с выпадающего меню. Покажите ошибки, подскажите где должен быть текст макроса, всё в одном модуле или в отдельном и имеет ли это значение.
Заранее большое спасибо.

Сообщение Ребят, я в этом деле новичок (сильно сказано), попробовал, не получается, при изменении данного диапазона все равно приходится каждый раз выполнять макрос. Скину файл. Есть кстати еще вопрос, по этому же файлу, но он вроде сложнее. Возможно косяк в том, что в выбранном диапазоне стоит проверка данных, т.е. данные вставляю с выпадающего меню. Покажите ошибки, подскажите где должен быть текст макроса, всё в одном модуле или в отдельном и имеет ли это значение.
Заранее большое спасибо.

Источник

Макрос для копирования и переименования листов Excel

Требования к именам листов

К именам листов рабочей книги предъявляется несколько ограничений:

1) длина введенного имени не должна превышать 31-го знака;

2) имя листа не должно содержать ни одного из следующих знаков: двоеточи” ( : ), косая черта ( / ), вопросительный знак ( ? ), звездочка ( * ) и квадратные скобки ( [ ] );

3) имя не должно быть пустым.

Процесс переименования

Процедура переименования листов в Экселе в целом интуитивно понятна. Тем не менее, у некоторых пользователей, которые только начинают освоение программы, возникают определенные трудности.

Прежде, чем перейти непосредственно к описанию способов переименования, выясним, какие названия давать можно, а присвоение каких будет некорректным. Имя может быть присвоено на любом языке. При его написании можно использовать пробелы. Что же касается основных ограничений, то следует выделить следующие:

  • В наименовании не должны присутствовать такие символы: «?», «/», «», «:», «*», «[]»;
  • Название не может быть пустым;
  • Общая длина наименования не должна превышать 31 знак.

При составлении имени листа нужно учитывать вышеуказанные правила. В обратном случае программа не даст завершить данную процедуру.

контекстное меню ярлыка

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

    Кликаем правой кнопкой по ярлыку, над которым хотим произвести манипуляцию. В контекстном меню выбираем пункт «Переименовать».

  • Жмем на клавишу Enter. После этого листу будет присвоено новое имя.
  • двойной щелчок по ярлыку

    Существует и более простой способ переименования. Нужно просто кликнуть двойным щелчком по нужному ярлыку, правда, в отличие от предыдущего варианта, не правой кнопкой мыши, а левой. При использовании данного способа никакого меню вызывать не нужно. Наименование ярлыка станет активным и готовым к переименованию. Вам останется только набрать нужное название с клавиатуры.

    Как переименовать лист рабочей книги при помощи мыши?

    Для переименования листа необходимо:

    1) в окне открытой книги дважды щелкнуть левой кнопкой мыши на ярлычке нужного листа;

    2) набрать нужное имя листа, соблюдая требования к листам, изложенные выше;

    3) нажать клавишу Enter на клавиатуре для закрепления введенного имени.

    Вставка нового листа в Excel

    1. Чтобы вставить новый рабочий лист, найдите и нажмите кнопку Новый лист.
    2. Откроется новый пустой лист.

    Для того чтобы изменить количество листов, открываемых по умолчанию в новой книге Excel, перейдите к представлению Backstage, нажмите Параметры, затем выберите количество листов, которые необходимо включать в каждую новую книгу.

    Обращение к рабочим листам

    Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

    Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках – имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы – изменились их индексы.

    Обращение к рабочему листу в коде VBA Excel:

    • УникИмяЛиста – уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
    • N – индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
    • Имя листа – имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

    Количество листов в рабочей книге Excel определяется так:

    Скрытие и отображение листов

    Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

    expression.Visible

    где expression – переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

    • False – лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
    • xlVeryHidden – лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
    • True – лист становится видимым.

    Аналоги присваиваемых значений:

    • False = xlHidden = xlSheetHidden = 1
    • xlVeryHidden = xlSheetVeryHidden = 2
    • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

    Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье .

    Описание задачи

    Как правило, когда мы долго работаем с большим количеством листов, возникает потребность в их переименовании. Переименовать листы поштучно достаточно просто дважды кликнув по вкладке и введя новое название. Однако, если листов десятки, то это утомительно и отнимает время. Гораздо удобнее использовать надстройку VBA-Excel.

    C помощью нее переименовать все листы в книге можно следующим образом:

    1. Нужно подготовить два списка. Первый с перечнем наименований текущих листов. Второй – с новыми наименованиями листов. Проще всего сделать два столбца в первом старые наименования и рядом список, как нужно переименовать.
    2. Перейдите на вкладку VBA-Excel (она будет доступна после установки программы).
    3. В меню Диспетчеры найдите пункт Диспетчер листов.
    4. В диспетчере выберите команду Переименовать
    5. В диалоговом окне Переименовать листы из выделенного списка укажите диапазон со старыми наименованиями листов и аналогичный диапазон, содержащий новые названия, которые должны получиться в процессе переименования.

      При необходимости можно заполнить диапазон текущими названиями листов нажав кнопку Заполнить.
    6. Нажмите кнопку Переименовать.

    Как копировать и переименовать лист 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

    Перемещать листы в Excel с помощью мышки очень просто: возьмите ярлычок листа и, двигаясь по горизонтали, перетащите его на новое место.

    Если во время этой операции вы нажмете и будете удерживать клавишу [Ctrl], то лист… правильно, скопируется! (Вспомните, как мы копировали файлы в WINDOWS ). То же самое можно делать с группой листов.

    Эту же операцию можно выполнить в Excel с помощью команды контекстного меню листа Переместить/скопировать или команды Правка/Переместить/скопировать лист . Ими особенно удобно пользоваться, если вы хотите скопировать или переместить лист в другую книгу.

    Перед копированием или перемещением листа в другую книгу необходимо открыть книгу-получатель. Кроме того, в случае копирования не забудьте установить флажок в поле Создать копию . В противном случае лист просто переместится в указанное вами место.

    Задание для самостоятельной работы:

    В книге Мои таблицы. xls переместите лист Население Земли в конец книги, верните его на прежнее место, сделайте копию листа в этой же книге, скопируйте его в новую книгу.

    Создайте пустой файл Мои таблицы-копии.xls ( для этого новую рабочую книгу сохраните под этим названием в каталоге C:ST). Скопируйте в него лист Население Земли.

    Как сменить название листа

    При создании новой книги Excel рабочие листы по умолчанию носят имя Лист1, Лист2 и т.д.

    Как правило, листы переименовывают в более подходящие имена, в зависимости от его содержания. Это может быть и «Отчет» и «График» и т.д. Чтобы переименовать название листа, дважды кликните на ярлыке данного листа.

    Программа выделит этот ярлык и включит название в режим редактирования, так что вы сможете прописать любое название какое захотите.

    1. Название листа может содержать максимум до 31 символа, причем пробелы допускаются.

    2. В названии листа нельзя прописывать следующие символы:

    (обратная косая черта);

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

    Как изменить имя листа при помощи контекстного меню?

    Чтобы переименовать лист при помощи контекстного меню, нужно:

    1) в окне открытой книги один раз кликнуть правой кнопкой мыши на ярлыке нужного листа;

    2) в контекстном меню выбрать пункт “Переименовать”;

    3) набрать новое имя листа в соответствии с требованиями к именам листов;

    4) нажать клавишу Enter на клавиатуре, чтобы закрепить новое имя.

    Удаление листа в Excel

    1. Щелкните правой кнопкой мыши по ярлычку листа, который необходимо удалить, и из контекстного меню выберите пункт Удалить.
    2. Лист будет удален.

    Удаление листа из рабочей книги нельзя отменить. Это одно из немногих необратимых действий в Excel. Хорошенько подумайте, прежде чем удалять их.

    Если требуется ограничить изменения, которые разрешается вносить в текущий лист, Вы можете его защитить. Для этого щелкните правой кнопкой мыши по ярлычку листа и из контекстного меню выберите пункт Защитить лист.

    Источник

    Adblock
    detector

    Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.

    Обращение к рабочим листам

    Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

    Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.

    Обращение к рабочему листу в коде VBA Excel:

    ‘По уникальному имени

    УникИмяЛиста

    ‘По индексу

    Worksheets(N)

    ‘По имени листа на ярлычке

    Worksheets(«Имя листа»)

    • УникИмяЛиста — уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
    • N — индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
    • Имя листа — имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

    Количество листов в рабочей книге Excel определяется так:

    ‘В активной книге

    Worksheets.Count

    ‘В любой открытой книге,

    ‘например, в «Книга1.xlsm»

    Workbooks(«Книга1.xlsm»).Worksheets.Count

    Переименование листов

    В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.

    С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:

    expression.Name

    где expression — переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.

    Допустим, у нас есть лист с уникальным именем (Name) — Лист1, индексом — 1 и именем Name — МойЛист, которое необходимо заменить на имя — Реестр.

    Лист1.Name = «Реестр»

    Worksheets(1).Name = «Реестр»

    Worksheets(«МойЛист»).Name = «Реестр»

    Скрытие и отображение листов

    Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

    expression.Visible

    где expression — переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

    • False — лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
    • xlVeryHidden — лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
    • True — лист становится видимым.

    Аналоги присваиваемых значений:

    • False = xlHidden = xlSheetHidden = 1
    • xlVeryHidden = xlSheetVeryHidden = 2
    • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

    Примеры:

    Лист1.Visible = xlSheetHidden

    Лист2.Visible = 1

    Worksheets(Worksheets.Count).Visible = xlVeryHidden

    Worksheets(«МойЛист»).Visible = True

    Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.

    В этом примере детально описана и разобрана автоматизация копирования и переименования листов 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 человек и более.

    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    1

    Макрос — имя листа по имени ячейки

    18.06.2013, 20:23. Показов 50178. Ответов 23


    Студворк — интернет-сервис помощи студентам

    Господа, помогите нубу
    Вот в чем вопрос:
    1. Нужно что бы имя листа менялось по имени ячейки.
    я находил подобный макрос, но…имя листа почему то менялось только один раз и потом на изменение значение зависимой ячейки больше не реагировало.
    2. Нужно сохранить активный лист в формате *pdf. Подчеркиваю, не всю книгу, а только активный лист.
    Желательно, что бы макрос можно было повесить на кнопку расположенную на другой странице.
    Например:
    Кнопка находится на Листе 1, а при нажатии на нее, в *pdf сохраняется Лист 2.
    Скажу сразу, моих знаний хватает только на то что бы вставить макрос, редактировать его…увы…извилин не хватает



    0



    Pavel55

    971 / 353 / 135

    Регистрация: 27.10.2006

    Сообщений: 764

    18.06.2013, 22:28

    2

    Перенименование листа.
    Набросал на быструю руку, допилите сами

    1) откройте любой файл Excel
    2) активируйте нужный лист, который вы хотите, чтобы переименовывался по изменению ячейки на этом листе
    3) подведите мышку к ярлычку этого листа (слева внизу, где название листа)
    4) щёлкните правой клавишей мыши и выберите в контекстном меню «исходный текст»
    5) вставьте в открывшееся окно этот код

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target = Range("A1") Then
            If Target.Value <> "" Then
                If Len(Target.Value) < 30 Then
                    Target.Parent.Name = Target.Value
                End If
            End If
        End If
    End Sub

    5) закройте редактор VBA и попробуйте ввести любой текст в ячейку А1 — лист должен переименоваться

    P.S. Сюда необходимо добавить функцию, которая будет проверять наличие запрещённых символов (*, / и других)

    Экспорт листа в PDF.
    Например, нам нужно экспортировать Лист1 в PDF в туже папку, где у нас сейчас находится наш открытый и обязательно сохранённый ранее файл (на несохранённом файле не пробуйте)

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Sub ExportToPDF()
        Dim sh As Worksheet, iFileName As String
        
        Set sh = ActiveSheet
        iFileName = Replace(ActiveWorkbook.FullName, CreateObject("Scripting.FileSystemObject").GetExtensionName(ActiveWorkbook.Name), "pdf")
        'Sheets(Array("Отчет1", "Отчет2", "Отчет3")).Select
        Sheets("Лист1").Select
        ActiveSheet.ExportAsFixedFormat xlTypePDF, iFileName
        sh.Select
    End Sub

    P.S. Создаёте кнопку на любом листе и повесьте этот макрос на неё. Укажите в моём коде ваше название нужного листа вместо Лист1



    1



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    19.06.2013, 10:38

     [ТС]

    3

    Павел, спасибо большое. Но в макросе для сохранения в *pdf ругается на предпоследнюю строку — ActiveSheet.ExportAsFixedFormat xlTypePDF, iFileName
    а по первому коду вопрос — если сделать как вы сказали — все работает отлично. Но мне бы хотелось, что бы имя ячейки из который берется имя листа было привязано к выпадающему списку. т.е. выбираешь в выпадающем списке название и оно вставляется в имя страницы. Выпадающий список сделан с помощью Данные — проверка данных.Сейчас, если я вместо ячейки «A1» ставлю номер ячейки с выпадающим списком, то макрос срабатывает только один раз. Потом на изменение в списке он не реагирует.
    И еще. Можно ли сделать что вы в макросе для сохранения в *pdf имя страницы было динамическим? Дело в том, что имя будет браться каждый раз из выпадающего списка.



    0



    971 / 353 / 135

    Регистрация: 27.10.2006

    Сообщений: 764

    19.06.2013, 11:15

    4

    По поводу сохранения в PDF — мой код будет работать, если у вас установлен Excel 2007 и выше. Вроде, только с 2007 офиса есть сохранение в PDF.

    По поводу остального ничего не скажу, нужно тестировать на файле



    1



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    19.06.2013, 11:23

     [ТС]

    5

    у меня стоит Excel 2010.
    Файл выложил на яндекс-диск, Ссылка удалена



    0



    971 / 353 / 135

    Регистрация: 27.10.2006

    Сообщений: 764

    19.06.2013, 11:57

    6

    1) зачем выкладывать такой большой файл?

    2) По поводу экспорта в PDF. Вы ТОЧНО заменили ИМЯ ЛИСТА с ЛИСТ1 на СВОЙ в вашем коде? В вашем файле в коде написано «ЛИСТ1» — а такого листа в вашем файле НЕЕЕЕТ. Либо переименуйте любой ваш лист, например, лист «Форма» на «Лист1«. У меня нормально эспорт срабатывает и в офисе 2010 и в 2013

    3) у вас там куча листов. Где что должно выбираться, какой лист должен менять название?

    4) По поводу изменения листа по изменению значения в ячейке
    Вы ТОЧНО вставли мой код для изменения листа в ваш файл? Где он? В модуле какого листа?

    Скачал ваш огромный файл. Предположил (раз вы не сказали какой лист нужен), что вам нужен лист «ФОРМА», вставил свой код в модуль этого листа, долго искал в какой ячейке у вас стоит ПРОВЕРКА, т.к. вы адрес этой ячейки не написали в теме, когда выкладывали файл, заменил в коде адрес ячейки с А1 на I8, попробовал менять значения из выподающего списка в яч. I8 — лист меняет своё имя постоянно, т.е. всё срабатывает хорошо.

    Может вам самому вставить нужный код в нужный лист и потестировать? )



    1



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    19.06.2013, 12:08

     [ТС]

    7

    Извините что не пояснил..
    на листе — «форма» есть выпадающий список. Мне нужно, что бы имя листа «Шаблон», кажется я его переименовал в «1».(не сохранил копия которую выложил) менялось по значению выпадающего листа. Так же на листе «форма» нужно создать кнопку которая выводила бы лист «Шаблон» на сохранение в формате *pdf с названием листа, которое будет в выпадающем списке.
    По поводу макроса.:
    да, вы правы я не поменял имя листа. Сейчас попробовал — в пдф сохраняется, но с именем книги, а не листа.



    0



    Pavel55

    971 / 353 / 135

    Регистрация: 27.10.2006

    Сообщений: 764

    19.06.2013, 12:43

    8

    для экспорта попробуйте так

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Sub ExportToPDF()
        Dim sh As Worksheet, iFileName As String
        
        Set sh = ActiveSheet
        Application.ScreenUpdating = False
        iFileName = ActiveWorkbook.Path & Application.PathSeparator & Sheets("Форма").Range("I8").Value & ".pdf"
        Sheets(Sheets("Форма").Range("I8").Value).Select
        ActiveSheet.ExportAsFixedFormat xlTypePDF, iFileName
        sh.Select
        Application.ScreenUpdating = True
    End Sub

    Для переименования (ТОЛЬКО СПЕРВА НАЗАВИТЕ НУЖНЫЙ ЛИСТ ТЕМ НАЗВАНИЕМ, КОТОРОЕ У ВАС В ДАННЫЙ МОМЕНТ УКАЗАНО В ЯЧЕЙКЕ I8 НА ЛИСТЕ «ФОРМА»)

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    Dim iCurrentName As String
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
         If Target.Address(0, 0) = "I8" Then
            If Target.Cells.Count = 1 Then
                iCurrentName = Target.Value
            End If
         End If
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        On Error Resume Next
        If Target.Address(0, 0) = "I8" Then
            If Target.Value <> "" Then
                If Len(Target.Value) < 30 Then
                    Worksheets(iCurrentName).Name = Target.Value
                    iCurrentName = Target.Value
                End If
            End If
        End If
    End Sub

    Добавлено через 13 минут
    подкорректировал код



    1



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    19.06.2013, 13:25

     [ТС]

    9

    Павел, наверное я что то не так делаю.
    Имя листа не реагирует на изменение I8. Предварительно я изменил имя листа как в списке.
    а со вторым макросом….у меня не получается сохранить макрос. Создаю макрос — добавляю ваш макрос-и сохраняю. А когда пытаюсь повесить макрос на кнопку то его нет в списке макросов.

    Добавлено через 12 минут
    С макросом Экспорта разобрался немного. Но все равно ругается на эту строку
    Sheets(Sheets(«Форма»).Range(«I8»).Value).Select.
    а с переименованием так ничего и не получается

    Добавлено через 12 минут
    Ураа, заработало))
    трудно быть деревянным
    Павел, я нашел что делал не так. Переименовать страницы по списку заработало.
    Осталась проблема только с экспортом. Но без вашей помощи я не найду почему ругается на эту строку.



    0



    971 / 353 / 135

    Регистрация: 27.10.2006

    Сообщений: 764

    19.06.2013, 19:00

    10

    См. файл. Я чуть изменил код. Потестируйте.
    У меня и на работе (Excel 2010) и дома (Excel 2013) работает.



    1



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    20.06.2013, 12:56

     [ТС]

    11

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



    0



    Pavel55

    971 / 353 / 135

    Регистрация: 27.10.2006

    Сообщений: 764

    25.06.2013, 17:00

    12

    @Edvin, для выбора папки для сохранения файла можно использовать такой код

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    Sub ExportToPDF()
        Dim iFileName As String, iShtName As String, iPath As String, FD As FileDialog
        
        Application.ScreenUpdating = False
        'iFileName = ActiveWorkbook.Path & Application.PathSeparator & Sheets("Форма").Range("I8").Value & ".pdf"
        iFileName = Sheets("Форма").Range("I8").Value & ".pdf"
        iShtName = Sheets("Форма").Range("I8").Value
        If iShtName = "" Then
            MsgBox "Не указана модель на листе 'Форма' в ячейке I8", vbExclamation, "Ошибка"
            Exit Sub
        End If
       
        Set FD = Application.FileDialog(msoFileDialogFolderPicker)
        With FD
            .InitialFileName = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, Application.PathSeparator, -1, vbTextCompare))
            .InitialView = msoFileDialogViewList
            .AllowMultiSelect = False
            .Title = "Укажите папку для сохранения"
            .ButtonName = "Выбрать папку"
            If .Show = False Then Exit Sub Else iPath = .SelectedItems(1) & Application.PathSeparator
        End With
        Set FD = Nothing
        
        If SheetExist(iShtName) Then
            Worksheets(iShtName).ExportAsFixedFormat xlTypePDF, iPath & iFileName
        Else
            Application.ScreenUpdating = True
            MsgBox "Лист с названием '" & iShtName & "' отсутствует в книге!", vbExclamation, "Ошибка"
            Exit Sub
        End If
        Application.ScreenUpdating = True
        MsgBox "Файл сохранён в " & iPath & iFileName, vbInformation, "Экспорт в PDF"
        
    End Sub
     
    Function SheetExist(iName As String) As Boolean
        On Error Resume Next
        With Worksheets(iName): End With
        SheetExist = (Err = 0)
        Err.Clear
    End Function

    по поводу «очему при сохранении файла или при печати — вместе с пятью страницами текста захватывается в печать несколько пустых страниц» — я, к сожалению, не знаю



    2



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    16.08.2013, 09:52

     [ТС]

    13

    Уважаемые, подскажите, почему когда вставляешь макрос все работает. Но стоит закрыть документ и открыть его снова — макрос перестает работать. Заметил что слетает вот эта настройка (во вложении — картинка 1 — работающий макрос, картинка 2 — макрос не работает). как сделать что бы она не изменялась?

    Миниатюры

    Макрос - имя листа по имени ячейки
     

    Макрос - имя листа по имени ячейки
     



    0



    Аксима

    6076 / 1320 / 195

    Регистрация: 12.12.2012

    Сообщений: 1,023

    16.08.2013, 17:48

    14

    Edvin, проблема не в этом.

    Сделал чуть более надежное решение. Благодарности — Pavel55, ведь за основу был взят его код.

    В модуль нужного листа

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Private Sub Worksheet_Activate()
        iCurrentName = ActiveSheet.Name
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address(0, 0) = "I8" Then
            If Target.Value <> "" Then
                If Len(Target.Value) < 30 Then
                    Worksheets(iCurrentName).Name = Target.Value
                    iCurrentName = Target.Value
                End If
            End If
        End If
    End Sub

    В модуль ThisWorkbook («ЭтаКнига»)

    Visual Basic
    1
    2
    3
    
    Private Sub Workbook_Open()
        iCurrentName = ActiveSheet.Name
    End Sub

    В модуль общего назначения (объявить в самом верху)

    Visual Basic
    1
    
    Public iCurrentName As String

    P.S. В данном решении не обязательно, чтобы значение ячейки «I8» целевого листа совпадало с названием листа перед вставкой кода.

    С уважением,

    Aksima



    1



    0 / 0 / 0

    Регистрация: 17.06.2013

    Сообщений: 13

    16.08.2013, 22:36

     [ТС]

    15

    Aksima, спасибо большое за помощь….но я полный нуб в скриптах. Не могли бы с учетом моих практически нулевых знаний более подробно написать, куда вставлять ваши скрипты?



    0



    6076 / 1320 / 195

    Регистрация: 12.12.2012

    Сообщений: 1,023

    16.08.2013, 23:11

    16

    Edvin, попробую объяснить с помощью картинки. См. ниже.

    С уважением,

    Aksima

    Миниатюры

    Макрос - имя листа по имени ячейки
     



    1



    0 / 0 / 0

    Регистрация: 08.12.2015

    Сообщений: 4

    09.12.2015, 02:44

    17

    Sub ExportToPDF()
    Dim sh As Worksheet, iFileName As String

    Set sh = ActiveSheet
    Application.ScreenUpdating = False
    iFileName = ActiveWorkbook.Path & Application.PathSeparator & Sheets(«Форма»).Range(«I8»).Value & «.pdf»

    Sheets(Sheets(«Форма»).Range(«I8»).Value).Select
    ActiveSheet.ExportAsFixedFormat xlTypePDF, iFileName
    sh.Select
    Application.ScreenUpdating = True
    End Sub

    Почему останавливается макрос на выделенном коде. Использую Ofice 2007. Важно именно такое решение, сохранять активный лист «Форма» в файле PDF с присвоением ему имени из данных в ячейке «I8». Кто подскажет решение ?



    0



    k61

    85 / 82 / 31

    Регистрация: 13.10.2014

    Сообщений: 167

    09.12.2015, 04:09

    18

    Очевидно нет в книге листа с именем указанным в ячейке «I8» листа «Форма».
    Так попробуйте:

    Visual Basic
    1
    2
    
    'Sheets(Sheets("Форма").Range("I8").Value).Select
    Sheets("Форма").Select



    1



    0 / 0 / 0

    Регистрация: 08.12.2015

    Сообщений: 4

    09.12.2015, 13:42

    19

    Да, действительно нет, и не надо переименовывать лист по названию ячейки. Лист «Форма», он не переименовывается, но в нем есть ячейка «I8», в которой изменяются данные. Вот эти данные и должны быть в названии файла PDF при сохранении листа «Форма»

    Добавлено через 56 минут
    Sub ExportToPDF()
    Dim sh As Worksheet, iFileName As String
    Set sh = ActiveSheet
    iFileName = Replace(ActiveWorkbook.FullName, CreateObject(«Scripting.FileSystemObject»).GetExte nsionName(ActiveWorkbook.Name), «pdf»)
    Sheets(«Лист1»).Select
    ActiveSheet.ExportAsFixedFormat xlTypePDF, iFileName
    sh.Select
    End Sub

    Этот код работает корректно, но сохраняет в PDF всегда одно и тоже название книги, без изменений.



    0



    pashulka

    4131 / 2235 / 940

    Регистрация: 01.12.2010

    Сообщений: 4,624

    09.12.2015, 14:00

    20

    Без необходимых проверок :

    Visual Basic
    1
    2
    3
    4
    
    Private Sub Test()
        iFileName$ = ActiveWorkbook.Path & "" & Worksheets("Форма").Range("I8") & ".pdf"
        ActiveSheet.ExportAsFixedFormat xlTypePDF, iFileName$
    End Sub
    Visual Basic
    1
    2
    3
    4
    5
    
    Private Sub Test2()
        With ActiveWorkbook
             .ActiveSheet.ExportAsFixedFormat xlTypePDF, .Path & "" & .Worksheets("Форма").[I8]
        End With
    End Sub



    0



    Содержание

    1. Требования к именам листов
    2. Процесс переименования
    3. контекстное меню ярлыка
    4. двойной щелчок по ярлыку
    5. Как переименовать лист рабочей книги при помощи мыши?
    6. Вставка нового листа в Excel
    7. Обращение к рабочим листам
    8. Скрытие и отображение листов
    9. Описание задачи
    10. Как копировать и переименовать лист Excel макросом
    11. Перемещение/копирование листов в Excel
    12. Как сменить название листа
    13. Как изменить имя листа при помощи контекстного меню?
    14. Удаление листа в Excel

    Требования к именам листов

    К именам листов рабочей книги предъявляется несколько ограничений:

    1) длина введенного имени не должна превышать 31-го знака;

    2) имя листа не должно содержать ни одного из следующих знаков: двоеточи” ( : ), косая черта ( / ), вопросительный знак ( ? ), звездочка ( * ) и квадратные скобки ( [ ] );

    3) имя не должно быть пустым.

    Процесс переименования

    Процедура переименования листов в Экселе в целом интуитивно понятна. Тем не менее, у некоторых пользователей, которые только начинают освоение программы, возникают определенные трудности.

    Прежде, чем перейти непосредственно к описанию способов переименования, выясним, какие названия давать можно, а присвоение каких будет некорректным. Имя может быть присвоено на любом языке. При его написании можно использовать пробелы. Что же касается основных ограничений, то следует выделить следующие:

    • В наименовании не должны присутствовать такие символы: «?», «/», «», «:», «*», «[]»;
    • Название не может быть пустым;
    • Общая длина наименования не должна превышать 31 знак.

    При составлении имени листа нужно учитывать вышеуказанные правила. В обратном случае программа не даст завершить данную процедуру.

    контекстное меню ярлыка

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

    1. Кликаем правой кнопкой по ярлыку, над которым хотим произвести манипуляцию. В контекстном меню выбираем пункт «Переименовать».
    2. Как видим, после этого действия поле с названием ярлыка стало активным. Просто набираем туда с клавиатуры любое подходящее по контексту наименование.
    3. Жмем на клавишу Enter. После этого листу будет присвоено новое имя.

    двойной щелчок по ярлыку

    Существует и более простой способ переименования. Нужно просто кликнуть двойным щелчком по нужному ярлыку, правда, в отличие от предыдущего варианта, не правой кнопкой мыши, а левой. При использовании данного способа никакого меню вызывать не нужно. Наименование ярлыка станет активным и готовым к переименованию. Вам останется только набрать нужное название с клавиатуры.

    Как переименовать лист рабочей книги при помощи мыши?

    Для переименования листа необходимо:

    1) в окне открытой книги дважды щелкнуть левой кнопкой мыши на ярлычке нужного листа;

    2) набрать нужное имя листа, соблюдая требования к листам, изложенные выше;

    3) нажать клавишу Enter на клавиатуре для закрепления введенного имени.

    1. Чтобы вставить новый рабочий лист, найдите и нажмите кнопку Новый лист.
    2. Откроется новый пустой лист.

    Для того чтобы изменить количество листов, открываемых по умолчанию в новой книге Excel, перейдите к представлению Backstage, нажмите Параметры, затем выберите количество листов, которые необходимо включать в каждую новую книгу.

    Обращение к рабочим листам

    Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

    Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках – имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы – изменились их индексы.

    Обращение к рабочему листу в коде VBA Excel:

    ‘По уникальному имени

    УникИмяЛиста

    ‘По индексу

    Worksheets(N)

    ‘По имени листа на ярлычке

    Worksheets(“Имя листа”)

    • УникИмяЛиста – уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
    • N – индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
    • Имя листа – имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

    Количество листов в рабочей книге Excel определяется так:

    ‘В активной книге

    Worksheets.Count

    ‘В любой открытой книге,

    ‘например, в «Книга1.xlsm»

    Workbooks(“Книга1.xlsm”).Worksheets.Count

    Скрытие и отображение листов

    Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

    expression.Visible

    где expression – переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

    • False – лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
    • xlVeryHidden – лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
    • True – лист становится видимым.

    Аналоги присваиваемых значений:

    • False = xlHidden = xlSheetHidden = 1
    • xlVeryHidden = xlSheetVeryHidden = 2
    • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

    Примеры:

    Лист1.Visible = xlSheetHidden

    Лист2.Visible = 1

    Worksheets(Worksheets.Count).Visible = xlVeryHidden

    Worksheets(“МойЛист”).Visible = True

    Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    Описание задачи

    Как правило, когда мы долго работаем с большим количеством листов, возникает потребность в их переименовании. Переименовать листы поштучно достаточно просто дважды кликнув по вкладке и введя новое название. Однако, если листов десятки, то это утомительно и отнимает время. Гораздо удобнее использовать надстройку VBA-Excel.

    C помощью нее переименовать все листы в книге можно следующим образом:

    1. Нужно подготовить два списка. Первый с перечнем наименований текущих листов. Второй – с новыми наименованиями листов. Проще всего сделать два столбца в первом старые наименования и рядом список, как нужно переименовать.
    2. Перейдите на вкладку VBA-Excel (она будет доступна после установки программы).
    3. В меню Диспетчеры найдите пункт Диспетчер листов.
    4. В диспетчере выберите команду Переименовать
    5. В диалоговом окне Переименовать листы из выделенного списка укажите диапазон со старыми наименованиями листов и аналогичный диапазон, содержащий новые названия, которые должны получиться в процессе переименования.

      При необходимости можно заполнить диапазон текущими названиями листов нажав кнопку Заполнить.
    6. Нажмите кнопку Переименовать.

    Как копировать и переименовать лист Excel макросом

    Представьте ситуацию: Вы готовите планы работ для сотрудников определенного отдела фирмы. Пример таблицы плана выглядит так:

    Руководитель этого отдела пожелал, чтобы названия листов планов работ для каждого сотрудника содержали их имена и фамилии.

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

    Техническое Задание (ТЗ) для макроса заключается в следующем. После выделения ячеек, которые содержат названия для листов нужно скопировать лист с шаблоном для планов работ ровно столько сколько будет выделенных ячеек и ввести соответствующие названия в ярлычки.

    Для этого сначала откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» (ALT+F11):

    В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него следующий код макроса:

    SubPlanRabot()
    DimdiapazAsRange
    DimiAs Long
    DimlistAsWorksheet
    On Error Resume Next
    Setdiapaz = Application.InputBox("Пожалуйста, выделите диапазон ячеек, который содержит названия для новых листов!", Type:=8)
    On Error GoTo0
    IfdiapazIs Nothing Then Exit Sub
    Setlist = ActiveSheet
    Fori = 1Todiapaz.Count
    list.Copy after:=ActiveSheet
    ActiveSheet.Name = Left(diapaz(i), 31)
    Next
    End Sub

    Теперь если вы хотите скопировать лист шаблона для заполнения плана работ и создать копии плана для каждого сотрудника имена с фамилиями которых будут присвоены названиям листа, то перейдите на исходный лист с шаблоном плана работ и выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«PlanRabot»-«Выполнить». Сразу же после запуска макроса появиться диалоговое окно:

    Теперь перейдите на лист «Имена и Фамилии» и выделите в нем диапазон ячеек, которые содержат имена и фамилии сотрудников. И нажмите на кнопку ОК.

    В результате чего макрос сам автоматически скопирует планы работ для каждого сотрудника и присвоит новым листам соответственные имена и фамилии.

    Перемещение/копирование листов в Excel

    Перемещать листы в Excel с помощью мышки очень просто: возьмите ярлычок листа и, двигаясь по горизонтали, перетащите его на новое место.

    Если во время этой операции вы нажмете и будете удерживать клавишу [Ctrl], то лист… правильно, скопируется! (Вспомните, как мы копировали файлы в WINDOWS ). То же самое можно делать с группой листов.

    Эту же операцию можно выполнить в Excel с помощью команды контекстного меню листа Переместить/скопировать или команды Правка/Переместить/скопировать лист . Ими особенно удобно пользоваться, если вы хотите скопировать или переместить лист в другую книгу.

    Перед копированием или перемещением листа в другую книгу необходимо открыть книгу-получатель. Кроме того, в случае копирования не забудьте установить флажок в поле Создать копию . В противном случае лист просто переместится в указанное вами место.

    Задание для самостоятельной работы:

    В книге Мои таблицы. xls переместите лист Население Земли в конец книги, верните его на прежнее место, сделайте копию листа в этой же книге, скопируйте его в новую книгу.

    Создайте пустой файл Мои таблицы-копии.xls ( для этого новую рабочую книгу сохраните под этим названием в каталоге C:ST). Скопируйте в него лист Население Земли.

    Как сменить название листа

    При создании новой книги Excel рабочие листы по умолчанию носят имя Лист1, Лист2 и т.д.

    Как правило, листы переименовывают в более подходящие имена, в зависимости от его содержания. Это может быть и «Отчет» и «График» и т.д. Чтобы переименовать название листа, дважды кликните на ярлыке данного листа.

    Программа выделит этот ярлык и включит название в режим редактирования, так что вы сможете прописать любое название какое захотите.

    НО!

    1. Название листа может содержать максимум до 31 символа, причем пробелы допускаются.

    2. В названии листа нельзя прописывать следующие символы:

    * (звездочка).

    : (двоеточие);

    / (косая черта);

    [ ] (квадратные скобки);

    (кавычка);

    < > угловые скобки);

    ? (знак вопроса);

    (обратная косая черта);

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

    Как изменить имя листа при помощи контекстного меню?

    Чтобы переименовать лист при помощи контекстного меню, нужно:

    1) в окне открытой книги один раз кликнуть правой кнопкой мыши на ярлыке нужного листа;

    2) в контекстном меню выбрать пункт “Переименовать”;

    3) набрать новое имя листа в соответствии с требованиями к именам листов;

    4) нажать клавишу Enter на клавиатуре, чтобы закрепить новое имя.

    Удаление листа в Excel

    1. Щелкните правой кнопкой мыши по ярлычку листа, который необходимо удалить, и из контекстного меню выберите пункт Удалить.
    2. Лист будет удален.

    Удаление листа из рабочей книги нельзя отменить. Это одно из немногих необратимых действий в Excel. Хорошенько подумайте, прежде чем удалять их.

    Если требуется ограничить изменения, которые разрешается вносить в текущий лист, Вы можете его защитить. Для этого щелкните правой кнопкой мыши по ярлычку листа и из контекстного меню выберите пункт Защитить лист.

    Источники

    • http://macros-vba.ru/nadstrojki/excel/246-kak-pereimenovat-list-v-rabochej-knige-excel-pereimenovanie-listov
    • https://lumpics.ru/how-to-rename-worksheet-in-excel/
    • https://office-guru.ru/excel/pereimenovanie-vstavka-i-udalenie-lista-v-excel-24.html
    • https://vremya-ne-zhdet.ru/vba-excel/rabochiy-list-obrashcheniye-pereimenovaniye-skrytiye/
    • https://micro-solution.ru/projects/addin_vba-excel/sheets-rename
    • https://exceltable.com/vba-macros/makros-pereimenovat-listy
    • https://best-exam.ru/pereimenovanie-listov-v-excel/
    • https://zen.yandex.ru/media/topnews/urok-excel–32-kak-izmenit-nazvanie-i-cvet-iarlyka-rabochego-lista-5b2b7d5bcb0ffb00a9d43087

    Макрос смены листов в excel.

    Alex123

    Дата: Четверг, 10.10.2013, 12:45 |
    Сообщение № 1

    Группа: Пользователи

    Ранг: Прохожий

    Сообщений: 2


    Репутация:

    0

    ±

    Замечаний:
    0% ±


    Excel 2007

    Здравствуйте!

    Нужна помощь по макросу.
    На работе есть файл excel с множеством листов в нём. Попросил друга написать макрос для быстрой смены листов. Мне он написал «болванку» этого макроса, я копировал его в свой файл на работе. Всё работает, но время от времени (примерно через минут 40 — час) Excel завершает работу аварийно и, соответственно, теряется часть выполненной работы.

    Буду благодарен за помощь! :)

    К сообщению приложен файл:

    Macro.xlsm
    (23.0 Kb)

    Сообщение отредактировал Alex123Четверг, 10.10.2013, 19:39

     

    Ответить

    Poltava

    Дата: Четверг, 10.10.2013, 13:31 |
    Сообщение № 2

    Группа: Друзья

    Ранг: Форумчанин

    Сообщений: 232


    Репутация:

    50

    ±

    Замечаний:
    0% ±


    1) Не вижу в макросе ничего критического, нужно более точно знать все условия при которых эксель слетает
    2) Макрос можно положить в персоналбук и тогда он будет доступен в любой книге

     

    Ответить

    SkyPro

    Дата: Четверг, 10.10.2013, 13:34 |
    Сообщение № 3

    Группа: Друзья

    Ранг: Старожил

    Сообщений: 1206


    Репутация:

    255

    ±

    Замечаний:
    0% ±


    2010

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


    skypro1111@gmail.com

     

    Ответить

    RAN

    Дата: Четверг, 10.10.2013, 14:23 |
    Сообщение № 4

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    Попробуйте заменить закомментированные строки так
    [vba]

    Код

    ‘Public OriginalSheet As Object
    Dim OriginalSheetName As String
    ‘ Set OriginalSheet = ActiveSheet
    OriginalSheetName = ActiveSheet.Name
    ‘ OriginalSheet.Activate
    Sheets(OriginalSheetName).Activate

    [/vba]


    Быть или не быть, вот в чем загвоздка!

    Сообщение отредактировал RANЧетверг, 10.10.2013, 14:24

     

    Ответить

    Alex123

    Дата: Пятница, 18.10.2013, 12:11 |
    Сообщение № 5

    Группа: Пользователи

    Ранг: Прохожий

    Сообщений: 2


    Репутация:

    0

    ±

    Замечаний:
    0% ±


    Excel 2007

    Спасибо всем :) hands

     

    Ответить

    Здравствуйте! Мне нужно чтобы лист сам автоматически переименовывался в название из ячейки. Например на листе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_ Круто! :D Спасибо! Но как вы это сделали? Я не вижу ни формулы, ни макроса в присланном файле. Можете написать пошаговую инструкцию? :'(


    Нужно два раза кликнуть мышой по «Эта книга» в 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 VBA

    Переименовать лист в Excel VBA

    Переименование любого листа Excel так же просто, как переименование любого файла. Это можно сделать, дважды щелкнув по имени любого листа или выбрав «Переименовать» в правом списке меню. Но что, если мы хотим переименовать лист Excel с помощью макроса VBA. С помощью VBA Macro мы можем переименовать один или несколько рабочих листов Excel за один раз. Мы даже можем исправить имя любого листа, чтобы никто не мог его изменить. Здесь мы увидим несколько способов переименования любого листа.

    Как переименовать лист в Excel, используя VBA?

    Ниже приведены различные примеры переименования листов в Excel с использованием кода VBA.

    Вы можете скачать этот шаблон Excel для VBA Rename Sheet здесь — Шаблон для VBA Rename Sheet Excel

    VBA Rename Sheet — Пример № 1

    Хотя с помощью VBA очень легко переименовать любой лист Excel. Есть много способов сделать это также. Здесь имя нашего рабочего листа по умолчанию установлено как «Лист1», как показано ниже, которое мы будем переименовывать.

    Шаг 1: Для этого примера нам понадобится модуль, в котором мы будем выполнять кодирование. Перейдите в меню « Вставка» и выберите « Модуль», как показано ниже.

    Шаг 2: Теперь во вновь открытом модуле напишите подкатегорию на имя VBA Rename Sheet или на любое другое имя.

    Код:

     Sub VBA_RenameSheet () End Sub 

    Шаг 3: Теперь определите переменную для любого имени и назначьте ее с типами данных Worksheet, как показано ниже. Здесь мы назвали его « Лист ».

    Код:

     Sub VBA_RenameSheet () Dim Sheet As Worksheet End Sub 

    Шаг 4: С помощью команды Set выберите Sheet variable, как показано ниже.

    Код:

     Sub VBA_RenameSheet () Dim Sheet As Sheets Set Sheet = End Sub 

    Шаг 5: И выберите Рабочий лист, который нам нужно переименовать, с помощью команды Рабочий лист .

    Код:

     Sub VBA_RenameSheet () Dim Sheet As Sheets Set Sheet = Worksheets ("Sheet1") End Sub 

    Шаг 6: Теперь используйте функцию Sheet вместе с Name и назначьте имя, которое мы хотим переименовать. Здесь мы выбираем « Переименованный лист ».

    Код:

     Sub VBA_RenameSheet () Dim Sheet As Sheets Set Sheet = Worksheets ("Sheet1") Sheet.Name = "Переименованный лист" End Sub 

    Шаг 7: Теперь, наконец, скомпилируйте код и запустите его, если обнаружена ошибка. Для запуска кода нажмите на кнопку Play, расположенную под строкой меню, как показано ниже. Мы увидим, что наш лист будет переименован из Sheet1 в Renamed Sheet, как показано ниже.

    VBA Rename Sheet — Пример № 2

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

    Шаг 1: Откройте модуль и напишите подкатегорию VBA Rename, как показано ниже.

    Код:

     Sub VBA_RenameSheet1 () End Sub 

    Шаг 2: Выберите Лист, который мы хотим переименовать с помощью функции Выбрать . Здесь наш лист Sheet1 .

    Код:

     Sub VBA_RenameSheet1 () Sheets ("Sheet1"). Выберите End Sub 

    Шаг 3: В следующей строке рассмотрите функцию Name с выбранным листом, как показано ниже.

    Код:

     Sub VBA_RenameSheet1 () Sheets ("Sheet1"). Выберите Sheets ("Sheet1"). Name = End Sub 

    Шаг 4: Выберите имя, которое мы хотим дать после переименования листа. Мы выбираем то же имя, что и в примере 1, как « Переименованный лист ».

     Sub VBA_RenameSheet1 () Sheets ("Sheet1"). Выберите Sheets ("Sheet1"). Name = "Renamed Sheet" End Sub 

    Шаг 5: Снова скомпилируйте код и запустите его. Мы увидим, что sheet1 будет переименован с новым именем как « Renamed Sheet ».

    VBA Rename Sheet — Пример № 3

    Существует еще один аналогичный способ переименования листа Excel с помощью VBA. Это выглядело бы немного похожим на процесс, который мы видели в примере 2, но намного легче запомнить и обработать.

    Шаг 1: Откройте модуль и напишите новую подкатегорию VBA Rename Sheet, как показано ниже.

    Код:

     Sub VBA_RenameSheet2 () End Sub 

    Шаг 2: Выберите лист, который мы хотим переименовать. Здесь мы можем выбрать лист, поместив последовательность листов в скобки, как показано ниже. Таким образом, нам не нужно писать имя листа для переименования. Только последовательность этого листа будет работать.

    Код:

     Sub VBA_RenameSheet2 () Sheets (1). Выберите End Sub 

    Шаг 3: В следующей строке рассмотрите функцию Name с выбранной последовательностью листов, как показано ниже.

    Код:

     Sub VBA_RenameSheet2 () Sheets (1). Выбрать Sheets (1) .Name = End Sub 

    Шаг 4: Теперь введите имя, которое мы хотим дать выбранному Листу1. Давайте рассмотрим имя, которое мы видели в приведенных выше примерах, как « переименованный лист ».

    Код:

     Sub VBA_RenameSheet2 () Sheets (1). Выбрать Sheets (1) .Name = "renamed Sheet" End Sub 

    Шаг 5: Теперь снова скомпилируйте код и запустите. Мы заметим, что Sheet1 теперь снова переименован в «r enamed Sheet », как показано ниже.

    VBA Rename Sheet — Пример № 4

    В этом примере мы увидим, как переименовать любой лист с помощью только одной строки кода.

    Шаг 1: Откройте модуль и напишите подкатегорию VBA Rename Sheet, как показано ниже.

    Код:

     Sub VBA_RenameSheet3 () End Sub 

    Шаг 2: Выберите последовательность листов, которую мы хотим переименовать вместе с функцией Name, и дайте имя, по которому мы хотим переименовать этот лист, как показано ниже.

    Код:

     Sub VBA_RenameSheet3 () Sheets (1) .Name = "переименовать лист" End Sub 

    Шаг 3: Теперь просто запустите код для его реализации. Мы снова заметим, что Sheet1 теперь переименован в « rename Sheet »

    Плюсы Excel VBA Переименовать Лист

    • Если у нас есть несколько листов, которые нужно переименовать, тогда использование кода VBA намного лучше, чем ручной процесс.
    • Мы можем изменить имя любого рабочего листа Excel одной строкой кода VBA, который мы видели в примере 4.
    • Хотя изменение названия любого листа вручную также является простым способом сделать это. Но VBA Rename Sheet весьма полезна, когда мы создаем новый лист, и мы хотим отделить его от других листов, чтобы классифицировать его.

    То, что нужно запомнить

    • Чтобы получить лучшее представление о происходящих изменениях, держите окно VBA параллельно листу Excel, чтобы изменение имени листа было ясно видно.
    • Сохранение файла после выполнения работы в формате Macro enable позволит нам сохранить код и для дальнейшей работы.
    • Автоматизация процесса изменения имени листа поможет нам сократить время классификации листов и данных.

    Рекомендуемые статьи

    Это руководство к VBA Rename Sheet. Здесь мы обсудим, как переименовать лист в Excel, используя код VBA, а также несколько практических примеров и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

    1. Полное руководство по VBA Workbook
    2. НЕПРАВИЛЬНАЯ функция в Excel
    3. Учебники по функции подсчета VBA
    4. Как использовать функцию Excel XOR?

    Понравилась статья? Поделить с друзьями:
  • Excel макрос защита ячеек от
  • Excel макрос запускающий другие книги
  • Excel макрос запускает другой макрос
  • Excel макрос заполнить ячейку
  • Excel макрос заполнить строку