Note: The other languages of the website are Google-translated. Back to English

Як запобігти збереженню, якщо певна комірка порожня в Excel?

Наприклад, ви створили форму на робочому аркуші та поділилися зі своїми колегами. Ви сподіваєтесь, що ваші колеги заповнюють свої імена у певній комірці, щоб вказати, хто ввів цю форму, інакше заважають їм зберігати форму, як ви могли це зробити? Тут я представив макрос VBA, щоб запобігти збереженню книги, якщо певна комірка порожня в Excel.

Вкладка Office Увімкніть редагування та перегляд вкладок в Office та значно спростіть свою роботу ...
Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%
  • Повторне використання будь-чого: Додайте найбільш уживані або складні формули, діаграми та будь-що інше до вибраного та швидко використовуйте їх у майбутньому.
  • Більше 20 функцій тексту: Витяг номера з текстового рядка; Витяг або видалення частини текстів; Перетворення чисел і валют в англійські слова.
  • Злиття інструментів: Кілька робочих книжок та аркушів в одне ціле; Об’єднати кілька клітинок / рядків / стовпців без втрати даних; Об’єднати повторювані рядки та суму.
  • Розділити інструменти: Розділити дані на кілька аркушів на основі значення; Одна робоча книга до декількох файлів Excel, PDF або CSV; Один стовпець на кілька стовпців.
  • Пропустити вставку Приховані / відфільтровані рядки; Граф і сума за кольором тла; Надіслати персоналізовані електронні листи кільком одержувачам масово.
  • Суперфільтр: Створюйте розширені схеми фільтрів і застосовуйте їх до будь-яких аркушів; сортувати за тижнями, днями, періодичністю тощо; фільтр жирним шрифтом, формули, коментар ...
  • Понад 300 потужних функцій; Працює з Office 2007-2019 та 365; Підтримує всі мови; Простота розгортання на вашому підприємстві чи в організації.


стрілка синя права міхурЗапобігання збереженню, якщо певна комірка порожня в Excel

Щоб запобігти збереженню поточної книги, якщо певна комірка порожня в Excel, ви можете легко застосувати наступний макрос VBA.

Крок 1: Відкрийте вікно Microsoft Visual Basic for Applications натисканням кнопки інший + F11 тим часом ключі.

Крок 2: У Провіднику проектів розгорніть VBAProject (назва вашої робочої книги.xlsm) і Microsoft Excel Objects, а потім двічі клацніть на ThisWorkbook. Дивіться знімок екрана ліворуч:

Крок 3: У вікні ThisWorkbook, що відкривається, вставте такий макрос VBA:

VBA Macro: Запобігання збереженню, якщо певна комірка порожня

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Application.Sheets("TEST").Range("A1").Value = "" Then
Cancel = True
MsgBox "Save cancelled"
End If
End Sub
Примітка: У коді VBA "TEST" - це конкретна назва робочого аркуша, а "A1"- це конкретна комірка, і ви можете змінювати їх, як вам потрібно.

Тепер, якщо конкретна комірка порожня в поточній книзі, при її збереженні виходить діалогове вікно попередження та повідомляє "Збереження скасовано". Див. Наступний знімок екрана:


стрілка синя права міхурСтатті по темі


Найкращі інструменти для підвищення продуктивності офісу

Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%

  • Повторне використання: Швидко вставте складні формули, діаграми і все, що ви використовували раніше; Шифрувати комірки з паролем; Створити список розсилки та надсилати електронні листи ...
  • Супер формула бар (легко редагувати кілька рядків тексту та формули); Макет читання (легко читати та редагувати велику кількість комірок); Вставте у відфільтрований діапазон...
  • Об’єднати клітинки / рядки / стовпці без втрати даних; Вміст розділених комірок; Об'єднати повторювані рядки / стовпці... Запобігання дублюючим клітинам; Порівняйте діапазони...
  • Виберіть Повторюваний або Унікальний Рядки; Виберіть Пусті рядки (усі клітинки порожні); Супер знахідка та нечітка знахідка у багатьох робочих зошитах; Випадковий вибір ...
  • Точна копія Кілька клітинок без зміни посилання на формулу; Автоматичне створення посилань на кілька аркушів; Вставте кулі, Прапорці та інше ...
  • Витяг тексту, Додати текст, Видалити за позицією, Видаліть пробіл; Створення та друк проміжних підсумків підкачки; Перетворення вмісту комірок та коментарів...
  • Супер фільтр (зберегти та застосувати схеми фільтрів до інших аркушів); Розширене сортування за місяцем / тижнем / днем, частотою та іншим; Спеціальний фільтр жирним, курсивом ...
  • Поєднайте робочі зошити та робочі аркуші; Об’єднати таблиці на основі ключових стовпців; Розділіть дані на кілька аркушів; Пакетне перетворення xls, xlsx та PDF...
  • Понад 300 потужних функцій. Підтримує Office / Excel 2007-2019 та 365. Підтримує всі мови. Простота розгортання на вашому підприємстві чи в організації. Повна функція 30-денної безкоштовної пробної версії. 60-денна гарантія повернення грошей.
