Telefonszámunk: 1-472-0679

[Resolved] munkalapok biztonsága automatikus frissítés mellett

Kezdőlap Fórumok Excel témák [Resolved] munkalapok biztonsága automatikus frissítés mellett

Topic Resolution: Resolved
12 bejegyzés megtekintése - 1-12 / 12
  • Szerző
    Bejegyzés
  • #4409
    galantailasz
    Felhasználó

      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

      #4415
      Titok
      Felhasználó

        AutoOpen-ben egy ActiveWorkbook.RefreshAll nem segít?

        #4416
        galantailasz
        Felhasználó

          Szia, a munkafüzetben nincs makró, ezt nem értem így, hova kellene beírnom.

          #4433
          horvimi
          Adminisztrátor

            Szia!

            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

            #4437
            galantailasz
            Felhasználó

              Sziasztok!

              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 Sub

              Ké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

              #4438
              horvimi
              Adminisztrátor

                Szia!

                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 egy

                Application.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

                • A hozzászólás módosításra került: 6 years, 1 month telt el-horvimi.
                • A hozzászólás módosításra került: 6 years, 1 month telt el-horvimi.
                • A hozzászólás módosításra került: 6 years, 1 month telt el-horvimi.
                #4442
                galantailasz
                Felhasználó

                  Szia! 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.

                  #4443
                  horvimi
                  Adminisztrátor

                    Arra 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

                    #4445
                    galantailasz
                    Felhasználó

                      Remekül működik, köszönöm!

                      #4462
                      galantailasz
                      Felhasználó

                        +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?

                        #4465
                        delila
                        Felhasználó

                          Szia!

                          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.

                          #4505
                          galantailasz
                          Felhasználó

                            Remekü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.

                          12 bejegyzés megtekintése - 1-12 / 12
                          • Be kell jelentkezni a hozzászóláshoz.