Ссылка на лист как макрос в excel

Если в макросе не указано слева ничего, то обращение идет к подобъекту активного объекта. Например,

Код
Cells(Rows.Count, 2).End(xlUp).Row

В этом случае обращение идет к ячейкам. Они — подобъект листа. Значит, обращение пойдет к ячейкам активного листа. Чтобы обратиться к ячейкам листа, который не является активным, то нужно указать его явно:

Код
Sheets("имя Вашего листа").Cells(Rows.Count, 2).End(xlUp).Row

Чтобы укоротить запись можно вставить блок With. У Вас он использован. Внутри этого блока ко всему, что начинается с точки, применяется тот объект, который в строке с With.
Переменным можно присваивать объекты. В приведенном Вами макросе это тоже использовано, тогда можно обращаться к ячейкам неактивного листа еще и так:

Можно работать и с неактивной в данный момент книгой:

Код
Workbooks("Имя Вашей книги").Sheets("имя Вашего листа").Cells(15, 2)

Обращение с явным указанием возможно и для активного объекта…

Привет, Народ!
У меня совсем нет опыта в написании макросов, поэтому прошу помощи.
Ситуация следующая: у меня есть книга 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. Как предложение: выкладывать те решения, которые «заработали»! Может кому еще пригодится! Но это только предложение.

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


Добрый день.
в VBA не силен, поэтому обращаюсь к вам.
У меня есть макрос который делает фигуру прозрачной по значению в ячейке.
Мне необходимо чтоб название фигуры и значение находились на другом листе,
ну допустим Лист2 ячейка F10.
Соответственно в макросе должна быть ссылка на конкретный лист и ячейку.
К сожалению сделать самому не получилось подскажите вы пожалуйста.
Пример кода.
[vba]

Код

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
lr = Cells(Rows.Count, 2).End(xlUp).Row
arr = Range(Cells(10, 1), Cells(lr, 3)).Value
For Each Shape In ActiveSheet.Shapes
    For i = 1 To UBound(arr)
         If Shape.Name = arr(i, 1) Then
            If arr(i, 2) = 1 Then Shape.Fill.Transparency = 1
            If arr(i, 2) = 2 Then Shape.Fill.Transparency = 0
         End If
    Next
Next
End Sub

[/vba]

Make a particular worksheet visible using a macro in Excel.

This is called activating a worksheet and is rather easy to do.

Sections:

Activate Worksheet by Name

Activate Worksheet by Index Number

Notes

Activate Worksheet by Name

Let’s navigate to, activate, the worksheet called «Sheet2».

Worksheets("Sheet2").Activate

08008f3433d614b4eb713fdcde4e01eb.jpg

Worksheets(«Shee2») is how we reference the sheet to which we want to navigate.

Sheet2 is the name of the sheet to which we want to navigate. Make sure to surround it with double quotation marks.

Activate is what actually takes the user to that worksheet.

Putting it all together, we get: Worksheets(«Sheet2»).Activate

It’s as simple as that.

Activate Worksheet by Index Number

This time, let’s navigate to the second worksheet using its index number.

All we do is to replace «Sheet2» from the last example with 2.

Worksheets(2).Activate

3e8969b16e6f131afc29445b0f9a02ac.jpg

2 is the index number of the desired worksheet and Activate is what takes us to the desired worksheet.

This example can be confusing if you are not used to using index numbers, but index numbers are really helpful when you have to do something like loop through all of the worksheets in the workbook.

Notes

Basically, just reference the desired worksheet, however you want, and then type .Activate after it.

You should not use the Activate feature to navigate to a worksheet so that you can get data from it or put data into it. This is very bad Macro/VBA design and it will make your life hell later on. To get data from separate worksheets, read this tutorial: Select Data from Separate Worksheets with Macros VBA in Excel.

This feature should be used when you want the user to end up on a specific worksheet.

Make sure to download the sample file attached to this tutorial so that you can see this macro in Excel and work with it.

Similar Content on TeachExcel

Copy and Paste Data using Macro VBA in Excel

Tutorial: How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this,…

Select Data from Separate Worksheets with Macros VBA in Excel

Tutorial: Select data from other worksheets with Macros and VBA without navigating to those workshee…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Login to a Website using a Macro

: Connect and login to a website using a macro in Excel.
This allows you to open a website a…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Guide to Creating Charts with a Macro in Excel

Tutorial: How to add, edit, and position charts in Excel using VBA.
This tutorial covers what to do …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

Помогает открыть Excel-книгу на нужном листе. С этим макросом Ваши пользователи будут сразу оказываться в конкретном месте файла. Этот код запускается по событию рабочей книги (Open— при открытии файла) и делает активным нужный лист. 

Ссылка на это место страницы:
#formula

  1. Private Sub Workbook_Open()
  2. Sheets("Отчёт").Select
  3. End Sub

Ссылка на это место страницы:
#kak

Макрос открывает книгу Excel на нужном листе, определяя этот лист перед запуском.

Ссылка на это место страницы:
#touse

Для реализации этого макроса, вам нужно скопировать и вставить его в код события Workbook_Open

Размещение макроса здесь позволяет запускать макрос сразу при открытии Excel- файла. 

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

Ссылка на это место страницы:
#file

Файлы статей доступны только зарегистрированным пользователям.

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.

Подписывайтесь на нас в соц.сетях:

Понравилась статья? Поделить с друзьями:
  • Ссылка на лист в новом excel
  • Ссылка на номер ячейки в excel по формуле
  • Ссылка на уравнение word
  • Ссылка на лист в миф excel
  • Ссылка на номер формулы в word