2015-03-25 4 views
1

я использую очень часто, что рутина, что я хотел изменить в функцию, чтобы иметь возможность установить дополнительные листы сразу же, как этотVBA: Используя функцию, чтобы установить новый лист

Set ShP = DeleteAndAddSheet("Name") 

Так вот функция:

Public Function DeleteAndAddSheet(ByVal SheetName As String) As Worksheet 

For Each aShe In Sheets 
    If aShe.Name <> SheetName Then 
    Else 
     Application.DisplayAlerts = False 
     aShe.Delete 
     Application.DisplayAlerts = True 
     Exit For 
    End If 
Next aShe 

Sheets.Add after:=Sheets(Sheets.Count) 
Sheets(Sheets.Count).Name = SheetName 

DeleteAndAddSheet = ThisWorkbook.Worksheets(Worksheets.Count) 

End Function 

Я получаю сообщение об ошибке «91» на последней строке при настройке вывода функция, в «Объект переменная или переменная не установлена»

Я попытался с Простыни и Таблицах, и ни один из го em work ...

Есть идеи?

+0

Он говорит, что это ошибка синтаксиса ... – R3uK

+1

Thx для редактирования кстати;) – R3uK

ответ

3

изменение

DeleteAndAddSheet = ThisWorkbook.Worksheets(Worksheets.Count) 

в

set DeleteAndAddSheet = ThisWorkbook.Worksheets(Worksheets.Count) 
+0

Синтаксис, который вы предоставляете, является правильным. Мой вопрос: * Возможно ли, чтобы функция возвращала объект «Worksheet»? * –

+0

Awesome! Спасибо! Не может принять ответ в течение 3 минут, не знаю почему, но будет;) – R3uK

+0

Функции могут возвращать объекты в целом. – FreeMan

0

Вы нужду, чтобы превратить его в Sub вместо этого, Function не может ничего изменить, кроме ячейки она работает на, так Application.DisplayAlert -statements, а также попытка удалить рабочий лист заставляет его бросить ошибку.

После некоторых испытаний выяснится, что function позволит вам, например, удалите лист, но он не позволит изменять настройки приложения.

+0

Он указал, что ошибка на последней строке кода , Поэтому, если это не будет сделано в заявлении 'If', я не уверен, что это проблема. – FreeMan

+0

Для того, что я знаю, это правда, формула изменяет ячейку хостинга, которая явно не может хранить объект Worksheet. Если вы действительно хотите, чтобы это выполнялось с помощью функции, вы можете добавлять/удалять листы в теле функции, но вам нужно вернуть другой тип значения (например, логическое значение True/False) –

+0

@MatteoNNZ " формула модифицирует хостинговую ячейку «вообще или в этом конкретном случае? Его код не изменяет никаких ячеек ... Существуют некоторые ограничения на то, что может выполнять функция «Функция», но добавление/удаление рабочих листов и возврат объекта не являются этими ограничениями. (Заметьте, он опубликовал, что мое рекомендуемое исправление работает для него, и согласилось с этим в качестве ответа). Не пытаться быть суровым, просто пытаться помочь. – FreeMan

Смежные вопросы