Макросы в excel указать лист

In this guide, we’re going to show you how to create and name a worksheet with VBA in Excel.

Download Workbook

Syntax

You can create and name a worksheet using the Sheets.Add and Worksheets.Add methods. Both methods work similarly and have 4 optional arguments and return a sheet object which can take a Name property.

Sheets.Add ([Before], [After], [Count], [Type])

Worksheets.Add ([Before], [After], [Count], [Type])

Name Description
Before Optional. The sheet before which the new sheet is to be added.
If omitted, Excel creates the new sheet(s) before the selected sheet(s).
After Optional. The sheet after which the new sheet is added.
If omitted, Excel creates the new sheet(s) before the selected sheet(s).
Count The number of sheets to be added.
The default is the number of selected sheets.
Type Specifies the sheet type.
The default is xlWorksheet which represents a standard worksheet.

Adding a single sheet

All arguments are optional. The method without arguments creates worksheet(s) equal to the number of selected worksheets before the first selected worksheet.

Sheets.Add

For example, if two sheets are selected, the method will add two worksheets. To ignore the selected sheets and set the sheet number to one (1), use 1 for the Count argument.

Sheets.Add Count:=1

Adding multiple sheets

You can set the Count argument to an integer greater than 1 to add multiple sheets at once. For example, the following code adds three (3) worksheets.

Sheets.Add Count:=3

Adding a sheet with a name

Sheets.Add method returns a sheet object and sets its name by updating the Name property. A property is an attribute of object that determines one of the object’s characteristics. The property of an object is addressed by entering the property name after the corresponding object and a dot(.). Just like calling the Add method for the Sheets object.

If all you need is to create worksheets and name them regardless of their position, use one of the following code lines.

Sheets.Add.Name = “My Sheet”
Sheets.Add(Count:=1).Name = “My Sheet” ‘Use this line to ensure creating a single sheet

Adding a sheet before or after a specific sheet

If the new sheet’s position is important, use either the Before or After argument. Each argument accepts a sheet object. The new sheet will be created before or after the sheet you supplied based on the argument you are using.

You can call a sheet object by giving the sheet’s name or index to Sheets or Worksheets objects. It can be a variable which you have defined. Here are some examples:

Sheets.Add Before:=Worksheets("My Sheet") ‘Add sheet(s) before “My Sheet”
Sheets.Add After:=Worksheets(3) ‘Add sheet(s) after the third sheet
Dim ws As Worksheet ‘Define a new worksheet object
Set ws = Sheets.Add ‘Create and assign new sheet to the worksheet object
Sheets.Add After:=ws ‘Add a new sheet after the recently added sheet (ws)

Creating and naming multiple worksheets

To name multiple worksheets, you have to use an array of names and a loop. Let’s say you have names in a range like A1:A5 in the worksheet named “Sheet1”. A loop should check each cell inside the range and create a worksheet from the corresponding name. Check out the following code:

 Sub CreateAndNameMultipleSheets()
    Dim rng As Range 'Range object which defines a cell
    For Each rng In Sheets("Sheet1").Range("A1:A5")
        Sheets.Add.Name = rng.Value
    Next
End Sub

This is our last tip for how to create and name a worksheet with VBA in Excel article. If you are new to loops in VBA, check out All You Need to Know on How to Create a VBA loop in Excel to understand and find more ways of looping.

На чтение 1 мин. Просмотров 4.7k.

Что делает макрос: помогает открыть Excel-книгу на нужном листе. С этим макросом Ваши пользователи будут сразу оказываться в конкретном месте файла.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как это использовать

Как макрос работает

Этот код запускается по событию рабочей книги (Open— при открытии файла) и делает активным нужный лист.

Код макроса

Private Sub Workbook_Open()
'Указываем нужный нам лист
Sheets("Отчёт").Select
End Sub

Как это использовать

Для реализации этого макроса, вам нужно скопировать и вставить его в код события Workbook_Open. Размещение макроса здесь позволяет запускать макрос сразу при открытии excel- файла.

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига.
  3. Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code
  4. В левой части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open, если нет, то выполните п.5
  5. В правом выпадающем списке событие Open

 

FusionBY

Пользователь

Сообщений: 18
Регистрация: 21.04.2015

Добрый день. В очередной раз ищу помощи сообщества. Такой вопрос,макрос сейчас выполняется по нажатию кнопки на конкретной странице. Идея состоит в том, чтобы макрос выполнялся не по нажатию, а при открытии книги. Поместить его в Private Sub Workbook_Open() не составило труда, однако макрос будет работать корректно только если книга откроется на нужном листе. Открываться книга конечно же будет на другом листе с расчетами, а курсы будут подставляться через функцию ВПР, помогите указать абсолютный путь исполнения макроса.

P.S. Это нужно для того, чтобы Пользователь не запаривался о том, как обновляются циферки на странице и просто получал данные.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#2

20.05.2015 15:31:22

Как обратиться к диапазону из VBA

Кратко:

