Telefonszámunk: 1-472-0679

[Resolved] Workbook bezárás 2 féleképpen

Kezdőlap Fórumok Excel programozás [Resolved] Workbook bezárás 2 féleképpen

Topic Resolution: Resolved
4 bejegyzés megtekintése - 1-4 / 4
  • Szerző
    Bejegyzés
  • #10514
    Gojo-Mann
    Felhasználó

      Sziasztok,

      Szeretném kérni a segítségetek az alábbi témában.
      Van egy excel file, ami userformot jelenít meg és azt szeretném, hogy ha megnyitom és bezárom autómatukusan mentse az excelt,
      Viszont ha csak olvasásra nyitom meg, mert valaki benne van akkor bezáráskor ne akarjon menteni és ne dobja ki az üzenetet, hogy mented? ha igen új néven stb, hanem simán ne mentsen semmit, ha csak olvasásra nyitom.

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      If ThisWorkbook.ReadOnly = True Then
      ThisWorkbook.Saved = False
      ElseIf ThisWorkbook.ReadOnly = False Then
      ThisWorkbook.Saved = True
      End If
      End Sub
      Ez nem működik valamiért. Ha nem olvasásra nyitom, akkor szuper mert kilpéskor kérdés nélkül menti az adatokat és pont.
      De, ha olvasásra nyitom, akkor záráskor mégis rákérdez, hogy szeretném e menteni.

      Segítségeteket előre is köszönöm!

      #10515
      verax
      Felhasználó

        Szia Gojo-Mann!

        Elemezzük, hogy mit is kódoltál:

        Private Sub Workbook_BeforeClose(Cancel As Boolean)
        If ThisWorkbook.ReadOnly = True Then

        ha ez a munkafüzet csupán olvasási joggal van megnyitva…
        ThisWorkbook.Saved = False
        … akkor ez a munkafüzet NEM mentett státusszal bír.
        ElseIf ThisWorkbook.ReadOnly = False Then
        Egyébként ha ez a munkafüzet NEM csupán olvasási joggal van megnyitva…
        ThisWorkbook.Saved = True
        … akkor ez a munkafüzet mentett státusszal bír.

        End If
        End Sub

        A fenti kódban …
        – összekeveredett a .Save (mentsd el!) utasítás és a .Saved (el van mentve) tulajdonság,
        – rosszul használtad a TRUE és FALSE logikai értékeket,
        – az ElseIf helyett elegendő egy Else is.

        A fentieket helyesbítése után ezt a kódot kapjuk:

        Private Sub Workbook_BeforeClose(Cancel As Boolean)
            If ThisWorkbook.ReadOnly Then
                ThisWorkbook.Saved = True
            Else
                ThisWorkbook.Save
            End If
        End Sub

        Ezt is elemzem.
        Ha ennek a munkafüzetnek a „csak olvasásra” tulajdonsága IGAZ, akkor tekintsünk rá úgy, mintha már mentett állapotú lenne. Egyébként – a lehetséges másik esetben – (tehát ha nem igaz az, hogy a „csak olvasásra” tulajdonság IGAZ lenne, azaz írási joggal van megnyitva) végezze el a munkafüzet mentését!

        Egy kis magyarázatot még hozzáfűzök az elágazás (If … Then … Else … End If) vezérlő feltétel vizsgálatához.
        A ThisWorkbook .ReadOnly tulajdonsága logikai értéket ad vissza. Csak IGAZ (TRUE) vagy HAMIS (FALSE) értéke lehet. Ennél fogva a ThisWorkbook.ReadOnly kifejezés kiértékelésének eredményét (TRUE / FALSE) felesleges összehasonlítani egy logikai értékkel (TRUE =? TRUE: TRUE vagy FALSE =? TRUE: FALSE)

        üdvözlettel
        verax

        #10522
        Gojo-Mann
        Felhasználó

          Kedves Verax!

          Nagyon szépen köszönöm a segítséged, ismét 🙂
          Mint talán már egyértelművé válik számodra is, nem igazán tudok kódokat írni, inkább csak fórumokon kutakodva próbálkozok a progim megírásával, s amivel végképp nem tudok mit kezdeni, azt ide kiírom, ezért is külön köszönöm a kódokhoz tartozó magyarázatot is, így sokkal több tanulságot kaphatok, mintha csak egy működő kódot írtál volna le.

          #10524
          verax
          Felhasználó

            Nagyon szívesen!
            Igen. Én is úgy látom, hogy az „ÚT” elején jársz. Ezért is részleteztem a javaslatomat, hangsúlyoztam az eltéréseket.

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