Страницы: 1 2 След.
RSS
Скрыть лист. VBA. Проблемка с синтаксисом.
 
Добрый день!  
С помощью макроса хотел скрыть некоторые листы книги при закрытий книги.  
(прикрепляю легкий файл)  
Уже полчаса ломаю голову, все на получается у меня. Проблема с синтаксисом.  
Может как то по другому можно?  
Заранее спасибо
With my best regards,      Inter_E
 
Добрый день.  
 
А что вы собственно пытаетесь скрыть? Если лист, то код выглядет так:  
Worksheets("Продажи").Visible = xlSheetHidden  
 
А если код листа, то по моему это невозможно - надо ставить пароль на весь проект
 
{quote}{login=Inter_E}{date=30.08.2010 12:14}{thema=Скрыть лист. VBA. Проблемка с синтаксисом.}{post}Добрый день!  
С помощью макроса хотел скрыть некоторые листы книги при закрытий книги.  
(прикрепляю легкий файл)  
Уже полчаса ломаю голову, все на получается у меня. Проблема с синтаксисом.  
Может как то по другому можно?  
Заранее спасибо{/post}{/quote}  
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.ScreenUpdating = False  
Dim wsheet As Worksheet  
For Each wsheet In ActiveWorkbook.Sheets  
If wsheet.Name = "Продажи" Then GoTo 10:  
wsheet.Visible = xlVeryHidden  
10: Next wsheet  
Application.ScreenUpdating = True  
 
End Sub  
 
я так закрываю
Спасибо
 
К вопросу об использовании оператора GoTo:  
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.ScreenUpdating = False  
Dim wsheet As Worksheet  
For Each wsheet In ActiveWorkbook.Sheets  
If wsheet.Name <> "Продажи" Then wsheet.Visible = xlVeryHidden  
Next  
Application.ScreenUpdating = True  
End Sub
Я сам - дурнее всякого примера! ...
 
Да и вместо ActiveWorkbook лучше Me.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=30.08.2010 12:38}{thema=}{post}Да и вместо ActiveWorkbook лучше Me.{/post}{/quote}  
 
согласен! просто он в под рукой да и go to меня особо не напрягает  
:)
Спасибо
 
{quote}{login=KuklP}{date=30.08.2010 12:38}{thema=}{post}Да и вместо ActiveWorkbook лучше Me.{/post}{/quote}  
 
Не понял, а причем здесь Me?
 
При том, что макрос в модуле книги и лучше явно указать ей, что проверять надо только свои листы.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=30.08.2010 12:52}{thema=}{post}При том, что макрос в модуле книги и лучше явно указать ей, что проверять надо только свои листы.{/post}{/quote}  
 
Спасибо. Я просто всегда считал, что Me работает только с формой...
 
Еще и с листами работает:-)
Я сам - дурнее всякого примера! ...
 
Здравствуйте!  
 
Подскажите, что надо дописать в коде уважаемого KuklP, чтобы можно было не 1 лист скрыть а несколько, например с названиями БД1, БД2 и БД3?  
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.ScreenUpdating = False  
Dim wsheet As Worksheet  
For Each wsheet In ActiveWorkbook.Sheets  
If wsheet.Name <> "Продажи" Then wsheet.Visible = xlVeryHidden  
Next  
Application.ScreenUpdating = True  
End Sub  
 
Спасибо!
 
если в лоб, то просто повторить строку:  
 
If wsheet.Name <> "Продажи" Then wsheet.Visible = xlVeryHidden  
 
столько раз, сколько надо, заменив, конечно, названия на нужные..
Живи и дай жить..
 
{quote}{login=слэн}{date=04.03.2011 12:15}{thema=}{post}если в лоб, то просто повторить строку:  
 
If wsheet.Name <> "Продажи" Then wsheet.Visible = xlVeryHidden  
 
столько раз, сколько надо, заменив, конечно, названия на нужные..{/post}{/quote}  
 
Уже пробовал, excel сразу ругается и Next выделяет цветом. Кстати значок <> что подразумевает?
 
не верю!  
 
докажите
Живи и дай жить..
 
Я что-то не углядел или не понимаю?  
Разве макрос Сергея (KuklP) не оставляет видимым ТОЛЬКО лист "Продажи", а все остальные прячет (и при этом так глубоко прячет, что только через VBЕ их заставить показаться и можно)?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Ну, а вообще-то для оставления нескольких листов можно в модуль книги запихнуть что-то типа этого:  
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
  Application.ScreenUpdating = False  
  Dim wSheet As Worksheet  
  For Each wSheet In Me.Sheets  
     Select Case wSheet.Name  
        Case "Продажи"  
        Case "Откаты"  
        Case "Приливы"  
        Case Else: wSheet.Visible = xlVeryHidden  
     End Select  
  Next  
  Application.ScreenUpdating = True  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
   Dim a, i&  
   a = Array("Лист1", "Лист2",.....)  
   Application.ScreenUpdating = False  
   For i = 0 To UBound(a)  
       Me.Sheets(a(i)).Visible = xlVeryHidden  
   Next  
   Application.ScreenUpdating = True  
