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

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

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

Код: plaintext
1.
 Activesheet.Name
...
Рейтинг: 0 / 0
15.07.2009, 11:00
    #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
15.07.2009, 11:13
    #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
15.07.2009, 11:41
    #36090750
AlexLev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
qwrqwr,
Благодарю за наглядный пример.
Но в моем случае, - надо передать в вызываемую процедуру еще и другие параметры, к примеру номер строки. И вот тут я не понимаю, как это можно в вызове "прикрутить".
...
Рейтинг: 0 / 0
15.07.2009, 11:43
    #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
15.07.2009, 11:54
    #36090793
AlexLev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
PlanBЛисты можно обзывать:


Ну, это понятно. Но хотелось бы просто передать сразу объект, чтобы его не воссоздавать в процедуре.
...
Рейтинг: 0 / 0
15.07.2009, 11:59
    #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
16.07.2009, 08:43
    #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
16.07.2009, 09:50
    #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
02.11.2009, 15:32
    #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
02.11.2009, 15:38
    #36286224
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
Function SheetName(sName As String ) As String
...
Рейтинг: 0 / 0
02.11.2009, 15:48
    #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
02.11.2009, 17:49
    #36286700
basil12345
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
Спасибо!
Помогло! Единственое, что функции INDIRECT в Excel 2003 не нашёл (может двссыл?).
...
Рейтинг: 0 / 0
02.11.2009, 21:24
    #36287040
qwrqwr_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
basil12345не нашёл (может двссыл?).ну да, по-русски она ДВССЫЛ().
Вы же по-ангельски в вопросе SUM написали...
...
Рейтинг: 0 / 0
04.11.2009, 19:34
    #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
05.11.2009, 13:13
    #36292001
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
basil12345, а зачем пользовательская функция, если можно вернуть имя листа через =ЯЧЕЙКА() ?
правда, файл нужно сохранить...
...
Рейтинг: 0 / 0
06.11.2009, 10:25
    #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
06.11.2009, 10:27
    #36293965
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
Забыл написать вопрос - почему не передает лист в метод моего класса?

Cпасибо.
...
Рейтинг: 0 / 0
06.11.2009, 12:00
    #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
06.11.2009, 12:19
    #36294364
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
qwrqwr, Огромное спасибо!!!
...
Рейтинг: 0 / 0
06.11.2009, 12:31
    #36294411
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
А у меня не работает....
...
Рейтинг: 0 / 0
06.11.2009, 12:40
    #36294435
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
testing22
код класса Class1:
Public Sub test1(ByRef wksh As Worksheet)
Stop
End Sub
...
Рейтинг: 0 / 0
06.11.2009, 12:59
    #36294516
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в процедуру имя листа, или сам лист
Спасибо, понял, первый раз столкнулся...
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Передать в процедуру имя листа, или сам лист / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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