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

Kako preprečiti shranjevanje, če je določena celica v Excelu prazna?

Na primer, oblikovali ste obrazec na delovnem listu in ga delili s svojimi kolegi. Upate, da bodo vaši kolegi v posamezno celico vpisali svoja imena, da bodo označili, kdo je vstopil v ta obrazec, sicer jim preprečujejo, da bi shranili obrazec. Tukaj bom predstavil makro VBA, da preprečim shranjevanje delovnega zvezka, če je določena celica prazna v Excelu.

Kartica Office Omogočite urejanje in brskanje z zavihki v storitvi Office ter olajšajte svoje delo ...
Kutools za Excel rešuje večino vaših težav in poveča produktivnost za 80%
  • Ponovno uporabi vse: Med priljubljene dodajte najbolj uporabljene ali zapletene formule, grafikone in kar koli drugega ter jih v prihodnosti hitro ponovno uporabite.
  • Več kot 20 besedilnih funkcij: Izvleček številke iz besedilnega niza; Izvleči ali odstrani del besedil; Pretvorite številke in valute v angleške besede.
  • Združi orodja: Več delovnih zvezkov in listov v eno; Združi več celic / vrstic / stolpcev brez izgube podatkov; Združi podvojene vrstice in vsoto.
  • Razdeljena orodja: Razdeli podatke na več listov na podlagi vrednosti; En delovni zvezek v več datotek Excel, PDF ali CSV; En stolpec na več stolpcev.
  • Prilepi preskoči Skrite / filtrirane vrstice; Štetje in vsota glede na Barva ozadja; V večjem obsegu pošiljajte osebna e-poštna sporočila več prejemnikom.
  • Super filter: Ustvarite napredne filtrirne sheme in uporabite za vse liste; Razvrščanje po tednih, dnevih, pogostosti in še več; filter s krepkim tiskom, formule, komentar ...
  • Več kot 300 zmogljivih funkcij; Deluje s sistemoma Office 2007-2019 in 365; Podpira vse jezike; Preprosta namestitev v vašem podjetju ali organizaciji.


puščica modri desni mehurčekPreprečite shranjevanje, če je določena celica v Excelu prazna

Če želite preprečiti shranjevanje trenutnega delovnega zvezka, če je določena celica prazna v Excelu, lahko preprosto uporabite naslednji makro VBA.

1. korak: Odprite okno Microsoft Visual Basic for Applications s pritiskom na druga + F11 ključi v vmesnem času.

2. korak: V Raziskovalec projektov razširite VBAProject (ime vašega delovnega zvezka.xlsm) in Microsoft Excelovi predmetiin nato dvokliknite Ta delovni zvezek. Oglejte si posnetek zaslona levo:

3. korak: V začetno okno ThisWorkbook prilepite naslednji makro VBA:

VBA Macro: preprečite shranjevanje, če je določena celica prazna

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
Opomba:
1. V 26. vrstici zgornje kode VBA je "list1" je specifično ime delovnega lista in "A1"je določena celica in jih lahko spremenite po potrebi.
2. Ko vnesete VBA v Ta delovni zvezek, najprej shranite delovni zvezek. Nato lahko datoteko z omogočenimi makri pošljete drugim.

Če je določena celica v trenutnem delovnem zvezku prazna, se pri shranjevanju odpre opozorilno pogovorno okno z napisom "Shranjevanje preklicano". Oglejte si naslednji posnetek zaslona:


puščica modri desni mehurčekPovezani članki


Najboljša orodja za pisarniško produktivnost

Kutools za Excel rešuje večino vaših težav in poveča produktivnost za 80%

  • Ponovna uporaba: Hitro vstavite zapletene formule, grafikoni in vse, kar ste že uporabljali; Šifriraj celice z geslom; Ustvari poštni seznam in pošiljanje e-pošte ...
  • Vrstica Super Formula (enostavno urejanje več vrstic besedila in formule); Bralna postavitev (enostavno branje in urejanje velikega števila celic); Prilepite v filtrirani obseg...
  • Združi celice / vrstice / stolpce brez izgube podatkov; Vsebina razdeljenih celic; Združi podvojene vrstice / stolpce... prepreči podvojene celice; Primerjaj obsege...
  • Izberite Duplicate ali Unique Vrstice; Izberite prazne vrstice (vse celice so prazne); Super Find in Fuzzy Find v mnogih delovnih zvezkih; Naključna izbira ...
  • Natančna kopija Več celic brez spreminjanja sklica formule; Samodejno ustvarjanje referenc na več listov; Vstavi oznake, Potrditvena polja in še več ...
  • Izvleček besedila, Dodaj besedilo, Odstrani po položaju, Odstrani presledek; Ustvari in natisni vmesne seštevke strani Pretvarjanje med vsebino celic in komentarji...
  • Super filter (shranite in uporabite sheme filtrov za druge liste); Napredno razvrščanje glede na mesec / teden / dan, pogostost in drugo; Poseben filter s krepko, ležeče ...
  • Združite delovne zvezke in delovne liste; Spoji tabele na podlagi ključnih stolpcev; Razdelite podatke na več listov; Paketna pretvorba xls, xlsx in PDF...
  • Več kot 300 zmogljivih funkcij. Podpira Office / Excel 2007-2019 in 365. Podpira vse jezike. Preprosta namestitev v vašem podjetju ali organizaciji. Vse funkcije 30-dnevnega brezplačnega preskusa. 60-dnevno jamstvo za vračilo denarja.