Код
Sheets("ИмяЛиста").Cells(1,1).Value = ""
Sheets("ИмяЛиста").Range("A1").Value = ""

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

#3

20.05.2015 15:45:32

у листа есть так называемое кодовое имя — вот по нему и можно обращаться
преимущество — не может быть изменено неквалифицированным пользователем( да и ни к чему ему)
минус — могут быть проблемы локализации — кодовые имена «переводятся». можно избежать этой проблемы заранее назвав лист( дав кодовое имя) на латинице.

пример:

Код
Лист1.cells(1).value

Живи и дай жить..

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

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

 

FusionBY

Пользователь

Сообщений: 18
Регистрация: 21.04.2015

А можно по подробнее о последнем методе?

 

Scripter

Пользователь

Сообщений: 255
Регистрация: 06.02.2014

#6

21.05.2015 04:58:55

В дополнении к перечисленным

Код
Sheets("ИмяЛиста").[A1].Value
 

FusionBY

Пользователь

Сообщений: 18
Регистрация: 21.04.2015

Что-то я не совсем понимаю, к чему можно прикрутить «Sheets(«ИмяЛиста»).[A1].Value». Если я правильно понял, самый малозатратный метод будет работать следующим образом:
— Открывается книга
— Запоминается наименование текущего листа
— Осуществляется переход на лист где выполняется основной макрос. (экспорт курсов валют)
— Возврат к исходному листу, с которого открылась книга.

Как это осуществить?

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

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

 

FusionBY

Пользователь

Сообщений: 18
Регистрация: 21.04.2015

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

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

#10

21.05.2015 12:35:07

Да ничего сложного:

Код
    Dim r As Object
    '...
    Set r = ActiveSheet
    '...
    r.Select

P.S. И чего это r? Обычно sh! Хотя разницы нет. :)

Изменено: Hugo21.05.2015 12:38:22

 

FusionBY

Пользователь

Сообщений: 18
Регистрация: 21.04.2015

Спасибо. Действительно все очень не сложно оказалось. Может быть вы любезно согласитесь глянуть где я допустил ошибку и почему не работает первый метод? Код идентичный, как при нажатии на кнопку, так и при запуске книги. Однако курсы обновляются только через «button». При открытие появляется только табличка «Готово»!

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

#12

21.05.2015 13:09:52

Вообще-то модуль книги — «стрёмное» место…
Попробуйте разместить код в модуле, ну а вызывать его можно по событию книги.

P.S. Беда сидит в строке

Код
x1 = Sheets("Беларусь").Cells(2, i).Value 'невядомая валюта

Тут дописал лист.

Изменено: Hugo21.05.2015 13:15:47

Обращение к рабочим листам 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 с несколькими листами. На одном из листов есть табличка с исходными данными, к ней написан (путем записи макроса) макрос, который автообновляет данные в табличке (получает их из интернета) и форматирует их так, как мне нужно.
При создании командной кнопки (к который я этот амкрос привязываю) на другом листе книги, макрос работать отказывается и в ошибке указывает вторую строчку, в которой указан диапазон моей таблички.
Вопрос: как оптимизировать код макроса, чтобы по нажатию кнопки, созданной на любом листе этой книги он запускался именно на нужном, с исходной табличкой?
И еще вопрос: как сделать, чтобы вышеуказанный макрос работал в фоновом режиме по моему нажатию на кнопку (т.е. без видимого перехода на лист с исходной табличкой, если я напрмер работаю в другом листе) и выдавал всплывающее сообщение, что работа макроса закончена?


Путей к вершине — множество. Этот один из многих!


Цитата: GWolf от 25.03.2009, 11:09
А эту книжку вы не могли бы выложить ;)

Вот пример книги, в приложенном файле. В ней (книге) две страницы: «Титульный лист» и «Исходные данные».
Записан макрос (Котировки_получение_и_обработка), который работает по нажатию на кнопку «Обновить» на странице «Исходные данные», и не работает по нажатию кнопки «Кнопка1» на странице «Титульный лист».
Хотелось бы, чтобы макрос действовал по нажатию на кнопку на любой из страниц книги. А также — см. мой первый пост :-)


Путей к вершине — множество. Этот один из многих!


Надеюсь GWolf не обидется, что я «встрял» :)

ultravirus,
Во-первых, не используйте Select в Вашем макросе, т.е. замените строки

Range("C2:O2").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone

на:


with Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и второе,
что бы обращение было к конкретному листу конкретной книги используйте абсолютную ссылку, т.е.
конкретную книгу — Workbooks(«Пример.xls») и конкретный лист — Worksheets(«Исходные данные»)

with Workbooks("Пример.xls").Worksheets("Исходные данные").Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и всё наладится ;)

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость…  Мигель Сервантес де Сааведра


Цитата: boa от 26.03.2009, 00:09
Надеюсь GWolf не обидется, что я «встрял» :)

ultravirus,
Во-первых, не используйте Select в Вашем макросе, т.е. замените строки

