Макрос после сохранения excel

Добрый день! Макрос — автозапуск не работает.

Книга Ексель имеет 10 листов
На десятом листе прописан макрос, который должен при изменении на том же листе автоматом записывать новую информацию в блокнот (с первой по 28 строчку):

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Sub V_Bloknot()
 Dim i&, j&, TextLine As String
     Open "D:export.txt" For Output Lock Write As #1
    For i = 1 To 28
        TextLine = ""
        For j = 1 To 4
            TextLine = TextLine & Cells(i, j).Value & " "
        Next j
        Print #1, TextLine
    Next i
    Close #1
End Sub

 Пытался сделать автозапуск макроса после сохранения, к сожалению тоже не работает, выдает ошибку Expected End Sub:

Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Sub V_Bloknot()
  Dim i&, j&, TextLine As String
     Open "D:export.txt" For Output Lock Write As #1
    For i = 1 To 28
        TextLine = ""
        For j = 1 To 4
            TextLine = TextLine & Cells(i, j).Value & " "
        Next j
        Print #1, TextLine
    Next i
    Close #1
 End Sub
End Sub

также пробовал:
1. В книге пишу:

Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 V_Bloknot
 End Sub

А в листе 10:

Код
Sub V_Bloknot()  Dim i&, j&, TextLine As String
     Open "D:export.txt" For Output Lock Write As #1
    For i = 1 To 28
        TextLine = ""
        For j = 1 To 4
            TextLine = TextLine & Cells(i, j).Value & " "
        Next j
        Print #1, TextLine
    Next i
    Close #1
 End Sub

Кто знает, помогите с вопросом. Предпочтительнее запускать макрос именно после сохранения.

Сохранение файла рабочей книги Excel, существующего или нового, с помощью кода VBA. Методы Save и SaveAs объекта Workbook, параметр SaveChanges метода Close.

Сохранение существующего файла

Сохранить существующий открытый файл рабочей книги Excel из кода VBA можно несколькими способами. В примерах используется выражение ActiveWorkbook, которое может быть заменено на ThisWorkbook, Workbooks(«ИмяКниги.xlsx»), Workbooks(myFile.Name), где myFile — объектная переменная с присвоенной ссылкой на рабочую книгу Excel.

Простое сохранение файла после внесенных кодом VBA Excel изменений:

Сохранение файла под другим именем (исходная рабочая книга будет автоматически закрыта без сохранения внесенных изменений):

ActiveWorkbook.SaveAs Filename:=«C:ТестоваяНоваяКнига.xlsx»

Сохранить файл рабочей книги можно перед закрытием, используя параметр SaveChanges метода Close со значением True:

ActiveWorkbook.Close SaveChanges:=True

Чтобы закрыть файл без сохранения, используйте параметр SaveChanges метода Close со значением False:

ActiveWorkbook.Close SaveChanges:=False

Сохранение файла под другим именем при закрытии рабочей книги:

ActiveWorkbook.Close SaveChanges:=True, Filename:=«C:ТестоваяНоваяКнига.xlsx»

Если в примерах с методом Close параметр SaveChanges пропустить, будет открыто диалоговое окно с запросом о сохранении файла.

Новая книга сохраняется с указанием полного имени:

Workbooks.Add

ActiveWorkbook.SaveAs Filename:=«C:ТестоваяНоваяКнига.xlsx»

После этого к новой книге можно обращаться по имени: Workbooks ("НоваяКнига.xlsx").

Если не указать полное имя для сохраняемого файла:

Workbooks.Add

ActiveWorkbook.Save

тогда новая книга будет сохранена с именем и в папке по умолчанию, например: Книга1.xlsx, Книга2.xlsx, Книга3.xlsx и т.д. в папке «Документы».


I can’t get my macro running in AfterSave or BeforeClose event.

I export one sheet to a .csv file, that’s already working well with the next code when I link this macro to a button:

Sub CopyToCSV()

Worksheets("LastLots").UsedRange.Rows("1:5").Calculate
ThisWorkbook.Save
Dim MyPath As String
Dim MyFileName As String
  'The path and file names:
MyPath = "D:DataPW2018"
MyFileName = "LastLots-exported"
  'Makes sure the path name ends with "":
