logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Excel Spr. użytkownika, ograniczenie czasowe, włączenie makr

kapsel2105 10 Lut 2011 00:55 3863 2
REKLAMA
  • #1 9129614
    kapsel2105
    Poziom 21  
    Posty: 447
    Pomógł: 48
    Ocena: 46
    Witam.

    Mam pewien problem z arkuszem, dokładnie chciałem sobie zrobić coś takiego że jest sprawdzane kilka warunków by móc używać danego pliku excela.
    Z VB jestem niestety zielony, ale dzięki informacjom znalezionym coś tam sobie próbuje skleić.
    Mianowicie mam już coś takiego:


    ThisWorkbook:
    Kod:
    
    Option Explicit
    
    
    'własna obsługa zapisu przy zamykaniu skoroszytu oraz przy zapisie jest potrzebna
    'do wymuszania otwierania skoroszytu z uruchomionymi makrami
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Dim Odp           As Integer
      'własna obsługa zapisu przy zamykaniu skoroszytu
      If ThisWorkbook.Saved = False Then
        Odp = MsgBox("Czy zapisać zmiany w '" & ThisWorkbook.Name & "'?" & Space(14), _
                     vbYesNoCancel + vbExclamation + vbDefaultButton1)
        Select Case Odp
          Case vbYes
            Call InstallDeinstallSolver(SlvrInstal)
            Call ZapiszPlik
          Case vbNo
            Call InstallDeinstallSolver(SlvrInstal)
            ThisWorkbook.Saved = True
          Case vbCancel
            Cancel = True
        End Select
      End If
    End Sub
    
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      If SaveAsUI Then  'jl Zapisz jako..., to nie pozwalaj
        MsgBox "Zapis do innego pliku nie jest możliwy!", vbInformation
        Cancel = True
      Else  'jl Zapisz
        Call ZapiszPlik
        'ponieważ skoroszyt został zapisany w procedurze ZapiszPlik
        'to poniższe Cancel=True jest  potrzebne!!!
        'przy braku poniższego, dojdzie do ponownego zapisania skoroszytu
        'ale już z innymi ustawieniami arkuszy!!!
        Cancel = True
      End If
    End Sub
    
    Private Sub Workbook_Open()
    
    
      If UCase(Environ("USERNAME")) <> UCase("Administrator") Then
        Me.Saved = True
       
    MsgBox "Program nie jest przeznaczony dla tego użytkownika!" & String(2, vbCr) & "Teraz nastąpi zamknięcie programu.", vbInformation, "!!! UWAGA !!!"
        Me.Close
      End If
    
      'po upewnieniu się, że makra działają prawidłowo, usuń apastrof z poniższej linii
      'Application.EnableCancelKey = xlDisabled
    
      On Error GoTo Workbook_Open_Error
      'ukrycie pola tekstowego w arkuszu Tytuł
      ArkuszTytułowy.Shapes("Tekst o makrach").Visible = False
    
    
    
      'Wersja II
      'gdy przekroczona data - masz 20 sek na zmianę daty
     If Range("'data'!AA1") < Date Then
    
        MsgBox "       Termin  ważności  testu" & Chr(13) & _
               "            już  wygasł.", vbCritical, "TIME OUT"
    
        Application.OnTime Now + TimeValue("00:00:20"), "koniec_testu"
      Else
        If MsgBox("Niniejszy dokument przeznaczony jest tylko i wyłącznie" & _
                  " (...) " & vbCr & _
                  "Czy akceptujesz powyższe warunki?", vbYesNo) = vbNo Then
          ThisWorkbook.Close
        End If
      End If
    End Sub
    
    
    
    '  If Range("'data'!AA1") < Date Then
    '    MsgBox "Termin  ważności wyznaczony przez autora aplikacji już minął!" & vbCr & _
    '           "Skontaktuj się z twórcą programu w celu dalszego korzystania z aplikacji.", vbCritical, "Time out"
    '    Me.Saved = True
    '    ThisWorkbook.Close
    '  Else
    '    If MsgBox("Niniejszy dokument przeznaczony jest tylko i wyłącznie do użytku wewnętrznego." & String(2, vbCr) & _
    '              "Dane zawarte w dokumencie zostały uznane przez autorów za prawdziwe, jednak ani autorzy ani xxxxxxx" & _
    '              " nie ponoszą odpowiedzialności za kompletność i prawdziwość danych zawartych w publikacji," & _
    '              " jak również za wszelkie szkody powstałe w wyniku wykorzystania niniejszej publikacji" & _
    '              " lub zawartych w niej informacji." & String(2, vbCr) & "Czy akceptujesz powyższe warunki?", vbYesNo + vbInformation, _
    '              "Info") = vbNo Then
    '      Me.Saved = True
    '      ThisWorkbook.Close
    '    End If
    '  End If
     
     
       
     
    
      'sprawdź czy solver jest włączony
      Call SprawdzSolver
    
      If SlvrInstal = False Then
        Call InstallDeinstallSolver(True)
      End If
    
      Call OdkryjArkuszeWgUprawnien
      ActiveWindow.DisplayWorkbookTabs = True
    
    
    Workbook_Open_Exit:
      'po odkryciu odpowiednich arkuszy, udawaj że nic sie w pliku nie zmieniło
      Me.Saved = True
    
      On Error GoTo 0
      Exit Sub
    
    Workbook_Open_Error:
      MsgBox "Błąd nr " & Err.Number & vbCr & _
             "Treść błędu: " & _
             "(" & Err.Description & ")" & vbCr & _
             " w procedurze Workbook_Open w VBA Document ThisWorkbook"
      Me.Saved = True
      Me.Close
    End Sub
    
    Private Sub OdkryjArkuszeWgUprawnien()
      Dim Sh            As Object
    
      Application.ScreenUpdating = False
      'zastosowano nazwy kodowe!!!
    
    
      'odkryj wszystkie arkusze
      For Each Sh In ThisWorkbook.Sheets
        Sh.Visible = xlSheetVisible
      Next Sh
      'ukryj arkusz Tytuł
      ArkuszTytułowy.Visible = xlSheetVeryHidden
    
      ActiveWindow.DisplayWorkbookTabs = True
      Application.ScreenUpdating = True
    End Sub
    
    Private Sub SprawdzSolver()
      Dim doda          As AddIn
    
      For Each doda In AddIns
        If doda.Installed Then
          If UCase(doda.Name) = UCase("solver.xla") Then
            SlvrInstal = True
            Exit Sub
          End If
        End If
      Next doda
    End Sub
    
    Private Sub InstallDeinstallSolver(Optional Instal As Boolean)
      Dim doda          As AddIn
    
      On Error GoTo InstallDeinstallSolver_Error
    
      For Each doda In AddIns
        If UCase(doda.Name) = UCase("solver.xla") Then
          doda.Installed = Instal
          Exit Sub
        End If
      Next doda
    
    InstallDeinstallSolver_Exit:
    
      On Error GoTo 0
      Exit Sub
    
    InstallDeinstallSolver_Error:
      If Err = 1004 And Instal Then
        MsgBox "Na tym komputerze nie ma zainstalowanego dodatku Solver," & vbCr & _
               "który jest niezbędny do prawidłowego działania programu!" & vbCr & _
               "Proszę zainstalować go z płyty instalacyjnej MS Office." & String(2, vbCr) & _
               "Plik zostanie teraz zamknięty!", vbCritical, "Brak dodatku Solver!"
        Err.Clear
        Me.Saved = True
        Me.Close
      Else
        MsgBox "Błąd nr " & Err.Number & vbCr & _
               "Treść błędu: " & _
               "(" & Err.Description & ")" & vbCr & _
               " w procedurze InstallDeinstallSolver w VBA Document ThisWorkbook"
      End If
      Resume InstallDeinstallSolver_Exit
    
    End Sub
    


    oraz w module:
    Kod:
    
    Sub koniec_testu()
      If Range("'data'!AA1") < Date Then
    
        MsgBox "       Termin  ważności  testu" & Chr(13) & _
               "            już  wygasł.", vbCritical, "TIME OUT"
    
        With ThisWorkbook
          .Saved = True
          .Close
        End With
      End If
    End Sub
    
    


    Na czym najbardziej mi zależy:
    1. Wymuszenie włączenia makr - działa ok.
    2. Sprawdzenie zdefiniowanego użytkownika - działa dobrze.
    3. Ograniczenie aplikacji co do daty umieszczonej w zdefiniowanej komórce - gdy jest zamykana od razu po przekroczeniu daty jest ok, natomiast gdy próbowałem zmienić by było jeszcze te 20sec. wtedy jest coś nie tak.
    W debugowaniu podświetla na żółto coś takiego:
    Kod:
    
    On Error GoTo Workbook_Open_Error
    
    

    Z góry dziękuję za pomoc.

    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 9129684
    Aldrin
    Poziom 22  
    Posty: 317
    Pomógł: 68
    Ocena: 49
    Wydaje mi się, że jest namieszane po sekcji:
    'Wersja II
    'gdy przekroczona data - masz 20 sek na zmianę daty

    Jeżeli termin ważności testu nie wygasł i użytkownik zaakceptuje warunki, to...?

    A chwilę później jest "End Sub" - moim zdaniem wygląda na pozostawione niechcący "po testach" tej właśnie sekcji. Dlatego "Workbook_Open_Error:" jest zupełnie poza "Private Sub Workbook_Open()" i zgłaszany jest błąd "label not defined".

    Lepiej "do testów" części procedury użyć Exit Sub, a End Sub zostawić na końcu.
  • #3 9130593
    kapsel2105
    Poziom 21  
    Posty: 447
    Pomógł: 48
    Ocena: 46
    Dzięki Aldrin za pomoc, właśnie tutaj był błąd. Po Ujęciu w komentarz działa bez problemu.

    Jeszcze raz dziękuję.

    Pozdro.

    Temat zamykam.
REKLAMA