powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Передать в процедуру имя листа, или сам лист
24 сообщений из 24, страница 1 из 1
Передать в процедуру имя листа, или сам лист
    #36090416
AlexLev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel 2003. Мне хотелось бы передать в процедуру, находящуюся в общем модуле, имя листа; а еще лучше - сам лист в качестве объекта. Вот только что-то не срабатывает.
Объект в процедуре не работает. Прошу дать простой пример, как это надо делать.
Спасибо.
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090559
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как пробовали? и что не получается?

имя листа можно получить так:
Код: plaintext
1.
  ThisWorkbook.Worksheets( 1 ).Name

или, если лист активный, то:

Код: plaintext
1.
 Activesheet.Name
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090579
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexLevПрошу дать простой пример, как это надо делать.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub PublProc(ByRef ws As Worksheet)
    With ws
        .Cells( 2 ,  2 ).Value = "Hello!"
        .Cells( 1 ,  1 ).Interior.ColorIndex =  4 
        MsgBox .Name
    End With
End Sub

Public Sub Test()
    PublProc ActiveWorkbook.Worksheets( 1 )
    PublProc ActiveWorkbook.Worksheets( 3 )
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090625
AlexLev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcar,

Хотелось бы типа:

Sub Процедура1()
Dim ЛистИтоги As Worksheet
Set ЛистИтоги = Worksheets("Лист2")

Процедура2 ЛистИтоги
End Sub

Public Sub Процедура2(ЛистИтоги)
ЛистИтоги.Rows(1).Select
End Sub

Но не срабатывае даже:

Sub Процедура1()
Процедура2 "Лист2"
End Sub

Public Sub Процедура2(ИмяЛиста)
Dim x As Workbook
Set x = Workbooks(ИмяЛиста)
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090750
AlexLev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwrqwr,
Благодарю за наглядный пример.
Но в моем случае, - надо передать в вызываемую процедуру еще и другие параметры, к примеру номер строки. И вот тут я не понимаю, как это можно в вызове "прикрутить".
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090759
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Листы можно обзывать:
Код: plaintext
1.
2.
Sheets("Лист1") '- по названию
Sheets( 1 ) '- по номеру
ActiveSheet '- по активности
Можно уточнять книгу листа:
Код: plaintext
Application.ThisWorkbook.ActiveSheet '- для данной книги
можно загонять имя листа в константу:
Код: plaintext
1.
2.
3.
4.
Option Explicit
Dim b1 As Workbook 'книга
Dim sh1 As Worksheet    'лист
Set b1 = Application.Workbooks.Open(fPath, False) 'fPath - путь к книге
Set sh1 = b1.Sheets("Форма #1")
Вот, как-то так
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090793
AlexLev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanBЛисты можно обзывать:


Ну, это понятно. Но хотелось бы просто передать сразу объект, чтобы его не воссоздавать в процедуре.
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36090810
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexLevqwrqwr,
Благодарю за наглядный пример.
Но в моем случае, - надо передать в вызываемую процедуру еще и другие параметры, к примеру номер строкину так и передайте.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub PublProc(ByRef ws As Worksheet, ByVal nRow As Long)
    With ws
        .Cells(nRow,  2 ).Value = "Hello!"
        .Cells(nRow,  1 ).Interior.ColorIndex =  4 
        Debug.Print .Name
    End With
End Sub

Public Sub Test()
    PublProc ActiveWorkbook.Worksheets( 1 ),  50 
    PublProc ActiveWorkbook.Worksheets( 1 ),  100 
    PublProc ActiveWorkbook.Worksheets( 3 ),  25 
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36092444
AlexLev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу объяснить, почему в следующем примере, не срабатывает команда ".Rows(1).Select"?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Sub Исполнитель(ByRef ws As Worksheet, ByVal nRow As Long)
    With ws
        .Rows( 1 ).Select  'НЕ срабатывает
    End With
End Sub

