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

Cum se previne salvarea dacă o anumită celulă este goală în Excel?

De exemplu, ați proiectat un formular în foaia de lucru și le distribuiți colegilor dvs. Sperăm că colegii tăi își completează numele în celula specifică pentru a indica cine a introdus acest formular, altfel îi împiedică să salveze formularul, cum ai putea face? Aici voi introduce o macro VBA pentru a preveni salvarea unui registru de lucru dacă celula specifică este goală în Excel.

Fila Office Activați editarea și navigarea cu file în Office și faceți munca mult mai ușoară ...
Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%
  • Reutilizați orice: Adăugați cele mai utilizate sau complexe formule, diagrame și orice altceva la preferatele dvs. și reutilizați-le rapid în viitor.
  • Peste 20 de caracteristici text: Extrageți numărul din șirul de text; Extrageți sau eliminați o parte din texte; Conversia numerelor și valutelor în cuvinte în limba engleză.
  • Instrumente de îmbinare: Mai multe cărți de lucru și foi într-unul; Combinați mai multe celule / rânduri / coloane fără a pierde date; Combinați rândurile duplicate și suma.
  • Instrumente divizate: Împărțiți datele în mai multe foi bazate pe valoare; Un registru de lucru pentru mai multe fișiere Excel, PDF sau CSV; O coloană la mai multe coloane.
  • Lipiți săriți Rânduri ascunse / filtrate; Număr și sumă de Culoarea fundalului; Trimiteți e-mailuri personalizate către mai mulți destinatari în bloc.
  • Super Filtru: Creați scheme avansate de filtrare și aplicați oricăror foi; Sortează pe săptămână, zi, frecvență și multe altele; Filtru prin îndrăznețe, formule, comentarii ...
  • Peste 300 de caracteristici puternice; Funcționează cu Office 2007-2021 și 365; Suporta toate limbile; Implementare ușoară în întreprinderea sau organizația dvs.

săgeată albastru dreapta balonPreveniți salvarea dacă o anumită celulă este goală în Excel

Pentru a împiedica salvarea registrului de lucru curent dacă celula specifică este goală în Excel, puteți aplica cu ușurință următoarea macro VBA.

Pasul 1: Deschideți fereastra Microsoft Visual Basic pentru aplicații apăsând pe Alt + F11 tastele între timp.

Pasul 2: În Project Explorer, extindeți fișierul VBAProject (Numele dvs. de registru de lucru.xlsm) și Obiectele Microsoft Excel, apoi faceți dublu clic pe Acest manual de lucru. Vedeți ecranul din stânga:

Pasul 3: În fereastra de deschidere ThisWorkbook, lipiți următoarea macro VBA:

Macro VBA: împiedicați salvarea dacă o celulă specifică este goală

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Update by ExtendOffice 20220907
Dim xFileName As String
Dim xStr As String
Dim xStrWSH As String
Dim xWSh As Worksheet
Dim xWShs As Sheets
Dim xWSh1 As Worksheet
Dim xWB As Workbook

xStrWSH = "xHidWSH_LJY"
On Error Resume Next
Set xWB = Application.ActiveWorkbook
Set xWShs = xWB.Worksheets
Set xWSh = xWShs.Item(xStrWSH)

If xWSh Is Nothing Then

  Set xWSh1 = xWShs.Add
  xWSh1.Name = xStrWSH
  xWSh1.Visible = xlSheetVeryHidden
  Cancel = False

Else

  If Trim(Application.Sheets("Sheet1").Range("A1").Value) = "" Then
  Cancel = True
  MsgBox "Save cancelled"
  End If

End If

End Sub
Notă:
1. În al 26-lea rând al codului VBA de mai sus, „Foaie 1” este numele specific al foii de lucru și „A1"este celula specifică și le puteți schimba după cum aveți nevoie.
2. După ce introduceți VBA în Acest manual de lucru, ar trebui să salvați mai întâi registrul de lucru. Și apoi puteți trimite fișierul cu macro-activat altora.

