Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Оператор SET - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оператор SET (Макросы Sub)
Оператор SET
Alex Дата: Пятница, 07.02.2014, 13:59 | Сообщение № 1
Группа: Гости
[vba]
Код
Function FoundSheet(AWB As Workbook, ByRef ASheetCodeName As String) As Worksheet
Dim AWS As Worksheet
Set FoundSheet = Nothing
For Each AWS In AWB.Sheets
If UCase(AWS.CodeName) = UCase(ASheetCodeName) Then
Set FoundSheet = AWS
Exit Function
End If
Next
End Function

Function CreateOrAssignMyList(ByRef AWB As Workbook) As Worksheet
Dim N%
Set CreateOrAssignStatList = FoundSheet AWB "MyList"
if CreateOrAssignStatList is Nothing then Exit Function
AWB.Sheets.Add Before:=AWB.Sheets(1)
Set CreateOrAssignStatList = AWB.Sheets(1)
If CreateOrAssignStatList Is Nothing Then Exit Function
.......
End Function

sub Test
dim ws As Worksheet
set ws = CreateOrAssignList(Thisworkbook)
end sub
[/vba]

Подскажите пожалуйста насколько правильно я использую оператор SET?
Или нужно так, например: FoundSheet = AWS и CreateOrAssignStatList = FoundSheet AWB "MyList" и ws = CreateOrAssignList(Thisworkbook) ...т.е. без set

В конечном итоге должна быть в ws ссылка на найденный лист в книге или на созданный вновь, если такого не было...
 
Ответить
Сообщение[vba]
Код
Function FoundSheet(AWB As Workbook, ByRef ASheetCodeName As String) As Worksheet
Dim AWS As Worksheet
Set FoundSheet = Nothing
For Each AWS In AWB.Sheets
If UCase(AWS.CodeName) = UCase(ASheetCodeName) Then
Set FoundSheet = AWS
Exit Function
End If
Next
End Function

Function CreateOrAssignMyList(ByRef AWB As Workbook) As Worksheet
Dim N%
Set CreateOrAssignStatList = FoundSheet AWB "MyList"
if CreateOrAssignStatList is Nothing then Exit Function
AWB.Sheets.Add Before:=AWB.Sheets(1)
Set CreateOrAssignStatList = AWB.Sheets(1)
If CreateOrAssignStatList Is Nothing Then Exit Function
.......
End Function

sub Test
dim ws As Worksheet
set ws = CreateOrAssignList(Thisworkbook)
end sub
[/vba]

Подскажите пожалуйста насколько правильно я использую оператор SET?
Или нужно так, например: FoundSheet = AWS и CreateOrAssignStatList = FoundSheet AWB "MyList" и ws = CreateOrAssignList(Thisworkbook) ...т.е. без set

В конечном итоге должна быть в ws ссылка на найденный лист в книге или на созданный вновь, если такого не было...

Автор - Alex
Дата добавления - 07.02.2014 в 13:59
PowerBoy Дата: Пятница, 07.02.2014, 14:59 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Если присваиваете объект используйте set.


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
СообщениеЕсли присваиваете объект используйте set.

Автор - PowerBoy
Дата добавления - 07.02.2014 в 14:59
Alex Дата: Понедельник, 10.02.2014, 09:35 | Сообщение № 3
Группа: Гости
Скажите пожалуйста, если функция возвращает объект, то внутри функции как к этому объекту обращаться?

[vba]
Код
function CreateSheet (AWB as workbook) as worksheet
AWB.Sheets.Add Before:=AWB.Sheets(1)
set CreateSheet = AWB.Sheets(1) '<<<<<<< Вот тут правильно?
with CreateSheet '<<<<<<< Вот тут правильно?
.Name = "ListName"
....
End With

end function
[/vba]

Правильно будет если обращаться именем функции?
 
Ответить
СообщениеСкажите пожалуйста, если функция возвращает объект, то внутри функции как к этому объекту обращаться?

[vba]
Код
function CreateSheet (AWB as workbook) as worksheet
AWB.Sheets.Add Before:=AWB.Sheets(1)
set CreateSheet = AWB.Sheets(1) '<<<<<<< Вот тут правильно?
with CreateSheet '<<<<<<< Вот тут правильно?
.Name = "ListName"
....
End With