Range("C2:O2").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone

на:

with Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и второе,
что бы обращение было к конкретному листу конкретной книги используйте абсолютную ссылку, т.е.
конкретную книгу — Workbooks(«Пример.xls») и конкретный лист — Worksheets(«Исходные данные»)
with Workbooks("Пример.xls").Worksheets("Исходные данные").Range("C2:O2")
      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

и всё наладится ;)

необижусь абсолютно …

with Workbooks(«Пример.xls»).Worksheets(«Исходные данные»)
      .Range(«C2:O2»)’ — что дает такая запись, в отличии от предложенной boa? См. Прим.

      .Borders(xlDiagonalDown).LineStyle = xlNone
end with

Прим.

В пределах With … End with теперь можно указывать через точку, любой диапазон принадлежащий книге и (или, если в With указан только лист) листу указанному в With

И еще:

— если Вам нужно задать на выполнение макросом заранее неизвестный диапазон, так научите макрос его (этот диапазон) определять! Например, так:

Sub Proba()
    Dim nRwEnd As Long ' - для занятых строк
    Dim nClEnd As Long ' - для занятых столбцов

    With ThisWorkbook.ActiveSheet
        nRwEnd = .Cells(1, 1).CurrentRegion.Rows.Count
        nClEnd = .Cells(1, 1).CurrentRegion.Columns.Count
    End With
End Sub

Путей к вершине — множество. Этот один из многих!


Сделал все как написано выше — не получается так, чтобы при нажатии на кнопку на другом листе, макрос работал бы на заданном :-(

При нажатии на кнопку выводится сообщение от VBA: «Run-time error ‘1004’: Application-defined or object-defined error» и при нажатии в сообщении на кнопку Debug выводит ошибку на первую же строку исполняемого кода макроса:

    Selection.QueryTable.Refresh BackgroundQuery:=False

Что делать????


Вот что написано в справке:

The following example creates a connection to a SharePoint site and publishes the ListObject object named List1 to the server. A reference to the QueryTable object for the list object is created and the MaintainConnection property of the QueryTable object is set to True so that the connection to the SharePoint site is maintained between trips to the server.

(Следующий пример создает подключение с сайтом SharePoint и издает объект ListObject по имени List1 на сервер. Справочная информация на объект QueryTable для объекта списка создана, и MaintainConnection <xlproMaintainConnection.htm> свойство объекта QueryTable установлен в Истину так, чтобы подключение с сайтом SharePoint было поддержано между поездками в сервер.)

      Dim wrksht As Worksheet
   Dim objListObj As ListObject
   Dim objQryTbl As QueryTable
   Dim prpQryProp As pro
   Dim arTarget(4) As String
   Dim strSTSConnection As String

      Set wrksht = ActiveWorkbook.Worksheets(«Sheet1»)
   Set objListObj = wrksht.ListObjects(1)

      arTarget(0) = «0»
   arTarget(1) = «http://myteam/project1»
   arTarget(2) = «1»
   arTarget(3) = «List1»

      strSTSConnection = objListObj.Publish(arTarget, True)

      Set objQryTbl = objListObj.QueryTable

      objQryTbl.MaintainConnection = True

может в этом проблема — объект незадан явно?
Я с объектом QueryTable не работал. Небыло таких задач.

Путей к вершине — множество. Этот один из многих!


Я не большой спец. Но я обычно создаю переменную типа Range и потом пользуюсь оператором Set. Можно и к другой странице, и к другой книге…


Так… Насчет кнопки на другой странице разобрался — нужно было все лишь вставить строку
   Worksheets(«Лист с таблицей»).Activate
в начало кода, и строку
   Worksheets(«Титульный лист»).Activate
(названия введены для простоты понятия о чем говорю).
Однако теперь встает другой вопрос — как заставить макрос работать в фоновом режиме, чтобы в фоне по нажатию кнопки происходила работа макроса, но без активного прыгания по страничкам?

Может, кто-то знает?


Цитата: ultravirus от 26.03.2009, 15:28
Однако теперь встает другой вопрос — как заставить макрос работать в фоновом режиме, чтобы в фоне по нажатию кнопки происходила работа макроса, но без активного прыгания по страничкам?

Может, кто-то знает?

в начале:
    Application.ScreenUpdating = False
Ваш код
    Application.ScreenUpdating = True
в конце

Путей к вершине — множество. Этот один из многих!


Ур-р-р-р-я-а-а-а-а!!!!!! Заработало!!!! Спасибо всем откликнувшимся и не совсем  :D


Рад! Чертовски рад!

P.S. Как предложение: выкладывать те решения, которые «заработали»! Может кому еще пригодится! Но это только предложение.

Путей к вершине — множество. Этот один из многих!


Понравилась статья? Поделить с друзьями:
  • Макросы в excel ударение
  • Макросы в excel объединение файлов в один
  • Макросы в excel удаление строк с условием
  • Макросы в excel удаление пустых строк
  • Макросы в excel удаление значения в столбце