If Not Right(MyPath, 1) = "" Then MyPath = MyPath & ""
  'Makes sure the filename ends with ".csv"
If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"
  'Copies the sheet to a new workbook:
Sheets("LastLots").Copy
  'The new workbook becomes Activeworkbook:
With ActiveWorkbook
Application.DisplayAlerts = False
'Saves the new workbook to given folder / filename:
    .SaveAs Filename:= _
        MyPath & MyFileName, _
        FileFormat:=xlCSV, _
        CreateBackup:=False
  'Closes the file
    .Close False
Application.DisplayAlerts = True
End With
End Sub

The code above is in a module. As I said, when linked to a button and press that button, it works very well.
But I want it running when the user saved the file.
Fot this, I put the next code in ThisWorkbook:

Private Sub Workbook_AfterSave(ByVal Success As Boolean) 
If Success = True Then
Call CopyToCSV
End If 
End Sub

I tried various things, like putting the code of the macro inside the AfterSave-event, and disable/enable Application.EnableEvents before and after calling CopyToCSV but nothing works for me…

Does anyone have a suggestion? I’m out of mind, and every topic I find on Google say to put the code in ThisWorkbook, but already done that.

Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.

Содержание

  1. Исходные данные
  2. Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
  3. Добавление кнопки в Excel для запуска макроса
  4. Сохранение файла Excel с названием из ячейки — без привязки к ячейке
  5. Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Исходные данные

Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.

Примечание! Я использую Excel 2013.

Скриншот 2

В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.

Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.

Заметка! Этапы разработки программы – как создаются и проектируются программы?

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

Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.

Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Получаем значение ячейки
   CellValue = Range("B14")

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   'Сообщение с результатом выполнения процедуры
   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

  End Sub

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).

Скриншот 3

Заметка! Статический анализ кода в теории и на практике.

Добавление кнопки в Excel для запуска макроса

Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».

Скриншот 4

Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».

Скриншот 5

Курс по SQL для начинающих

В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.

Скриншот 6

Заметка! ТОП 7 популярных языков программирования.

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).

Замените код процедуры следующим кодом, который совсем немного, но изменен.

  
   Sub SaveFile()

  'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка значения ячейки
   If ActiveCell.Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Получаем значение активной ячейки
   CellValue = ActiveCell.Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).

Скриншот 7

Как видим, все отработало.

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

Код процедуры в данном случае будет выглядеть следующим образом.

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка значения ячеек B14 и D14
   If Range("B14").Value = "" Or Range("D14").Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Складываем значения из двух ячеек B14 и D14
   CellValue = Range("B14").Value & " - " & Range("D14").Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Запускаем макрос.

Скриншот 8

Все ОК, файл создан.

Заметка! Как измерить сложность кода программы при программировании?

Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.

Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.

Код процедуры

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка номера столбца
   If ActiveCell.Column <> 2 Then
     MsgBox "Указан некорректный столбец", vbCritical, "Ошибка!"
     Exit Sub
   End If

  'Проверка значения ячейки
   If ActiveCell.Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Получаем значение активной ячейки
   CellValue = ActiveCell.Value

   'Смещаемся на 2 столбца, относительно активной ячейки
   ActiveCell.Offset(0, 2).Select

   'Складываем значения из двух ячеек
   CellValue = CellValue & " - " & ActiveCell.Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.

Заметка! Опрос. Какой операционной системой Вы пользуетесь?

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Как заставить макрос не выполняться после сохранения книги?

light26

Дата: Понедельник, 08.01.2018, 16:08 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Доброго времени суток
Как «заставить» макрос выполняться один раз. В моем случае, после выбора листа и последующего сохранения книги, открываться она должна уже в сохраненном варианте, а не повторно следовать макросу[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]

К сообщению приложен файл:

9210390.xls
(71.5 Kb)


Я не волшебник. Я только учусь

 

Ответить

bmv98rus

Дата: Понедельник, 08.01.2018, 16:37 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

При сохранении (workbook_beforesave) записать признак в одну из потаенных ячеек и потом проверить это признак при открытии, если он есть , то не продолжать.
Ну или инверсировать это.
Или утсановить это признак при выполнении workbook_open? Это даже лучше, для отладки и подготовки шаблона.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusПонедельник, 08.01.2018, 16:40

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 17:00 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