zavihek kte 201905

Kartica Office prinaša vmesnik z zavihki v Office in poenostavi vaše delo

  • Omogočite urejanje in branje z zavihki v Wordu, Excelu, PowerPointu, Publisher, Access, Visio in Project.
  • Odprite in ustvarite več dokumentov v novih zavihkih istega okna in ne v novih oknih.
  • Poveča vašo produktivnost za 50% in vsak dan zmanjša na stotine klikov z miško!
dno pisarniške mize
Komentarji (26)
Ocene še ni. Bodite prvi in ​​ocenite!
Ta komentar je moderator na spletnem mestu minimiziral
zdravo - to je bilo zelo koristno... Imel sem samo eno vprašanje, kako shranim datoteko brez vrednosti v tem polju? Ko poskušam shraniti, bo koda VBA prikazala sporočilo »Shrani preklicano«, ki je predvideni odgovor, vendar ga je treba shraniti enkrat brez vrednosti, da ustvarite obrazec za ponovno uporabo.

Hvala!
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Eduardo,
Kaj pa, če v določeno celico vnesete presledek, da se pretvarjate kot prazno celico? Prosimo, spomnite, da odstranite prostor v prihodnje!
Ta komentar je moderator na spletnem mestu minimiziral
Pozdravljeni Eduardo, ste lahko dobili odgovor na svoje vprašanje? Naletel sem na isto težavo in vnašanje v presledek omogoča samo shranjevanje obrazca. Ali kdo pozna rešitev za to?
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,

Poskusite spodnjo kodo VBA:
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

Opomba:
1. Prosimo, spremenite delček Sheet1 in A1 v 26. vrstici na dejansko ime lista in celico.
2. Prosimo, spremenite delček C:\Uporabniki\Amanda\Desktop\ v 30. vrstici z dejansko potjo, kamor želite shraniti kopijo datoteke.
3. Ko vnesete VBA v Ta delovni zvezek, najprej shranite delovni zvezek. Po tem, ko ga znova shranite, bo delovni zvezek kopiran, tako da ga lahko pošljete drugim.