Acum, dacă celula specifică este goală în registrul de lucru curent, atunci când o salvați, apare o casetă de dialog de avertizare și vă spune „Salvare anulată". Vedeți următoarea captură de ecran:


săgeată albastru dreapta balonArticole pe aceeaşi temă


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (26)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
salut - a fost de mare ajutor... Am avut doar o întrebare, cum salvez fișierul fără o valoare în acel câmp? Pe măsură ce încerc să salvez, codul VBA va afișa mesajul „Salvare anulat”, care este răspunsul dorit, cu toate acestea, trebuie să salvez o dată fără o valoare pentru a crea formularul care să fie reutilizat.

Multumesc!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Eduardo,
Ce zici de tastarea unui spațiu în celula specificată pentru a pretinde că este o celulă goală? Vă rugăm să reamintiți să eliminați spațiul pe viitor!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Eduardo, ai reușit să obții un răspuns la întrebarea ta? Am întâlnit aceeași problemă și tastarea într-un spațiu permite doar salvarea formularului. Stie cineva vreo solutie pentru asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut,

Vă rugăm să încercați codul VBA de mai jos:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Update by ExtendOffice 20220907
Dim xFileName As String
Dim xStr As String
Dim xStrWSH As String
Dim xWSh As Worksheet
Dim xWShs As Sheets
Dim xWSh1 As Worksheet
Dim xWB As Workbook

xStrWSH = "xHidWSH_LJY"
On Error Resume Next
Set xWB = Application.ActiveWorkbook
Set xWShs = xWB.Worksheets
Set xWSh = xWShs.Item(xStrWSH)

If xWSh Is Nothing Then

  Set xWSh1 = xWShs.Add
  xWSh1.Name = xStrWSH
  xWSh1.Visible = xlSheetVeryHidden
  Cancel = False

Else

  If Trim(Application.Sheets("Sheet1").Range("A1").Value) = "" Then

    xFileName = ActiveWorkbook.Name
    xStr = Left(xFileName, InStrRev(xFileName, ".") - 1)
    ActiveWorkbook.SaveCopyAs "C:\Users\Amanda\Desktop\" & Replace(xFileName, xStr, xStr & " - copy")
    Cancel = True
    MsgBox "Save cancelled"

  End If

End If

End Sub

Notă:
1. Vă rugăm să schimbați fragmentul Sheet1 și A1 în al 26-lea rând la numele real al foii și celula.
2. Vă rugăm să schimbați fragmentul C:\Utilizatori\Amanda\Desktop\ în al 30-lea rând cu calea reală în care doriți să salvați copia fișierului.
3. După ce introduceți VBA în Acest manual de lucru, ar trebui să salvați mai întâi registrul de lucru. După aceea, când îl salvați din nou, registrul de lucru va fi copiat, astfel încât să îl puteți trimite altora.