bmv98rus, для особо одаренных: перед выполнением макроса вставляю строку, которая проверяет есть ли в А1 листа 1 какое-либо значение и, если есть, то end sub. А для workbook_beforesave прописываю А1=»5″ (например). Я все правильно понял?


Я не волшебник. Я только учусь

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 17:20 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Где я допустил ошибку?[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

[/vba]


Я не волшебник. Я только учусь

Сообщение отредактировал light26Понедельник, 08.01.2018, 17:45

 

Ответить

bmv98rus

Дата: Понедельник, 08.01.2018, 17:49 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

ошибки
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 на что либо присутствующее или скрытый новый лист.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusПонедельник, 08.01.2018, 18:02

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 17:57 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

В «Shiit100» число является порядковым номером листа, так ведь?


Я не волшебник. Я только учусь

 

Ответить

bmv98rus

Дата: Понедельник, 08.01.2018, 18:04 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

нет это имя объекта. Вам проще привычным Sheets(«ИМЯ») использовать. и я там строчку вставил , забыл ей в прошлый раз.


Замечательный Временно просто медведь , процентов на 20.

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 18:07 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

проверять надо прежде выполнения всего что в Workbook_Open

так я так и делаю

А какой при этом ActiveSheet? Надежда на то что остался тот который при записи был?

Ну я понял так, что после [vba]

Код

Sheets(«Выбор»).Visible = True
Sheets(«Выбор»).Select

[/vba] можно применить ActiveSheet

3. не Workbook_BeforeClose а Workbook_BeforeSave

Я подумал, что раз уж нужно прописать 5 после закрытия файла, то пусть будет Workbook_BeforeClose

If ActiveSheet.Range(«A1»).Value = «5» Then Exit Sub
End If

Так тоже ругается


Я не волшебник. Я только учусь

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 18:12 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

[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 в А1


Я не волшебник. Я только учусь

 

Ответить

bmv98rus

Дата: Понедельник, 08.01.2018, 18:17 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016


это ка краз как неправильно
или[vba]

Код

If ActiveSheet.Range(«A1»).Value = «5» Then Exit Sub

[/vba]или[vba]

Код

If ActiveSheet.Range(«A1»).Value = «5» Then
   Exit Sub
End If

[/vba]или[vba]

Код

If ActiveSheet.Range(«A1»).Value = «5» Then | Exit Sub
End If

[/vba]или совсем безуиное[vba]

Код

If ActiveSheet.Range(«A1»).Value = «5» Then | Exit Sub | End If

[/vba]
но выйдя так из подпрограммы вы оставите
[vba]

Код

Application.ScreenUpdating = False

[/vba], что печально.


Замечательный Временно просто медведь , процентов на 20.

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 18:19 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Нашел где собака порылась ))) Оказывается иногда мозги включать нужно ))))

Sheets(«Выбор»).Visible = True
Sheets(«Выбор»).Select

это тут совсем не надо и тогда
[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

[/vba]


Я не волшебник. Я только учусь

Сообщение отредактировал light26Понедельник, 08.01.2018, 18:19

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 18:22 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Ну да, печально. Но ее же можно до Then прописать?


Я не волшебник. Я только учусь

 

Ответить

light26

Дата: Понедельник, 08.01.2018, 18:23 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Спасибо, Михаил. Очень признателен за помощь


Я не волшебник. Я только учусь

 

Ответить

bmv98rus

Дата: Понедельник, 08.01.2018, 18:31 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016


после и до Exit SUB
В те давние года, когда я учился, подобные выходы из циклов или подпрограмм считались плохим тоном, а некоторыми языками и не поддерживались, по сему полее правильная конструкция у меня в пятом сообщении. Даже читается проще, то делаем, а то нет, а не если да, то бежим от сюда :-)


Замечательный Временно просто медведь , процентов на 20.

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос полезный для excel
  • Макрос перевода чисел в текст в excel
  • Макрос открыта книга или нет excel
  • Макрос показать все скрытые листы в excel
  • Макрос перевода текста в число в excel