Amanda
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Amanda, ni delovalo :(. Prišlo mi je do napake, morda delam kaj narobe. Želim samo shraniti kopijo obrazca (s praznimi polji), da jo lahko uporabnik odpre in izpolni. Kje makro jih pozove in jim prepreči shranjevanje datoteke, če je prazna. Ali lahko prosim pogledate?
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,

Oglejte si zgornji komentar, posodobil sem VBA. Koda bi morala delovati popolnoma za vaš primer.

Amanda
Ta komentar je moderator na spletnem mestu minimiziral
Deluje, vendar zdaj datoteka, ki je kopirana, ne deluje kot obrazec. Samo pozove, da je shranjevanje preklicano. Potrebujem večinoma prazen obrazec, ki uporabnikom preprečuje shranjevanje, dokler niso izpolnjena določena polja. Moja trenutna predloga ima vsa polja izpolnjena, vendar potrebujem prazno uporabniško datoteko. Žal morda nisem pravilno razložil.
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, rad bi vprašal, ali je od A2 do U2. kaj naj napišem?
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Wkai,
Poskusite to kodo VBA:
(Ta koda VBA bo zaznala obseg A2:E5 v listu »Test« in preklicala shranjevanje, če v obsegu obstajajo prazne celice.)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI kot Boolean, Cancel As Boolean)
Dim xWSName kot niz
Dim xRgAddress kot niz
Dim xRg As Range
Dim xWs kot delovni list
Dim xFNRg As Range
xWSName = "TEST"
xRgAddress = "A2:E5"
Nastavi xWs = Application.ActiveWorkbook.Worksheets.Item(xWSName)
Nastavi xRg = xWs.Range(xRgAddress)
Nastavite xFNRg = Nič
On Error Resume Next
Nastavi xFNRg = xRg.SpecialCells(xlCellTypeBlanks, 23)
Če Not TypeName(xFNRg.count) = "Nič" Potem
Prekliči = Res
MsgBox "Shranjevanje preklicano"
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, zelo koristno. Toda obstaja težava, ko ga uporabljam za datoteke na Sharepoint. Spremembe se ne shranijo, ampak se ustvari nova različica, ki se prikaže ob ponovnem odpiranju, kar je precej zmedeno. Ali je mogoče onemogočiti te nove različice?
Ta komentar je moderator na spletnem mestu minimiziral
To je res super. Ali veste, kaj lahko storim, da bo to delovalo za vrsto listov in več celic? Prav tako te celice ne morejo biti vedno enake, saj so v tem posebnem delovnem zvezku ustvarjeni listi, ki morda nimajo iste celice, ki jih je treba vsakič izpolniti. Celice bodo vedno v istem stolpcu, tik nad mejo strani, ki je prav tako ustvarjena. Hvala!
Ta komentar je moderator na spletnem mestu minimiziral
Imam zelo veliko preglednico, ki vsebuje veliko informacij.
Ali mi lahko kdo pomaga s kodo za kopiranje v VBA - želim, da če ima celica C2-C1000+ kakršne koli informacije, celica O2-O1000+ in P2-P1000+ zahteva uporabniški vnos - če pa je celica v stolpcu C prazno, potem je lahko tudi celica v stolpcu O & P prazna. (na primer) če celica C3 nima vnosa podatkov, je celica O3-P3 lahko prazna.

Hvala :)
Ta komentar je moderator na spletnem mestu minimiziral
Živjo Yzelle,
Ne pozabite vstaviti spodnjo kodo v okno skripta »Ta delovni zvezek« in preimenovati ime delovnega lista »Test« v spodnji kodi glede na vaše stanje.

Dim xIRg As Range
Dim xSRg kot obseg
Dim xBol kot Boolean
Dim xInt kot celo število
Dim xStr kot niz
Če ActiveSheet.Name = "Test" Nato
Nastavite xRg = Obseg ("C:C")
Nastavi xRRg = Intersect(xRg.Worksheet.UsedRange, xRg)
xBol = False
On Error Resume Next
Za xInt = 1 do xRRg.Count
Nastavi xIRg = xRRg.Item(xInt)
Če xIRg.Value2 <> "" Potem
Nastavite xSRg = Nič
Če (Range("O" & xIRg.Row) = "") Ali (Range("P" & xIRg.Row) = "") Potem
xBol = Res
Izhod za
Konec Če
Konec Če
Naslednji
Če xBol Potem
Prekliči = Res
MsgBox "Shranjevanje preklicano"
Konec Če
Konec Če
End Sub
Ta komentar je moderator na spletnem mestu minimiziral
Private Sub Workbook_BeforeSave(ByVal SaveAsUI kot Boolean, Cancel As Boolean)

Z listi ("List1")
Če WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 Potem
Prekliči = Res
MsgBox "Vnesite vrednosti v stolpca B in C", vbCritical, "Napaka!"
Konec Če
Končaj s

End Sub

Samo spremenite razpon od a do c in od b do o in upam, da bo pomagalo
Ta komentar je moderator na spletnem mestu minimiziral
Ali imate način, da se to kodira tako, da je treba izpolniti bodisi B ali C, vendar ni potrebno zapolniti obojega?
Ta komentar je moderator na spletnem mestu minimiziral
Private Sub Workbook_BeforeSave(ByVal SaveAsUI kot Boolean, Cancel As Boolean)

Z listi ("List1")
Če WorksheetFunction.CountA(.Range("A1:A4")) <> WorksheetFunction.CountA(.Range("B1:C4")) / 2 Potem
Prekliči = Res
MsgBox "Vnesite vrednosti v stolpca B in C", vbCritical, "Napaka!"
Konec Če
Končaj s

End Sub