Amanda
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Amanda, nu a mers :(. Mi-a dat o eroare, poate că fac ceva greșit. Vreau doar să salvez o copie a formularului (cu câmpuri goale) pentru ca utilizatorul să poată deschide și completa. Unde macrocomanda îi solicită și îi împiedică să salveze fișierul dacă este gol. Ați putea vă rog să aruncați o privire?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut,

Vă rugăm să vedeți comentariul de mai sus, am actualizat VBA. Codul ar trebui să funcționeze perfect pentru cazul dvs.

Amanda
Acest comentariu a fost redus la minimum de moderatorul de pe site
Funcționează, dar acum fișierul care este copiat nu funcționează ca formular. Se solicită doar salvarea anulată. Am nevoie de un formular în cea mai mare parte gol care să împiedice utilizatorii să salveze până când anumite câmpuri sunt completate. Șablonul meu actual are toate câmpurile completate, dar am nevoie de un fișier utilizator gol. Scuze, poate nu am explicat corect.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, vreau să întreb dacă este de la A2 la U2. ce ar trebui sa scriu?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Wkai,
Încercați acest cod VBA:
(Acest cod VBA va detecta intervalul A2:E5 în foaia „Test” și va anula salvarea dacă există celule goale în interval.)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xWSName ca șir
Dim xRgAddress ca șir
Dim xRg As Range
Dim xWs ca fișă de lucru
Dim xFNRg As Range
xWSName = „TEST”
xRgAddress = „A2:E5”
Set xWs = Application.ActiveWorkbook.Worksheets.Item(xWSName)
Set xRg = xWs.Range(xRgAddress)
Setați xFNRg = Nimic
La data de eroare CV următoare
Setați xFNRg = xRg.SpecialCells(xlCellTypeBlanks, 23)
If Not TypeName(xFNRg.count) = „Nimic” Atunci
Anulare = Adevărat
MsgBox „Salvare anulată”
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut, foarte util. DAR există o problemă când îl folosesc pentru fișiere de pe sharepoint. Modificările nu sunt salvate, dar este creată o nouă versiune care este afișată la redeschidere, ceea ce este destul de confuz. Este posibil să dezactivați aceste versiuni noi?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest lucru este cu adevărat grozav. Știți ce pot face pentru ca acest lucru să funcționeze pentru o serie de foi și un număr de celule? De asemenea, aceste celule nu pot fi întotdeauna aceleași, deoarece există foi generate în acest registru de lucru specific care este posibil să nu aibă aceeași celulă care trebuie completată de fiecare dată. Celulele vor fi întotdeauna în aceeași coloană, chiar deasupra marginii paginii care este, de asemenea, generată. Mulțumiri!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am o foaie de calcul foarte mare care conține multe informații.
Poate cineva să mă ajute cu un cod de copiat în VBA - vreau să fie că, dacă Cell C2-C1000+ are informații în ele, atunci celula O2-O1000+ și P2-P1000+ necesită introducerea utilizatorului - totuși, dacă o celulă din coloana C este goală, atunci celula din coloana O & P poate fi și ea goală. (de exemplu) dacă celula C3 nu are nicio intrare de date, atunci celula O3-P3 poate fi goală.

Multumesc :)
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Yzelle,
Vă rugăm să nu uitați să plasați codul de mai jos în fereastra de script „ThisWorkbook” și să redenumiți numele foii de lucru „Test” în codul de mai jos, în funcție de starea dumneavoastră.

Dim xIRg As Range
Dim xSRg As Range
Dim xBol As Boolean
Dim xInt ca întreg
Dim xStr As String
Dacă ActiveSheet.Name = „Test” Atunci
Setați xRg = Interval ("C:C")
Set xRRg = Intersect(xRg.Worksheet.UsedRange, xRg)
xBol = Fals
La data de eroare CV următoare
Pentru xInt = 1 To xRRg.Count
Set xIRg = xRRg.Item(xInt)
Dacă xIRg.Value2 <> "" Atunci
Set xSRg = Nimic
Dacă (Range("O" & xIRg.Row) = "") Sau (Range ("P" & xIRg.Row) = "") Atunci
xBol = Adevărat
Ieșiți pentru
Final, dacă
Final, dacă
Pagina Următoare →
Dacă xBol Atunci
Anulare = Adevărat
MsgBox „Salvare anulată”
Final, dacă
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Cu foi ("Sheet1")
Dacă WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 Atunci
Anulare = Adevărat
MsgBox „Vă rugăm să introduceți valori în coloanele B și C”, vbCritical, „Eroare!”
Final, dacă
Se termina cu

End Sub

Doar schimbați intervalul de la a la c și de la b la o și sper să vă ajute
Acest comentariu a fost redus la minimum de moderatorul de pe site
Aveți o modalitate prin care aceasta poate fi codificată, astfel încât fie B sau C să fie populate, dar nu este necesar să le populați pe ambele?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Cu foi ("Sheet1")
Dacă WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 Atunci
Anulare = Adevărat
MsgBox „Vă rugăm să introduceți valori în coloanele B și C”, vbCritical, „Eroare!”
Final, dacă
Se termina cu

End Sub