вкладка kte 201905

Вкладка Office забезпечує інтерфейс з вкладками для Office і значно спрощує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (19)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
привіт - це було дуже корисно... Просто було одне запитання, як зберегти файл без значення в цьому полі? Коли я намагаюся зберегти, код VBA викличе повідомлення "Зберегти скасовано", яке є передбачуваною відповіддю, однак його потрібно зберегти один раз без значення, щоб створити форму для повторного використання.

Спасибо!
Едуардо
Цей коментар був мінімізований модератором на сайті
Привіт Едуардо!
Як щодо введення пробілу у вказану клітинку, щоб утворити порожню клітинку? Будь ласка, нагадуйте про видалення місця в майбутньому!
Тан Келлі
Цей коментар був мінімізований модератором на сайті
Привіт, я хочу запитати, чи це від A2 до U2. що я маю написати?
Wkai
Цей коментар був мінімізований модератором на сайті
Привіт, Wkai!
Спробуйте цей код VBA:
(Цей код VBA виявить діапазон A2:E5 на аркуші «Тест» і скасує збереження, якщо в діапазоні є порожні клітинки.)

Приватна підпорядкована робоча книга_BeforeSave(ByVal SaveAsUI як Boolean, Скасувати як Boolean)
Dim xWSName як рядок
Dim xRgAddress як рядок
Dim xRg As Range
Dim xWs як робочий аркуш
Dim xFNRg як діапазон
xWSName = "ТЕСТ"
xRgAddress = "A2:E5"
Установіть xWs = Application.ActiveWorkbook.Worksheets.Item(xWSNName)
Встановити xRg = xWs.Range(xRgAddress)
Встановіть xFNRg = Нічого
On Error Resume Next
Встановіть xFNRg = xRg.SpecialCells(xlCellTypeBlanks, 23)
Якщо Not TypeName(xFNRg.count) = "Нічого", Тоді
Скасувати = Правда
MsgBox "Збереження скасовано"
End If
End Sub
kellytte
Цей коментар був мінімізований модератором на сайті
Привіт, дуже корисно. АЛЕ є проблема, коли я використовую його для файлів на SharePoint. Зміни не зберігаються, але створюється нова версія, яка відображається під час повторного відкриття, що досить заплутано. Чи можна вимкнути ці нові версії?
MH
Цей коментар був мінімізований модератором на сайті
Це дійсно чудово. Чи знаєте ви, що я можу зробити, щоб це працювало для діапазону аркушів і кількох клітинок? Крім того, ці клітинки не завжди можуть бути однаковими, оскільки в цій конкретній книзі створюються аркуші, які можуть не містити ту саму клітинку, яку потрібно заповнювати щоразу. Комірки завжди будуть в одному стовпці, трохи вище межі сторінки, яка також створюється. Спасибі!
Ендрю Гонсалес
Цей коментар був мінімізований модератором на сайті
У мене є дуже велика електронна таблиця, яка містить багато інформації.
Чи може хтось допомогти мені, будь ласка, з кодом для копіювання у VBA - я хочу, щоб якщо клітинка C2-C1000+ містить будь-яку інформацію, то клітинка O2-O1000+ і P2-P1000+ вимагає введення користувача, але якщо клітинка в стовпці C є порожній, тоді клітинка в стовпці O & P також може бути порожньою. (наприклад) якщо клітинка C3 не має введених даних, клітинка O3-P3 може бути порожньою.

Дякую :)
Yzelle
Цей коментар був мінімізований модератором на сайті
Привіт Ізель,
Будь ласка, не забудьте розмістити код нижче у вікні сценарію «ThisWorkbook» і перейменувати назву робочого аркуша «Test» у коді нижче відповідно до вашого стану.

Dim xIRg As Range
Dim xSRg As Range
Dim xBol як логічне значення
Dim xInt як ціле число
Dim xStr як рядок
Якщо ActiveSheet.Name = "Тест", Тоді
Встановити xRg = діапазон ("C:C")
Встановити xRRg = Intersect(xRg.Worksheet.UsedRange, xRg)
xBol = Неправда
On Error Resume Next
Для xInt = 1 До xRRg.Count
Встановити xIRg = xRRg.Item(xInt)
Якщо xIRg.Value2 <> "" Тоді
Встановіть xSRg = Нічого
Якщо (Range("O" & xIRg.Row) = "") або (Range("P" & xIRg.Row) = "") Тоді
xBol = правда
Вихід для
End If
End If
Далі
Якщо xBol Тоді
Скасувати = Правда
MsgBox "Збереження скасовано"
End If
End If
End Sub
kellytte
Цей коментар був мінімізований модератором на сайті
Приватна підпорядкована робоча книга_BeforeSave(ByVal SaveAsUI як Boolean, Скасувати як Boolean)