Samo spremenite razpon od a do c in od b do o in p
upam, da bo pomagalo
Ta komentar je moderator na spletnem mestu minimiziral
dober dan, uporabil sem zgornjo kodo in je delovala odlično. moje vprašanje je, kako naj izgleda koda, če želim testirati na 2 celicah? sem čisto obupana. hvala že vnaprej za vašo pomoč
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, imam kodo VBA, ki razvršča in filtrira podatke iz ene Excelove tabele in shrani 48 različnih poročil na mojem namizju. toda na podlagi teh filtrov imajo nekatera ustvarjena poročila samo 1 vrstico (glave) in brez podatkov. Kako lahko v svojo datoteko dodam kodo VBA, ki preprečuje shranjevanje datotek, ki imajo samo eno vrstico (glavo) in brez podatkov? Hvala
Ta komentar je moderator na spletnem mestu minimiziral
Hi
Imam kodo VBA, ki razvršča in filtrira podatke iz ene Excelove tabele in shrani 48 različnih poročil na mojem namizju. toda na podlagi teh filtrov imajo nekatera ustvarjena poročila samo 1 vrstico (glave) in brez podatkov. Kako lahko v svojo datoteko dodam kodo VBA, ki preprečuje shranjevanje datotek, ki imajo samo eno vrstico (glavo) in brez podatkov?
Hvala
Ta komentar je moderator na spletnem mestu minimiziral
Živjo, poskusil sem zgornjo formulo, ki deluje. Ali lahko vem, ali obstaja kakšna formula, ki lahko prisili uporabnika, da ga izpolni, preden lahko shrani? Ko sem nastavil spustni meni "Prosim, izberite", "Da" ali "Ne", da izberejo. Toda vedno so pozabili izbrati to polje in so ostali "Prosim, izberite". Če dodam to kodo VBA, je celica samo za uporabo prazna. Zelo cenim, da lahko svetujete. Hvala vam
Ta komentar je moderator na spletnem mestu minimiziral
Preizkusil sem zgornjo formulo, ki deluje. Ali lahko vem, ali obstaja kakšna formula, ki lahko prisili uporabnika, da ga izpolni, preden lahko shrani? Ko sem nastavil spustni meni "Prosim, izberite", "Da" ali "Ne", da izberejo. Toda vedno so pozabili izbrati to polje in so ostali "Prosim, izberite". Če dodam to kodo VBA, je celica samo za uporabo prazna. Zelo cenim, da lahko svetujete. Hvala vam
Ta komentar je moderator na spletnem mestu minimiziral
Živjo srečna,
Samo zamenjajte prazno vrednost "Listi("TEST").Obseg("A1").Vrednost = ""” na določeno besedilo “Sheets("TEST").Range("A1").Value = "Prosim, izberite""In celotna koda bo spremenjena, kot je prikazano spodaj:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI kot Boolean, Cancel As Boolean)
Če Application.Sheets("TEST").Range("A1").Value = "Prosim, izberite" Nato
Prekliči = Res
MsgBox "Shranjevanje preklicano"
Konec Če
End Sub

Ta komentar je moderator na spletnem mestu minimiziral
To ne deluje, piše, da je shranjevanje preklicano, vendar se delovni zvezek še vedno shrani
Ta komentar je moderator na spletnem mestu minimiziral
Opomba: V kodi VBA je "TEST" ime določenega delovnega lista, "A1" pa posebna celica in jih lahko po potrebi spremenite.

Na primer, vaš list je poimenovan kot "Sheet1", navedena celica pa je B2, morate spremeniti ime lista in naslov celice v kodi VBA, preden jo zaženete
Ta komentar je moderator na spletnem mestu minimiziral
Ciao,
io avrei bisogno di impostare una macro simile a quella di Eduardo. In particolare, ho due tabelle:
'- prva tabela A18:P28
'- druga tabela A33:P41.
Vorrei impedire che l'utente salvi il file se ha compilato la cella A18 e le altre attigue (B18:P18) le ha lasciate vuote oppure se ha compilato la cella A33 e ha lasciato vuole le attigue (B33:P33). In questo caso, come dovrei impostare la macro? Grazie in anticipo a chi risponderà!
Ta komentar je moderator na spletnem mestu minimiziral
Zdravo,

Ali želite reči, da želite preprečiti shranjevanje datoteke, če je A18 izpolnjen, medtem ko so B18: P18 prazni? Ali želite tudi preprečiti shranjevanje, če je A33 izpolnjen, medtem ko so B33: P33 prazni?
Ali želite preprečiti shranjevanje, ko sta izpolnjena oba kriterija ali ko je izpolnjen kateri koli od kriterijev?
Uporabite tudi angleščino. Hvala vnaprej.

Amanda
Tu še ni objavljenih komentarjev
Pustite vaše komentarje
Objava kot gost
×
Ocenite to objavo:
0   Znaki
Predlagane lokacije