Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel - Uruchom plik jako Administrator

26 Wrz 2011 18:13 3793 28
  • Poziom 23  
    Witam ponownie. Tym razem zwracam się z prośbą o pomoc w uruchomieniu kodu który nazwałem "Uruchom jako Administrator". W załączonym pliku zaprojektowałem tabelkę "UserForms" i dodałem do niej kod (szczerze przyznam że skopiowany z innego pliku) niestety nie potrafię uruchomić tego kodu. O co mi chodzi:
    Chcę aby po uruchomieniu pliku niezależnie od tego w jakim arkuszu plik zostanie uruchomiony zawsze wyskoczyła zaprojektowana tabelka z poziomu której plik mogę uruchomić jako Administrator lub zrezygnować i uruchomić jako bez uprawnień Administratora. Jeśli chodzi o opcje jakie ma mieć Administrator to są bardzo proste. Chcę aby w arkuszu "Podsumowanie" zrobić coś takiego że jeśli poprawnie wpiszę hasło 9docelowo w kodzie zapodałem hasło "test") to w arkuszu "Podsumowanie" zostaną odkryte kolumny 78-82 a jeśli plik zostanie uruchomiony bez dostępu Administratora to kolumny 78-82 mają zostać ukryte. Czy mogę poprosić o pomoc?
  • Computer ControlsComputer Controls
  • Pomocny post
    Moderator Programowanie
    Zwróć uwagę na kod w Thisworkbook. Jest tam wymuszone zapisanie po ukryciu kolumn przy wychodzeniu. Dlaczego? Jeśli otworzysz plik jako administrator, w trakcie pracy zapiszesz, a przy wyjściu nie, to kolumny zostałyby odkryte. To rozwiązanie ma oczywiście swoje minusy, ale coś za coś... Można by ukrywać kolumny przy otwarciu, ale to bardzo łatwo ominąć.
  • Poziom 23  
    Dzięki. Plik działa bardzo dobrze ale nie do końca jest tak jak chciałem. Mianowicie zamierzałem żeby opcja "Administratora" zawsze zakrywała i odkrywała tylko i wyłącznie podane w kodzie kolumny w arkuszu "Podsumowanie" ale jednak jak plik zamknę z innego arkusza a nie z "Podsumowanie" to zostaną zamknięte kolumny w arkuszu z poziomu którego zamykam plik, a tego to ja nie chcę. Jak zrobić żeby zakrywanie kolumn następowało tylko i wyłącznie w arkuszu "Podsumowanie" przy zamknięciu pliku z któregokolwiek arkusza? Zaglądając na kod wydawało by się że tak to właśnie miało by działać ale tak nie jest. W załączonym pliku dodałem jeszcze automatyczne włączanie ochrony arkuszy po zamknięciu a to dodatkowo wywala błąd przy otwarciu pliku na innym arkuszu jak "Podsumowanie" i próbie wpisania hasła. I jeszcze jedno jak zrobić żeby w momencie wpisywania hasła, to co wpisuję nie było widoczne ale żeby były widoczne tylko gwiazdki?
  • Computer ControlsComputer Controls
  • Poziom 23  
    ...i jeszcze znalazłem jeden błąd który muszę zlikwidować, mianowicie jak uruchomię plik i wyskoczy okienko logowania to po wpisaniu nieprawidłowego hasła i kliknięciu na "Logowanie" czy Enter kolumny nie zostaną odkryte ale zostanie wyłączona ochrona z arkusza. Kliknięcie na anuluj jest OK. Dlaczego ta ochrona sama się wyłącza?
  • Computer ControlsComputer Controls
  • Poziom 22  
    Dziesiątki pytań, kolejne wątki i zero własnej pracy.
    Cytat:
    Dlaczego ta ochrona sama się wyłącza?

    Tutaj nic nie dzieje się samo. Skoro ochrona była i jej nie ma, to znaczy że została zdjęta. Mając tego świadomość trzeba spojrzeć na kod "Logowanie" i analizować kolejne linie. Tutaj już na samym początku jest rozwiązanie tego "problemu".
    Forum jest od tego, żeby pomagać, a nie wyręczać...

    Cytat:
    Plik działa bardzo dobrze ale nie do końca jest tak jak chciałem.

    Takich kwiatków jest dużo więcej.
    Analizować, myśleć i pracować nad swoim własnym pomysłem.
    Kto niby ma to robić? Ech...

    Cytat:
    ...i jeszcze znalazłem jeden błąd który muszę zlikwidować

    O trudnościach meldować po wykonaniu zadania ;)

    A tak na poważnie: nie sposób pracować z VBA nie mając o tym pojęcia. Jednym z najlepszych sposobów jest analiza innych kodów i ich modyfikacja. Od razu połowa z tych pytań zniknęłaby z forum, a i świadomość tego co się tam "w środku" dzieje byłaby większa.
  • Poziom 23  
    Dziękuję kolego @Aldrin, bardzo mi pomogłeś.
    Niestety ale jak bym potrafił pisać kody VBA to pewnie nie zadawałbym tyle pytań. To co potrafię zrobić sam to tylko namiastka tego co potrzebuję i dlatego proszę o pomoc na forum. Zgadzam się z Tobą że koledzy w dużej mierze wyręczają mnie z całej roboty ale ja nie proszę o pomoc żeby komuś zrobić nazłość ale tylko dlatego że nie potrafię tego zrobić sam. I chylę czoła przed wszystkimi którzy mi pomogli i w dobrym znaczeniu tego słowa zazdroszczę takiej wiedzy i przepraszam jeśli kogoś uraziłem.
  • Pomocny post
    Poziom 22  
    JaroFon napisał:
    nie potrafię tego zrobić sam

    Potrafisz - po prostu uwierz w siebie ;)
    Dostajesz gotowy kod na tacy raz, drugi, trzeci i kolejny. Jeśli do analizy jest kilkanaście linijek kodu (dokładnie piętnaście), to chyba można im się przyjrzeć? Trzeba się tylko nad tym pochylić... chociaż przez chwilę.
  • Poziom 23  
    Kolego @Aldrin wczoraj wylałeś na mnie kubeł zimnej wody i nie bardzo mi się to spodobało ale dziś rano usiadłem na spokojnie i tak kombinowałem aż wykombinowałem. Udało mi się rozwiązać problem. Więc teraz szczerze podziękuję za pomoc. Chociaż mam jeszcze pytania ale spróbuje sam to rozwiązać. Na razie nic mi z tego nie wychodzi. nie wiem jaki kod dodać żeby jeśli okienko w którym wpisuję hasło jest puste to przycisk "Logowanie" jest w tym momencie nieaktywny.

    Dodano po 17 [minuty]:

    Próbuje do samego kodu przycisku "Logowanie dać taki kod:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    ale to nie działa, jedynie cały czas przycisk "Logowanie" jest nieaktywny pomimo to że wpiszę dane do okienka "txtPassword"
  • Poziom 22  
    JaroFon napisał:
    i tak kombinowałem aż wykombinowałem. Udało mi się rozwiązać problem.

    Brawo. O to właśnie chodzi :)

    JaroFon napisał:
    jaki kod dodać żeby jeśli okienko w którym wpisuję hasło jest puste to przycisk "Logowanie" jest w tym momencie nieaktywny.

    1.
    Warto skorzystać z txtPassword_Change() - kliknij x2 na okienko tekstowe txtPassword i powinieneś trafić właśnie tam. Jeśli będziesz w "innym zdarzeniu", to wybierz z listy obok txtPassword właśnie to.

    Excel - Uruchom plik jako Administrator

    2.
    Przy zmianie w txtPassword wykonany zostanie kod tutaj umieszczony. Tutaj umieściłbym np. sprawdzanie długości/obecności hasła i tutaj można przycisk logowania włączyć-pokazać (np. gdy nie ma tekstu) lub uaktywnić (np. co najmniej 5 znaków).

    Excel - Uruchom plik jako Administrator
  • Poziom 23  
    Aldrin napisał:

    Przy zmianie w txtPassword wykonany zostanie kod tutaj umieszczony. Tutaj umieściłbym np. sprawdzanie długości/obecności hasła i tutaj można przycisk logowania włączyć-pokazać (np. gdy nie ma tekstu) lub uaktywnić (np. co najmniej 5 znaków).

    Excel - Uruchom plik jako Administrator

    Fajnie to wygląda ale zielonego pojęcia nie mam jak to zrobić. Czy będziesz tak uprzemy i podasz kod?
  • Poziom 22  
    JaroFon napisał:
    Czy będziesz tak uprzemy i podasz kod?

    Bałem się, że tak właśnie napiszesz...
    Wszystko masz na talerzu. Dodatkowo można skorzystać z:
    txtPassword.Text
    funkcja LEN
    cmdLogowanie.Visible
    cmdLogowanie.Enabled


    Zauważ, że działa Twój kod jeśli go wstawisz właśnie w to miejsce :)

    Pomyśl jak to co chcesz uzyskać ma działać krok po kroku, co powinno być na początku, a co później - sam kod to już tylko finał. Pobaw się tym - na pewno dasz radę. Ten przykład ze znikaniem przycisku miał pokazać dodatkową możliwość, żeby Cię zachęcić do własnych prób ;)
  • Poziom 23  
    Witam. Moje wysiłki na nic się zdają. Niestety jak już wcześniej napisałem nie potrafię pisać kodów VBA a w tym wypadku muszę napisać kod od początku a niestety nie wiem jak mam w ogóle zacząć. Coś innego jak w przykładzie powyższym gdzie dałem sobie rade, tam miałem już gotowy kod który tylko niepoprawnie działał i na podstawie gotowego kodu udało mi się co nieco wykombinować :(
  • Pomocny post
    Poziom 22  
    Aldrin napisał:
    ...lub uaktywnić (np. co najmniej 5 znaków).

    czyli:
    * jeżeli długość tekstu jest większa lub równa 5, to uaktywnij przycisk

    czyli:
    * If Len(txtPassword.Text) >= 5 Then cmdLogowanie.Enabled = True

    Jeśli TEGO nie jesteś w stanie samodzielnie napisać, to nie wiem czy jest sens bawić się w VBA, zwłaszcza że dopiero co miałeś przed oczami kod, który sam tu zamieściłeś:
    Code:
    If txtPassword.Value = Empty Then
    
       cmdLogowanie.Enabled = False
    Else
       cmdLogowanie.Enabled = True
    End If


    Tutaj warto zajrzeć: http://www.vb4all.pl/teoria/

    Co do arkusza z tego wątku: okno logowania nic nie da póki co, bo można to obejść nie znając hasła. Potrzebne byłyby dalsze działania, żeby ten arkusz zabezpieczyć jeśli miałoby to mieć sens. To oznacza dalszą pracę z tym arkuszem...
  • Poziom 23  
    Coś niecoś udało mi się zrobić. Jeśli chodzi o nieaktywny przycisk jeśli w okienku jest wprowadzone mniej jak 5 pozycji to dałem taki kod:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Ale coś zrobiłem chyba nie tak bo jak wyskoczy okienko logowania to przycisk jest aktywny a dezaktywuje się po wprowadzeniu pierwszej wartości a dopiero po wprowadzeniu piątej wartości przycisk aktywuje się z powrotem. Co zrobiłem nie tak?
    Jeszcze kombinuje nad zrobieniem tej niewidoczności jak okienko jest puste ale z tym to se już nie radzę. Poniższy kod powoduje że po wyskoczeniu okienka logowania przycisk jest widoczny a dopiero po wprowadzeniu pierwszej wartości przycisk robi się niewidoczny :cry:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Moderator Programowanie
    Wyłącz go przy inicjacji formy. A w ogóle to po co podpowiadać "hakierowi" ilość znaków w haśle?
  • Poziom 23  
    To znaczy ja nie chcę w kodzie zapodać ile znaków zawiera hasło ale zrobię to że przycisk będzie się aktywował po wprowadzeniu pierwszego znaku. A jak mam to wyłączyć "przy inicjacji formy"? Co to znaczy?
  • Pomocny post
    Poziom 22  
    adamas_nt napisał:
    po co podpowiadać "hakierowi" ilość znaków w haśle?

    Cały ten pomysł z ilością znaków był wyłącznie po to, żeby zaintrygować Autora i wciągnąć w zabawę z VBA. Niemniej jednak informacja "minimum 5" raczej zniechęca "hakera", niż mu w czymkolwiek pomaga, bo już wie że hasło nie jest aż tak krótkie. To, że przycisk uaktywnia sie przy 5 znakach nie mówi o długości hasła - może mieć np. 8 znaków. Nie po to Autor zakłada hasło, żeby ustalać 1-2-3-4 znakowe, więc podpowiedzi nie ma praktycznie żadnej.

    JaroFon napisał:
    jak mam to wyłączyć "przy inicjacji formy"? Co to znaczy?

    Nie wyłączałbym przy inicjacji - wyłącz teraz, już na formie w fazie projektowania, we właściwościach przycisku. Domyślnie jest widoczny i aktywny, ale wcale przecież nie musi tak być.
  • Poziom 23  
    Z tego wszystkiego to już mam siano w głowie :?
    We właściwościach przycisku mam co takiego:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Ale jak tu zrobić żeby przycisk domyślnie był niewidoczny?
  • Poziom 22  
    To nie są właściwości.
    Kliknij przycisk -> prawy przycisk myszy -> Properties
    Excel - Uruchom plik jako Administrator

    Można też i tak:
    Excel - Uruchom plik jako Administrator


    i zobaczysz właściwości:

    Excel - Uruchom plik jako Administrator
  • Poziom 23  
    Nie zajarzyłem od razu o tych właściwościach. Nie wiedziałem tylko że tam można aż tyle ustawić. Dziś w robocie posiedziałem trochę nad plikiem i udało mi się sporo zrobić. Dokładnie to udało mi się zrobić niewidzialny przycisk przy pustym okienku i aktywny przycisk przy wpisaniu 5 znaków. Nawet zabrnąłem trochę dalej i zrobiłem porównanie hasła i dwa dodatkowe okienka z informacją: "Prawidłowe hasło, zostałeś zalogowany jako Administrator" i drugie "Błędne hasło, wpisz poprawne hasło". Pochwaliłbym się kodami jakie zrobiłem ale plik zostawiłem w robocie na komputerze i zapomniałem go skopiować na Pendrivie. Ale udało mi się odtworzyć kod do pokazywania okienek informacyjnych:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Jednak mam pytanie związane z tym kodem. Mianowicie chciałem żeby po wyskoczeniu okienka: "Błędne haslo!!! Wpisz poprawne hasło"
    Excel - Uruchom plik jako Administrator
    i po kliknięciu na "TAK" żeby z powrotem przeniosło mnie do okienka logowania, nie wiem jak zrobić odnośnik
  • Poziom 22  
    Właśnie zmieniłes koncepcję, więc musisz zmienić też kod w Logowanie.
    Dotychczas było tak, że forma i tak znikała, i tak - bez względu na to, czy hasło było poprawne. Skoro teraz ma być inaczej, to najlepiej byłoby nie zamykać tej formy jeśli hasło nie będzie poprawne*. Wtedy nie trzeba jej będzie ponownie wywoływać.

    Nawiasem mówiąc wydaje się to być tylko dodatkowym utrudnieniem - skoro user nie zna prawidłowego hasła, to może uznać że nie jest administratorem i zamknąć sprawę? Potraktować to tak, jakby kliknął przycisk Anuluj.


    *
    jeśli hasło nie będzie poprawne, a wygodniej będzie w tej sekcji z IF gdzie hasło JEST poprawne zamknąć formę - tam wstawić Unload Me.
  • Poziom 23  
    Aldrin napisał:
    Nawiasem mówiąc wydaje się to być tylko dodatkowym utrudnieniem - skoro user nie zna prawidłowego hasła, to może uznać że nie jest administratorem i zamknąć sprawę? Potraktować to tak, jakby kliknął przycisk Anuluj.

    Nie tak do końca jest tak jak mówisz bo nawet będąc Administratorem mogę pomylić się przy wpisywaniu hasła a w tym przypadku poinformuje mnie w takiej sytuacji i dlatego chciałem żeby z powrotem skierowało mnie do okna logowania jeśli tego oczywiście chcę. W sumie to w tej sytuacji to można by zastosować tylko jeden przycisk OK bo po przejściu z powrotem do okna logowania i tak jest jest możliwość zrezygnowania tylko za chiny nie wiem jak po wyskoczeniu okienka o błędnym haśle następną czynnością jaką miała by się wykonać to włączenie okna logowania. mam zrobiony przycisk do wywołania okna logowania ale nie wiem jak go wywołać
  • Moderator Programowanie
    Aleś Ty uparty :D Wystarczy raz sprawdzić warunek i zamknąć formę jeśli prawdziwy i NIE zamykać jeśli fałszywy.

    Jest sobie kod pod przyciskiem formularza

    If butelka = "otwarta" then
      jest pięknie, można lać do szklanki (wykonuję procedurę), wszystko OK więc zamykam formularz
      Unload me
    Else
      kapsel stanowi przeszkodę, nie zamknę formularza dopóki
      User nie usunie kapsla. Będę mu świecił polem tekstowym po oczach
      aż mu się znudzi i otworzy wreszcie tę flaszkę.
      MsgBox "Uprzejmie proszę o użycie otwieracza, opisania stanu butelki w polu tekstowym i potwierdzenie kliknięciem przycisku"
    End If

    Pod drugim przyciskiem (Anuluj) jest sobie kod Unload Me bo a nuż nie ma otwieracza, a jakoś musi zamknąć formularz...

    Formularz zostanie otwarty dopóki zmienna butelka, czy wartość pola tekstowego w jej miejscu będzie różna od "otwarta", lub User nie naciśnie przycisku "Anuluj" (bo hasła nie zna, a wymyślania już ma dość).
  • Poziom 23  
    Kolego @adamas_nt ja naprawdę rozumiem to co piszesz i nawet próbowałem kod który posłałeś mi do roboty ale ten kod ani to co mi tu opisujesz naprawdę nie działa, wywala błędy. Próbowałem już różnych kombinacji i jedynie kod który pokazałem powyżej działa poprawnie. Może jestem aż tak tępy ze nie umiem tego zrobić tak jak mówisz ale po prostu nie umiem. :(
  • Pomocny post
    Moderator Programowanie
    Tak na szybko przerobione z Twojej procedury
    Code:
    Private Sub cmdLogowanie_Click() 'nie Enter
    
      If Me.txtPassword.Value = "test" Then
        'tu robisz co potrzeba
        'i zamykasz formę
        Unload Me
      Else
        MsgBox "Błędne haslo! Wpisz poprawne hasło", vbExclamation, "Logowanie"
        'zeruję wartość i ustawiam kursor
        txtPassword.Value = ""
        txtPassword.SetFocus
        'forma zostaje otwarta
      End If
    End Sub
  • Poziom 23  
    Kolego @adamas_nt szacuneczek. Kod działa ale powiem dlaczego wcześniej nie chciał mi działać, dlatego że w dalszym ciągu próbowałem wstawić True i False bo myślałem że to jest konieczne, ale wpadka

    Dodano po 3 [minuty]:

    Ostatecznie kod wygląda tak i działa tak jak chciałem:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Moderator Programowanie
    Najważniejsze, że próbujesz, dociekasz. Tępoty sobie Broń Boże nie zarzucaj. Nie od razu Rzym zbudowano. Zaczynałem od Excela 5 i już po kilku latach "odkryłem" WYSZUKAJ.PIONOWO :)
  • Poziom 23  
    A tak przy okazji. Ponieważ kod działa mi już poprawnie to zamierzam teraz do niego dodać inne opcje dostępu jako Administrator. I zapytam: w pliku mam kilkanaście arkuszy i wszystkie są dokładnie takie same, są to tabele jednak każda służy do innej dziedziny, i teraz w każdej z tych tabeli mam jeden przycisk Delete do resetowania tabeli, każdy z tych przycisków nazywa się tak samo: CommandButton1, czy można robić coś takiego że w kodzie do logowania dodam jakąś tylko jedną opcje która przy zalogowaniu spowoduje aktywowanie przycisków a przy braku zalogowania przyciski żeby były nieaktywne? Tak żeby to działało na wszystkich przyciskach o tej samej nazwie.
  • Moderator Programowanie
    Tak, procedurą typu "nalewanie do szklanki" :) będzie tutaj pętla, w której jako zmienna-licznik należy przypisać indeksy arkuszy. No właśnie, wszystkich? Można wcześniej sprawdzić czy taki obiekt znajduję się w arkuszu i dopiero ustawić Enable na True, lub wyłączyć obsługę błędów.

    Dezaktywować najlepiej przy zamknięciu pliku (po logowaniu jako Admin pozostaną aktywne). Kilka postów wyżej jest przykład z od/ukrywaniem kolumn bodajże.