З аркушами ("Аркуш1")
Якщо WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 Тоді
Скасувати = Правда
MsgBox "Введіть значення в стовпці B і C", vbCritical, "Помилка!"
End If
Кінець з

End Sub

Просто змініть діапазон від a до c і від b до o і сподіваюся, це допоможе
Фатос Гаджа
Цей коментар був мінімізований модератором на сайті
Чи є у вас спосіб, щоб це можна було закодувати так, щоб потрібно було заповнювати B або C, але не потрібно заповнювати обидва?
Риис
Цей коментар був мінімізований модератором на сайті
Приватна підпорядкована робоча книга_BeforeSave(ByVal SaveAsUI як Boolean, Скасувати як Boolean)

З аркушами ("Аркуш1")
Якщо WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 Тоді
Скасувати = Правда
MsgBox "Введіть значення в стовпці B і C", vbCritical, "Помилка!"
End If
Кінець з

End Sub


Просто змініть діапазон від a до c, і від b до o і p
сподіваюся, що це допоможе
Фатос Гаджа
Цей коментар був мінімізований модератором на сайті
доброго дня, я використав код вище, і він працював ідеально. моє запитання: як повинен виглядати код, якщо я хочу перевірити 2 клітинки? Я дуже зневірений. заздалегідь дякую за вашу допомогу
Веніамін
Цей коментар був мінімізований модератором на сайті
Привіт, у мене є код VBA, який сортує та фільтрує дані з однієї таблиці Excel і зберігає 48 різних звітів на моєму робочому столі. але на основі цих фільтрів деякі згенеровані звіти мають лише 1 рядок (заголовки) і не мають даних. Як я можу додати код VBA до свого файлу, який не дозволяє зберігати файли, які мають лише один рядок (заголовок) і не мають даних? Дякую
Амін
Цей коментар був мінімізований модератором на сайті
Hi
У мене є код VBA, який сортує та фільтрує дані з однієї таблиці Excel і зберігає 48 різних звітів на моєму робочому столі. але на основі цих фільтрів деякі згенеровані звіти мають лише 1 рядок (заголовки) і не мають даних. Як я можу додати код VBA до свого файлу, який не дозволяє зберігати файли, які мають лише один рядок (заголовок) і не мають даних?
Дякую
Амін
Цей коментар був мінімізований модератором на сайті
Привіт, я спробував вищевказану формулу, яка працює. Чи можу я знати, чи існує якась формула, яка може змусити користувача заповнити, перш ніж він зможе зберегти? Як я встановив спадне меню «Виберіть, будь ласка», «Так» або «Ні», щоб вони могли вибрати. Але вони завжди забували вибрати це поле і залишалися «Виберіть». Якщо я додам цей код VBA, лише клітинка застосувати буде порожньою. Дуже вдячний за те, що ви можете порадити. Дякую
Щасливий
Цей коментар був мінімізований модератором на сайті
Я спробував вище формулу, яка працює. Чи можу я знати, чи існує якась формула, яка може змусити користувача заповнити, перш ніж він зможе зберегти? Як я встановив спадне меню «Виберіть, будь ласка», «Так» або «Ні», щоб вони могли вибрати. Але вони завжди забували вибрати це поле і залишалися «Виберіть». Якщо я додам цей код VBA, лише клітинка застосувати буде порожньою. Дуже вдячний за те, що ви можете порадити. Дякую
Щасливий
Цей коментар був мінімізований модератором на сайті
Привіт Щасливий,
Просто замініть порожнє значення «Sheets("TEST").Діапазон("A1").Значення = ""” до вказаного тексту “Sheets("TEST").Діапазон("A1").Value = "Виберіть"«І весь код буде змінено, як показано нижче:
Приватна підпорядкована робоча книга_BeforeSave(ByVal SaveAsUI як Boolean, Скасувати як Boolean)
Якщо Application.Sheets("TEST").Range("A1").Value = "Виберіть", Тоді
Скасувати = Правда
MsgBox "Збереження скасовано"
End If
End Sub

kellytte
Цей коментар був мінімізований модератором на сайті
Це не працює, вказується, що збереження скасовано, але все одно в кінцевому підсумку зберігається книга
Адітья
Цей коментар був мінімізований модератором на сайті
Примітка: у коді VBA «TEST» — це ім’я конкретного робочого аркуша, а «A1» — це конкретна клітинка, і ви можете змінити їх, як вам потрібно.

Наприклад, ваш аркуш має назву "Sheet1", а вказана клітинка - B2, вам потрібно змінити ім'я аркуша та адресу комірки в коді VBA перед його запуском.
kellytte
There are no comments posted here yet
Залишайте свої коментарі
Публікація як гість
×
Оцініть цю публікацію:
0  Персонажі
Рекомендовані місця