end function
[/vba]

Правильно будет если обращаться именем функции?

Автор - Alex
Дата добавления - 10.02.2014 в 09:35
AndreTM Дата: Понедельник, 10.02.2014, 10:09 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
По идее, можно и так.
Только у вас ошибочка - лучше явно присвоить создаваемый объект, нежели ориентироваться на умолчания:
[vba]
Код
set CreateSheet = AWB.Sheets.Add Before:=AWB.Sheets(1)   
with CreateSheet
...
[/vba]
Ну а ещё лучше (поскольку объект обычно передается по ссылке, т.е. малозатратно по памяти) - всё же создать локальную переменную нужного типа, а уж при выходе - присвоить её имени:
[vba]
Код
function CreateSheet (AWB as workbook) as worksheet   
   Dim newSh as worksheet
   set newSh = AWB.Sheets.Add Before:=AWB.Sheets(1)   
   with newSh
    .Name = "ListName"   
    ....   
   End With   
   set CreateSheet = newSh
end function
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Понедельник, 10.02.2014, 10:13
 
Ответить
СообщениеПо идее, можно и так.
Только у вас ошибочка - лучше явно присвоить создаваемый объект, нежели ориентироваться на умолчания:
[vba]
Код
set CreateSheet = AWB.Sheets.Add Before:=AWB.Sheets(1)   
with CreateSheet
...
[/vba]
Ну а ещё лучше (поскольку объект обычно передается по ссылке, т.е. малозатратно по памяти) - всё же создать локальную переменную нужного типа, а уж при выходе - присвоить её имени:
[vba]
Код
function CreateSheet (AWB as workbook) as worksheet   
   Dim newSh as worksheet
   set newSh = AWB.Sheets.Add Before:=AWB.Sheets(1)   
   with newSh
    .Name = "ListName"   
    ....   
   End With   
   set CreateSheet = newSh
end function
[/vba]

Автор - AndreTM
Дата добавления - 10.02.2014 в 10:09
Alex Дата: Понедельник, 10.02.2014, 10:13 | Сообщение № 5
Группа: Гости
Спасибо!
 
Ответить
СообщениеСпасибо!

Автор - Alex
Дата добавления - 10.02.2014 в 10:13
Alex Дата: Понедельник, 10.02.2014, 10:19 | Сообщение № 6
Группа: Гости
[quote=AndreTM]Только у вас ошибочка - лучше явно присвоить создаваемый объект, нежели ориентироваться на умолчания:
[vba][code]set CreateSheet = AWB.Sheets.Add Before:=AWB.Sheets(1)[/code][/vba][/quote]

Странно, сделал так, и меня ошибку компилятор выдал:
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected: end of statement
---------------------------
ОК Справка
---------------------------
 
Ответить
Сообщение[quote=AndreTM]Только у вас ошибочка - лучше явно присвоить создаваемый объект, нежели ориентироваться на умолчания:
[vba][code]set CreateSheet = AWB.Sheets.Add Before:=AWB.Sheets(1)[/code][/vba][/quote]

Странно, сделал так, и меня ошибку компилятор выдал:
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected: end of statement
---------------------------
ОК Справка
---------------------------

Автор - Alex
Дата добавления - 10.02.2014 в 10:19
AndreTM Дата: Понедельник, 10.02.2014, 10:36 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А так?
[vba]
Код
Set CreateSheet = AWB.Sheets.Add(AWB.Sheets(1))
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА так?
[vba]
Код
Set CreateSheet = AWB.Sheets.Add(AWB.Sheets(1))
[/vba]

Автор - AndreTM
Дата добавления - 10.02.2014 в 10:36
Alex Дата: Понедельник, 10.02.2014, 10:48 | Сообщение № 8
Группа: Гости
Отлично. Работает! Спасиб!!!)
 
Ответить
СообщениеОтлично. Работает! Спасиб!!!)

Автор - Alex
Дата добавления - 10.02.2014 в 10:48
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оператор SET (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!