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
Дата: Понедельник, 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
По идее, можно и так. Только у вас ошибочка - лучше явно присвоить создаваемый объект, нежели ориентироваться на умолчания: [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]
По идее, можно и так. Только у вас ошибочка - лучше явно присвоить создаваемый объект, нежели ориентироваться на умолчания: [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
Дата: Понедельник, 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