Доброго времени суток Как "заставить" макрос выполняться один раз. В моем случае, после выбора листа и последующего сохранения книги, открываться она должна уже в сохраненном варианте, а не повторно следовать макросу[vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True End Sub
[/vba]
Доброго времени суток Как "заставить" макрос выполняться один раз. В моем случае, после выбора листа и последующего сохранения книги, открываться она должна уже в сохраненном варианте, а не повторно следовать макросу[vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True End Sub
При сохранении (workbook_beforesave) записать признак в одну из потаенных ячеек и потом проверить это признак при открытии, если он есть , то не продолжать. Ну или инверсировать это. Или утсановить это признак при выполнении workbook_open? Это даже лучше, для отладки и подготовки шаблона.
При сохранении (workbook_beforesave) записать признак в одну из потаенных ячеек и потом проверить это признак при открытии, если он есть , то не продолжать. Ну или инверсировать это. Или утсановить это признак при выполнении workbook_open? Это даже лучше, для отладки и подготовки шаблона.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 08.01.2018, 16:40
bmv98rus, для особо одаренных: перед выполнением макроса вставляю строку, которая проверяет есть ли в А1 листа 1 какое-либо значение и, если есть, то end sub. А для workbook_beforesave прописываю А1="5" (например). Я все правильно понял?
bmv98rus, для особо одаренных: перед выполнением макроса вставляю строку, которая проверяет есть ли в А1 листа 1 какое-либо значение и, если есть, то end sub. А для workbook_beforesave прописываю А1="5" (например). Я все правильно понял?light26
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select Range("A1").FormulaR1C1 = "5" Sheets("Выбор").Visible = False Application.ScreenUpdating = True End Sub
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select If ActiveSheet.Range("A1").Value = "5" Then Exit Sub Else Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True End If End Sub
[/vba]
Где я допустил ошибку?[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select Range("A1").FormulaR1C1 = "5" Sheets("Выбор").Visible = False Application.ScreenUpdating = True End Sub
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select If ActiveSheet.Range("A1").Value = "5" Then Exit Sub Else Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False Application.ScreenUpdating = True End If End Sub
ошибки 1. проверять надо прежде выполнения всего что в Workbook_Open 2. А какой при этом ActiveSheet? Надежда на то что остался тот который при записи был? 3. не Workbook_BeforeClose а Workbook_BeforeSave 4. Как написал, лучше тригер писать после выполнения того что более выполнять не надо 5. синтаксиси [vba]
Код
If ActiveSheet.Range("A1").Value = "5" Then Exit Sub End If
[/vba] end if или не нужен или нужно Exit Sub переносить на другую строку или отделять от then разделителем | 6. я б написал так [vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select If Sheet100.Range("A1").Value <> 5 Then Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False Sheet100.Range("A1").Value = 5 End If Application.ScreenUpdating = True End Sub
[/vba] заменив Sheet100 на что либо присутствующее или скрытый новый лист.
ошибки 1. проверять надо прежде выполнения всего что в Workbook_Open 2. А какой при этом ActiveSheet? Надежда на то что остался тот который при записи был? 3. не Workbook_BeforeClose а Workbook_BeforeSave 4. Как написал, лучше тригер писать после выполнения того что более выполнять не надо 5. синтаксиси [vba]
Код
If ActiveSheet.Range("A1").Value = "5" Then Exit Sub End If
[/vba] end if или не нужен или нужно Exit Sub переносить на другую строку или отделять от then разделителем | 6. я б написал так [vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select If Sheet100.Range("A1").Value <> 5 Then Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False Sheet100.Range("A1").Value = 5 End If Application.ScreenUpdating = True End Sub
[/vba] заменив Sheet100 на что либо присутствующее или скрытый новый лист.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 08.01.2018, 18:02
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select If Sheets("Выбор").Range("A1").Value <> "5" Then Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False End If Application.ScreenUpdating = True End Sub
[/vba] не дал желаемого результата По-прежнему открывается лист "Выбор" только с цифрой 5 в А1
[vba]
Код
Private Sub Workbook_Open() Application.ScreenUpdating = False Sheets("Выбор").Visible = True Sheets("Выбор").Select If Sheets("Выбор").Range("A1").Value <> "5" Then Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False End If Application.ScreenUpdating = True End Sub
[/vba] не дал желаемого результата По-прежнему открывается лист "Выбор" только с цифрой 5 в А1light26
Private Sub Workbook_Open() Application.ScreenUpdating = False
If Sheets("Выбор").Range("A1").Value <> "5" Then Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False End If Application.ScreenUpdating = True End Sub
[/vba]
Нашел где собака порылась ))) Оказывается иногда мозги включать нужно ))))
Private Sub Workbook_Open() Application.ScreenUpdating = False
If Sheets("Выбор").Range("A1").Value <> "5" Then Sheets("Зеленый").Visible = False Sheets("Белый").Visible = False Sheets("Приветствие").Visible = False End If Application.ScreenUpdating = True End Sub
после и до Exit SUB В те давние года, когда я учился, подобные выходы из циклов или подпрограмм считались плохим тоном, а некоторыми языками и не поддерживались, по сему полее правильная конструкция у меня в пятом сообщении. Даже читается проще, то делаем, а то нет, а не если да, то бежим от сюда :-)
после и до Exit SUB В те давние года, когда я учился, подобные выходы из циклов или подпрограмм считались плохим тоном, а некоторыми языками и не поддерживались, по сему полее правильная конструкция у меня в пятом сообщении. Даже читается проще, то делаем, а то нет, а не если да, то бежим от сюда :-)bmv98rus
Замечательный Временно просто медведь , процентов на 20.