End Sub  
Или если не надо  xlVeryHidden  
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Sheets(Array("Лист1", "Лист3",...)).Select  
ActiveWindow.SelectedSheets.Visible = 0  
End Sub
Я сам - дурнее всякого примера! ...
 
А как вернуть макросом листы со значением xlVeryHidden? Как выглядит код?
 
Me.Sheets(a(i)).Visible = -1
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=18.01.2012 06:31}{thema=}{post}Me.Sheets(a(i)).Visible = -1{/post}{/quote}  
 
Dim a, i&  
For i = 0 To UBound(a)  
a = Array("Лист1", "Лист2", "(Лист3)")  
ActiveWindow.Sheets(a(i)).Visible = 0  
Next  
 
Где ошибка? Пишет Type mismatch и выделяет строку с For.
 
Это только в арифметике от перемены мест слагаемых сумма не меняется.
 
Тут и цикл никчему:  
Private Sub www()  
Sheets(Array("Лист1", "Лист3")).Visible = 0  
End Sub
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=18.01.2012 10:06}{thema=}{post}Тут и цикл никчему:  
Private Sub www()  
Sheets(Array("Лист1", "Лист3")).Visible = 0  
End Sub{/post}{/quote}  
 
Пишет ошибку:  
Нельзя установить свойство Visible класса Sheets. Как быть?
 
Подозреваю, что в книге ВСЕГО три листа. А ВСЕ скрытыми быть не могут - хоть один, да должен быть на виду :-)
 
Короче не буду мучать вас :) У меня есть вот такой код:  
 
Sub Формирование()  
 
Dim wsSh As Worksheet, NewWb As Workbook, asArr(), li As Long, DateString, object As String  
Dim iPath As String  
 
DateString = Range("K8").Value  
object = Range("D13").Value  
Application.ScreenUpdating = False  
 
For Each wsSh In Worksheets  
If wsSh.Visible <> -1 Then ReDim Preserve asArr(li): asArr(li) = wsSh.Name: li = li + 1: wsSh.Visible = xlSheetVisible  
Next wsSh  
Sheets(Array("Лист1", "Лист2", "(Лист3)")).Copy  
Set NewWb = ActiveWorkbook  
 
For Each wsSh In NewWb.Worksheets  
With wsSh  
.Visible = True  
.UsedRange.Value = .UsedRange.Value  
.Cells.FormulaHidden = True  
End With  
Next  
 
With Application.FileDialog(msoFileDialogFolderPicker)  
.Title = "Перенесенные"  
.Show  
If .SelectedItems.Count = 0 Then Exit Sub  
iPath = .SelectedItems(1) & Application.PathSeparator  
End With  
 
NewWb.SaveAs Filename:=iPath & DateString & " " & object & " Перенесенные.xls"  
Application.ScreenUpdating = True  
End Sub  
 
 
Данный код при его выполнении, копирует листы из одной книги и создает новый файл куда и вставляет скопированные листы. При этом имя задается из ячеек.  
 
Но изначально я выставил что при открытие книги листам 1,2 и 3 задается параметр xlVeryHidden. Поэтому копирование листов невозможно если не разблочить листы.  
 
Но эти листы после выполнения данной процедуры должны скрыться опять с таким же параметром xlVeryHidden. Ибо пользователю нечего лезть на эти листы, да и вообще знать о их существовании.  
 
Как дополнить код, чтобы до копирование функция VeryHidden отключилась и после формирования включилась? Причём при копировании и создании новой книги с листами 1, 2 и 3 Лист 3 в новой книге тоже должен иметь это свойство. Подскажите?
 
В книге больше листов. Процедура запускается совсем с другого листа. Не с листов 1, 2 и 3.
 
Если не секрет - а зачем переносить?  
Может проще сразу "сохранить как"?
 
Нет, нужно именно переносить.  
 
По факту в исходном файле лежат листы 1,2,3 как образцы. Они заполняются автоматически после некоторых операций на других листах. После по кнопке копируются в новый файл, где уже и редактируются.  
 
Поэтому в исходном файле и требуется то их скрыть, чтобы образцы не тронутыми были случайно.
 
Ребят, ну подскажите?
 
А что подсказать?
Страницы: 1 2 След.
Читают тему
Наверх