Public Sub Вызов()
    Rows( 1 ).Select  'Срабатывает
    Исполнитель ActiveWorkbook.Worksheets( 3 ),  3 
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36092539
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexLevПрошу объяснить, почему в следующем примере, не срабатывает команда ".Rows(1).Select"?Потому что селект работает только на активном листе.
Вот так работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub Исполнитель(ByRef ws As Worksheet, ByVal nRow As Long)
    With ws
        .Activate
        .Rows(nRow).Select
    End With
End Sub

Public Sub Вызов()
    Исполнитель ActiveWorkbook.Worksheets( 3 ),  3 
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36286196
basil12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Не подскажете. как написать функцию, возвращающую имя листа? Необходимо для того, чтобы использовать во вложенной функции: например SUM.
Написал кое-что, но выдает ошибку ссылки!

Function SheetName(sName As Range) As String
Dim i As Integer
For i = 1 To ActiveWorkbook.Sheets.Count
If Sheets(i).Name = sName Then
SheetName = ActiveWorkbook.Sheets(i).Name
End If
Next i
End Function

=SUM(SheetName(B1)!A1:A5;SheetName(B2)!A1:A5), где B1, B2 - ячейки главного листа, указывающие какие листы использовать в расчёте.

Спасибо!
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36286224
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Function SheetName(sName As String ) As String
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36286252
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basil12345
=SUM(SheetName(B1)!A1:A5;SheetName(B2)!A1:A5), где B1, B2 - ячейки главного листа, указывающие какие листы использовать в расчёте.

=SUM(INDIRECT(B1 & "!A1:A5");INDIRECT(B2 & "!A1:A5"))

PS: VBA-функция здесь не нужна
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36286700
basil12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Помогло! Единственое, что функции INDIRECT в Excel 2003 не нашёл (может двссыл?).
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36287040
qwrqwr_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
basil12345не нашёл (может двссыл?).ну да, по-русски она ДВССЫЛ().
Вы же по-ангельски в вопросе SUM написали...
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36290785
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basil12345Не подскажете. как написать функцию, возвращающую имя листа?
Вот так:
Код: plaintext
1.
2.
Public Function SheetName(sName As Range) As String
    SheetName = sName.Worksheet.Name
End Function
Использовать ее можно вот так:
SomeColumn=SheetName(B1)=SUM(INDIRECT(sheetname(B1)&"!A1:A5"):INDIRECT(sheetname(B1)&"!A1:A5"))
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36292001
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basil12345, а зачем пользовательская функция, если можно вернуть имя листа через =ЯЧЕЙКА() ?
правда, файл нужно сохранить...
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36293961
testing22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
- надо передать лист в виде параметра в процедуру - передает
- надо передать лист в виде параметра в метод класса - Object doesn't support this property or method' errors

код модуля:
Public Sub qqq()
Dim w As Worksheet
Set w = Worksheets("Log")

Dim test As Class1
Set test = New Class1
Stop

test.test1 (w)
End Sub

код класса Class1:
Public Sub test1(ByRef wksh As Worksheet)
Stop
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36293965
testing22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать вопрос - почему не передает лист в метод моего класса?

Cпасибо.
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36294281
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
testing22
Код: plaintext
test.test1 (w)
Забыл написать вопрос - почему не передает лист в метод моего класса?
Cпасибо.скобочки лишние - они воспринимаются как часть имени параметра

Так все работает:
Код: plaintext
1.
2.
3.
Public Sub test1(ByRef wksh As Worksheet)
    MsgBox wksh.Name
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub qqq()
Dim w As Worksheet, test As Class1
    Set test = New Class1

    For Each w In Application.Worksheets
          test.test1 w
        ' или же Call test.test1(w)
    Next
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36294364
testing22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwr, Огромное спасибо!!!
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36294411
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у меня не работает....
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36294435
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
testing22
код класса Class1:
Public Sub test1(ByRef wksh As Worksheet)
Stop
End Sub
...
Рейтинг: 0 / 0
Передать в процедуру имя листа, или сам лист
    #36294516
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, понял, первый раз столкнулся...
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Передать в процедуру имя листа, или сам лист
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]