Страницы: 1
RSS
как пометить лист для последующего удаления? VBA
 
пока только придумал имя создавать( не листа, а на листе в .names)
те на vba создаются листы, потом програмно же и уничтожаются..
но.. между может быть творчество пользователя.. поэтому положение листов или видимое имя не годятся
Живи и дай жить..
 
придумал еще вариант: на суперскрытом листе вести реестр кодовых имен
Живи и дай жить..
 
А внутреннее (кодовое) имя?
 
Вариант - в имена скрытое имя, которое ссылается на весь диапазон нужного листа.
Не влияет смена имени и расположения листа, как и смена его кодового имени.
 
спасибо Hugo. но скрытое имя на листе представляется проще для реализации:


Код
with sheets.add
.Names.Add("wrk__", "1").Hidden = True

и


Код
On Error Resume Next
 Application.DisplayAlerts = False
 For Each sh In ThisWorkbook.Worksheets
 sh.Names("wrk__").Parent.Delete
 Next sh
 Application.DisplayAlerts = True

или как?

Юрий, кодовое имя нельзя изменить программно..
Живи и дай жить..
 
У листа если "неиспользуемые" свойства, типа StandardWidth (ширина столбцов по-умолчанию)
Код
ActiveSheet.StandardWidth = 10 
достаточно прописать в это свойство значение, отличное от значения по-умолчанию (например, 10, вместо 8,43),
- и потом удалять по этому признаку

Ещё вариант: CustomProperties
Код
Sub test()
    Dim sh As Worksheet: Set sh = ActiveSheet
    sh.CustomProperties.Add "delete", True

    ' потом в цикле
    ' If sh.CustomProperties.Count Then sh.Delete
End Sub
 
Изменено: Игорь - 12.12.2013 13:52:56
 
еще варианты?
Живи и дай жить..
 
спасибо Игорь! а где же образование? :) только по аватарке и узнать
Живи и дай жить..
 
попробовал, но StandardWidth очень даже используется..
Живи и дай жить..
 
Смена имени программно: ( http://www.msoffice.nm.ru/faq/macros/module.htm#faq45 )

Код
iCodeName = ActiveSheet.CodeName


Application.VBE.ActiveVBProject.VBComponents(iCodeName).Name = "CodeName"
' Вариант I.


ActiveWorkbook.VBProject.VBComponents(iCodeName).Name = "CodeName"
' Вариант II. 
 
предварительно разрешив доступ к проекту?
Живи и дай жить..
 
по изменению codename познавательно, спасибо. customproperties тоже записал
Живи и дай жить..
 
тогда, как я писал, используйте CustomProperties
а чем вам не нравится ваш способ с Names?
 
Еще как вариант указать для свойства листа ScrollArea адрес всех ячеек и на это опираться потом:

Код
Sub SetScroll()
 ActiveSheet.ScrollArea = Cells.Address
End Sub
Sub DelScrollSh()
 Dim wsSh As Worksheet
 Application.DisplayAlerts = 0
 For Each wsSh In Worksheets
 If wsSh.ScrollArea = Cells.Address Then wsSh.Delete
 Next wsSh
 Application.DisplayAlerts = 1
End Sub
Вручную это свойство не меняется, да и все ячейки никто не указывает.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
а чем вам не нравится ваш способ с Names?
нравится, просто сначала я тоже стал пробовать codename, а names придумал, но не реализовал

потом реализовал.. и понравился :)  но теперь уж интересно как еще, раз уж тему затронули
Живи и дай жить..
Страницы: 1
Наверх