Kezdőlap › Fórumok › Excel témák › [Resolved] munkalapok biztonsága automatikus frissítés mellett
- This topic has 11 hozzászólás, 4 résztvevő, and was last updated 6 years, 11 months telt el by galantailasz.
-
SzerzőBejegyzés
-
2018-02-21-17:06 #4409
Szia! A következő a problémám: megnyitáskori automatikus frissítésre szeretném a munkafüzetemet beállítani, de az automatikus frissítést letiltja a munkalapok lapvédelme. Be tudom állítani, hogy megnyitáskor automatikusan frissüljenek az adatok a kódolt munkalapokon is? Köszönettel, Laci
2018-02-22-10:21 #4415AutoOpen-ben egy ActiveWorkbook.RefreshAll nem segít?
2018-02-22-17:29 #4416Szia, a munkafüzetben nincs makró, ezt nem értem így, hova kellene beírnom.
2018-02-25-17:23 #4433Szia!
Ez csak makróval oldható meg.
Ha nem nagyon elriasztó, vagy tilos.A munkafüzet megnyitás eseményéhez rendelhető makró. Titok is ezt próbálta javasolni.
A makró felodja a lapvédelmet, frissíti a kapcsolatot (nem tudom mi az, PIVOT vagy egyéb), majd visszateszi a védelmet. Ha nincs egyéb kapcsolat, akkor a RefeshAll is megteszi.
Ehhez persze indításkor, amikor kérdezi, engedélyezni kell a makrókat.
A makrót neked kell létrehozni, majd mentés másként-el makróbarát munkafüzetként elmenteni.
Megpróbálom leírni a lépéseket:
1. Bármelyik munkalap jobb klikk -> Kód megjelenítése. Ezzel átvisz a makró szerkesztőbe, és az aktuális munkafüzet mint projekt lesz aktív a bal oldalon
2. Kettőt kattints a bal oldalon a ThisWorkbook ikonon
3. A jobb oldali ablak tetején látsz egy legördülőt Most az van belírva, hogy General, ezt váltsd át Workbook-ra
4. Megjelenik az üres WorkBook_Open eseménykezelő Sub. Ebbe kell beletenni azt, amit a megnyitáskor szeretnél.Másold a Sub és End Sub közé a következő kód belsejét, hogy végül így nézzen ki:
Private Sub Workbook_Open() Sheets("lapnév").Unprotect Password:="password" ActiveWorkbook.RefreshAll Sheets("sheetname").Protect Password:="password" End Sub
A lapnév és a password szövegeket cseréld le értelemszerűen.
Mentsd el a munkafüzetet makróbarátként.
Próbáld ki.
???Imre
2018-02-26-13:06 #4437Sziasztok!
Imrének és Titoknak is köszönöm a segítséget! Igen, így részletesen leírva értem! 🙂
A kódom most így néz ki, amivel több munkalapot akarok megnyitáskor automatikusan frissíteni majd lapvédelemmel ismét ellátni:
Private Sub Workbook_Open()
Sheets(„mlap1″).Unprotect Password:=””
Sheets(„mlap2″).Unprotect Password:=””
Sheets(„mlap3″).Unprotect Password:=””
Sheets(„mlap4″).Unprotect Password:=””
ActiveWorkbook.RefreshAll
Sheets(„mlap1″).Protect Password:=””
Sheets(„mlap2″).Protect Password:=””
Sheets(„mlap3″).Protect Password:=””
Sheets(„mlap4″).Protect Password:=””
End SubKérdéseim:
1. Az elv jó, hogy így munkalaponként végigmegyek, feloldom, mindent egy sorral frissítek (minden munkalapon egyszerre) és visszazárom?
2. Hogyan tudom elérni, hogy a scriptben ne szerepeljen az innen most törölt password, hanem „******” legyen a helyén?
3. A frissítés végigfut, de a végén így is hibaüzenetet ad, hogy zárolt munkalap nem frissíthető. Ez a hibaüzenet elkerülhető?Köszönettel, Laci
2018-02-26-13:20 #4438Szia!
A password dolog így nem kerülhető meg.
Az a biztonságos, ha egy inputbox-ban megkérdezed a jelszót, és nem kerül bele a kódba.Tehát:
Private Sub Workbook_Open() Dim v as string v=inpubox("Jelszó:") Sheets("mlap1").Unprotect Password:=v stb..., mindenhol a v-t beírva End Sub
A frissítés végén a hibaüzenet lehet, hogy azért lehet, mert a frissítés esetleg még nem fejeződött teljesen be.
próbáld ki, hogy a RefreshAll sor után írsz egyApplication.Wait(Now + TimeValue("0:00:5"))
Ez 5 másodpercet vár, mielőtt tovább futna. Addig mehet a frissítés a háttérben.
???Ha ez nem menne, akkor próbáld meg azt, hogy a kapcsolatoknál kézzel kikapcsolod a „Frissítés a háttérben” opciót.
Adatok->kapcsolatok->Tulajdonságok->Háttérfrissítés engedélyezése vagy ilyesmi.Ebben az esetben lehet, hogy a Wait sem kell.
???Imre
2018-02-26-14:14 #4442Szia! Köszönöm a gyors választ!
A hibaüzenetet más okozta, az adatkapcsolatoknál igazra volt állítva, h megnyitáskor automatikusan frissüljön, ezt átállítva hibaüzenet nélkül lefut a makróval a frissítés. (A várakozást nem igényli, kipróbáltam.)
Az inputbox nekem itt nem jó, mert olyan felhasználónál kell frissülnie, aki nem ismeri a lapvédelmet feloldó kódot, ezért gondoltam, h teljesen biztonságossá téve, a makróból se legyen kinyerhető. De ha jól értem, erre nincs megoldás, h ott ne jelenítse meg.
2018-02-26-14:22 #4443Arra nincs lehetőség, hogy a kódban ne legyen benne valahogy.
De a kódot le tudod védeni.ha átmész a VBA szerkesztőbe, akkor:
Tools->Options->VBA Project Properties->Protection->Lock Project for Viewing
Itt megadsz egy jelszót.Így ha valaki más megy át a szerkesztőbe, az egész projekt be lesz csukva, és ha ki akarja nyitni, kéri a jelszót.
Másik, vagy további opció, ha nem csak beírod a jelszót, hanem egy valamilyen karaktersorozatot valamilyen algoritmussal transzformálsz, ami nehezen lekövethető, és a végeredménye az eredeti jelszó lesz.
Ennek viszont alaposan utána kell járni.De szerintem a projekt védelme elég biztonságos egy átlag user előtt.
Imre
2018-02-26-16:06 #4445Remekül működik, köszönöm!
2018-02-28-14:07 #4462+1: a
Sheets(“mlap1″).Unprotect Password:=””
Sheets(“mlap2″).Unprotect Password:=””
Sheets(“mlap3″).Unprotect Password:=””
Sheets(“mlap4″).Unprotect Password:=””helyett hivatkozhatom egyszerre az összes munkalapot, ha az összeset akarom levédeni/unlockolni?
2018-02-28-15:20 #4465Szia!
Próbáld így:
Private Sub Workbook_Open() Dim lap As Integer For lap = 1 To Sheets.Count Sheets(lap).Unprotect Password:="" Next ActiveWorkbook.RefreshAll For lap = 1 To Sheets.Count Sheets(lap).Protect Password:="" Next End Sub
A füzet megnyitásakor az összes lap védelmét feloldja, elvégzi a frissítést, majd minden lapot újra levéd.
2018-03-06-10:49 #4505Remekül működik, köszi! Van viszont egy érdekes jelenség: amikor megnyitom, rendben frissül, de csak akkor jelenik meg a friss adat a charton, ha kézzel rámentettem.
Egyelőre beírtam a kód végére egy ActiveWorkbook.Save-t. -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.