Doar schimbați intervalul de la a la c și de la b la o și p
sper că va ajuta
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, am folosit codul de mai sus și a funcționat perfect. întrebarea mea este cum ar trebui să arate codul dacă vreau să testez pe 2 celule? Sunt destul de disperat. multumesc avans pentru ajutor
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, am un cod VBA care sortează și filtrează datele dintr-un tabel Excel și salvează 48 de rapoarte diferite pe desktop. dar pe baza acestor filtre, unele rapoarte generate au doar 1 rând (anteturi) și nicio dată. Cum pot adăuga un cod VBA la fișierul meu care împiedică salvarea fișierelor care au doar un rând (antet) și fără date? Vă mulțumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Hi
Am un cod VBA care sortează și filtrează datele dintr-un tabel Excel și salvează 48 de rapoarte diferite pe desktop. dar pe baza acestor filtre, unele rapoarte generate au doar 1 rând (anteturi) și nicio dată. Cum pot adăuga un cod VBA la fișierul meu care împiedică salvarea fișierelor care au doar un rând (antet) și fără date?
mulțumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, am încercat formula de mai sus care funcționează. Pot să știu dacă există vreo formulă care poate forța utilizatorul să completeze înainte de a putea salva? Pe măsură ce setez meniul derulant „Vă rugăm să selectați”, „Da” sau „Nu” pentru ca ei să selecteze. Dar au uitat întotdeauna să selecteze acel câmp și rămân „Vă rugăm să selectați”. Dacă adaug acest cod VBA, aplicați numai celula este goală. Apreciez mult că puteți sfătui. Mulțumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am încercat formula de mai sus care funcționează. Pot să știu dacă există vreo formulă care poate forța utilizatorul să completeze înainte de a putea salva? Pe măsură ce setez meniul derulant „Vă rugăm să selectați”, „Da” sau „Nu” pentru ca ei să selecteze. Dar au uitat întotdeauna să selecteze acel câmp și rămân „Vă rugăm să selectați”. Dacă adaug acest cod VBA, aplicați numai celula este goală. Apreciez mult că puteți sfătui. Mulțumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Happy,
Doar înlocuiți valoarea goală „Sheets("TEST").Range("A1").Value = ""” la textul specificat ”Sheets(„TEST”).Range(„A1”).Value = „Vă rugăm să selectați”„Și întregul cod va fi schimbat după cum urmează:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dacă Application.Sheets(„TEST”).Range(„A1”).Value = „Vă rugăm să selectați” Atunci
Anulare = Adevărat
MsgBox „Salvare anulată”
Final, dacă
End Sub

Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest lucru nu funcționează, indică salvare anulată, dar tot termină prin a salva registrul de lucru
Acest comentariu a fost redus la minimum de moderatorul de pe site
Notă: În codul VBA, „TEST” este numele specific al foii de lucru, iar „A1” este celula specifică și le puteți modifica după cum aveți nevoie.

De exemplu, foaia dvs. este numită „Sheet1”, iar celula specificată este B2, trebuie să schimbați numele foii și adresa celulei în codul VBA înainte de a o rula
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua,
io avrei nevoie di impostare una macro simile a quella di Eduardo. In particular, ho due table:
'- prima tabelă A18:P28
'- a doua tabelă A33:P41.
Vorrei impedire che l'utente salvi il file se ha compilato la cella A18 și le alte attigue (B18:P18) le ha lasciate vuote sau se ha compilato la cella A33 și ha lasciato vuole le attigue (B33:P33). În acest caz, dovrei impostare la macro? Vă mulțumim anticipat pentru a răspunde!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut,

Vrei să spui că vrei să împiedici salvarea fișierului dacă A18 este completat în timp ce B18: P18 sunt goale? De asemenea, doriți să împiedicați salvarea dacă A33 este completat în timp ce B33: P33 sunt necompletate?
Doriți să împiedicați salvarea atunci când ambele criterii sunt îndeplinite sau când unul dintre criterii este îndeplinit?
De asemenea, vă rugăm să folosiți limba engleză. Mulțumesc anticipat.

Amanda
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL