Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

Makro z hasłem - plik źródłowy z hasłem

zbysiomysio 11 Sty 2017 14:12
  • #1 11 Sty 2017 14:12
    zbysiomysio
    Poziom 6  

    Witam
    Mam plik, który się łączy z innym plikiem źródłowym zabezpieczonym przed otwarciem hasłem. Czy jest możliwość stworzenia makra, które spowodowałoby, że podczas otwierania pliku nie wyskakiwałoby okienko do wpisania hasła, ale robiło to makro (oczywiście ja hasło znam). Próbowałem coś znaleźć na ten temat, ale bezskutecznie. Nadmieniam, że zależy mi na tym, żeby plik źródłowy nie był otwierany i dane do mojego pliku były zaciągane z zamkniętego pliku źródłowego. Będę wdzięczny za wszelkie informacje

  • #2 11 Sty 2017 15:40
    JRV
    Specjalista - VBA, Excel

    zbysiomysio napisał:
    podczas otwierania pliku nie wyskakiwałoby okienko do wpisania hasła
    Workbooks.Open(FileName:="D:\MojSkoroszyt.xlsx", Password:=haslo

  • #3 11 Sty 2017 18:53
    zbysiomysio
    Poziom 6  

    Dzięki za zainteresowanie. Jednak to makro otwiera plik źródłowy, a mi zależy na tym, aby on pozostawał zamknięty. Chodzi o to, że plik z łaczami jest ogólnodostępny dla wielu użytkowników, natomiast plik źródłowy powinien być dla nich niedostępny.

  • #4 11 Sty 2017 19:21
    JRV
    Specjalista - VBA, Excel

    zbysiomysio napisał:
    plik źródłowy powinien być dla wielu użytkowników niedostępny
    zbysiomysio napisał:
    dane do mojego pliku były zaciągane z zamkniętego pliku źródłowego
    Tylko do Twojego pliku i nie innych użytkowników?

  • #5 11 Sty 2017 20:34
    zbysiomysio
    Poziom 6  

    Tak, t.j. do pliku źródłowego mam tylko ja dostęp i hasło, natomiast pliki z łączami do pliku źródłowego są dostępne dla innych użytkowników.

  • #6 11 Sty 2017 21:40
    JRV
    Specjalista - VBA, Excel

    Co jest sedno problemu?

  • #7 11 Sty 2017 21:46
    zbysiomysio
    Poziom 6  

    Problemem jest to, że pliki z których korzystają użytkownicy zaciągają pewne dane z pliku źródłowego do którego nie chcę aby mieli oni dostęp (aby nie mogli go otwierać)

  • #8 11 Sty 2017 21:50
    lesławek
    Poziom 31  

    Cytat:
    Nadmieniam, że zależy mi na tym, żeby plik źródłowy nie był otwierany i dane do mojego pliku były zaciągane z zamkniętego pliku źródłowego.
    Zaciąganie danych z zamkniętego pliku jest niemożliwe, żeby odczytać cokolwiek plik musi zostać otwarty. Możliwe jest aby nie pokazał się na ekranie na początku makra napisz
    Application.ScreenUpdating = false, a po zakończeniu Application.ScreenUpdating = true

  • #9 11 Sty 2017 22:06
    zbysiomysio
    Poziom 6  

    Dzięki za info. Obawiałem się, że nie da się tego zrobić. Szkoda, bo po pierwsze plik źródłowy jest dosyć duży i otwieranie jego strasznie zamula komputery użytkowników. Natomiast mam jeszcze jedno pytanie w nawiązaniu do tego. Czy jest możliwe, aby makro otwierało plik źródłowy bez wpisywania w makrze jego ścieżki, która niestety się co jakiś czas zmienia, a tym samym każdorazowo w makrze musiałbym poprawiać tą ścieżkę. Dokładnie to wygląda tak, że plik źródłowy i pliki użytkowników są w tym samym folderze, ale sam folder zmienia czasami miejsce na dysku.

  • #10 11 Sty 2017 22:12
    lesławek
    Poziom 31  

    zbysiomysio napisał:
    Czy jest możliwe, aby makro otwierało plik źródłowy bez wpisywania w makrze jego ścieżki
    Nie nie jest możliwe jeśli cokolwiek (program czy człowiek) ma uzyskać dostęp do pliku to musi znać jego lokalizację
    zbysiomysio napisał:
    ale sam folder zmienia czasami miejsce na dysku
    tzn co sam zmienia? Jeśli nie sam to podejrzewam że za jego lokalizacją kryje się jakaś tajemnicza logika np katalog zawiera rok... w takim razie musisz napisać procedurę która ustali tą ścieżkę np na podstawie daty.

  • #11 11 Sty 2017 22:38
    JRV
    Specjalista - VBA, Excel

    zbysiomysio napisał:
    plik źródłowy i pliki użytkowników są w tym samym folderze

    Workbooks.Open ThisWorkbook.Path & "\zrodlo.xlsx"

  • Pomocny post
    #12 12 Sty 2017 08:20
    adamas_nt
    Moderator Programowanie

    lesławek napisał:
    Zaciąganie danych z zamkniętego pliku jest niemożliwe
    To nie jest prawda :)
    Poniższe odczytuje zawartość komórki C3 z zamkniętego pliku
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

  • #13 12 Sty 2017 09:31
    zbysiomysio
    Poziom 6  

    adamas_nt napisał:
    lesławek napisał:
    Zaciąganie danych z zamkniętego pliku jest niemożliwe
    To nie jest prawda :)
    Poniższe odczytuje zawartość komórki C3 z zamkniętego pliku
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    sorry, ale cieniutki jestem z VBA. Czy to jest pełne makro? Rozumiem, że mam wstawić nazwę swojego pliku i nazwę arkusza, ale czy coś jeszcze, bo pokazuje mi błędy?
    Nie wiem też czy zrozumiale wytłumaczyłem o co mi chodzi. Otóż jest kilkanaście plików, z których korzystają (wprowadzają dane) różni użytkownicy. W każdym z tych plików (dokładnie w pierwszym arkuszu) w trzech wierszach (nie kolejnych) są formuły, które pobierają dane z jednego pliku źródłowego do którego nie chciałbym, aby mieli dostęp wszyscy i dlatego jest zabezpieczony hasłem przed otwarciem. Problem w tym, że jeżeli użytkownik włącza swój plik i chce go zaktualizować musi podać hasło do pliku źródłowego. Dlatego myślałem, że może byłaby możliwość, aby hasło podawało makro.

  • #14 12 Sty 2017 13:10
    lesławek
    Poziom 31  

    To jest tak jakbyś wpisał formułę do komórki zawierającą odwołanie do innego pliku i w zmiennej a masz wartość z tej komórki jeśli chcesz pobrać więcej danych to musisz napisać pętle pobierającą dane do tablicy lub zakresu. Ale jeśli masz jeden duzy plik do którego wszyscy wpisuja dane, a nie powinien być on dostępny powszechnie a dodatkowo plik ten jest bardzo duży, to mamy temat na bazę danych...

    Dodano po 1 [minuty]:

    zbysiomysio napisał:
    W każdym z tych plików (dokładnie w pierwszym arkuszu) w trzech wierszach (nie kolejnych) są formuły, które pobierają dane z jednego pliku źródłowego do którego nie chciałbym, aby mieli dostęp wszyscy i dlatego jest zabezpieczony hasłem
    to makro to właśnie taka formuła...

    Dodano po 52 [sekundy]:

    zbysiomysio napisał:
    Rozumiem, że mam wstawić nazwę swojego pliku i nazwę arkusza, ale czy coś jeszcze, bo pokazuje mi błędy?
    Pokaż dokładnie co wpisałeś i jakie masz błędy?

  • #15 12 Sty 2017 13:52
    zbysiomysio
    Poziom 6  

    lesławek napisał:
    To jest tak jakbyś wpisał formułę do komórki zawierającą odwołanie do innego pliku i w zmiennej a masz wartość z tej komórki jeśli chcesz pobrać więcej danych to musisz napisać pętle pobierającą dane do tablicy lub zakresu. Ale jeśli masz jeden duzy plik do którego wszyscy wpisuja dane, a nie powinien być on dostępny powszechnie a dodatkowo plik ten jest bardzo duży, to mamy temat na bazę danych...
    Dodano po 1 [minuty]:

    Dzięki za informacje. To nie jest jeden duży plik, lecz kilkanaście znajdujących się w jednym folderze. Każdy z użytkowników ma swój skoroszyt do którego wprowadza pewne dane. Jednak wszystkie te skoroszyty muszą też część danych pobrać ze skoroszytu źródłowego zabezpieczonego hasłem do którego chciałbym tylko ja mieć dostęp (nie ujawniać hasła użytkownikom tamtych skoroszytów)
    Niestety w kwestii VBA to trudno powiedzieć, że ja nawet raczkuję (korzystam jedynie z kreatora lub przerabiam na własne potrzeby proste makra, które podejrzę na forach). Tak więc pętle to na razie dla mnie magia

    zbysiomysio napisał:
    Rozumiem, że mam wstawić nazwę swojego pliku i nazwę arkusza, ale czy coś jeszcze, bo pokazuje mi błędy?
    lesławek napisał:
    Pokaż dokładnie co wpisałeś i jakie masz błędy?


    Tą procedurę chciałem wypróbować na innych plikach stworzonych na te potrzeby. Dla tego celu plik źródłowy ma nazwę "1" i arkuszem, z którego miałyby być pobierane dane jest Arkusz1. Makro więc wygląda tak, choć wiem, że coś tu zrobiłem źle:

    Sub Makro2()

    arg = "'" & Path & "[" & 1 & "]" & Arkusz1 & "'!" & Range("A3").Range("A1").Address(, , xlR1C1)
    a = ExecuteExcel4Macro(arg)


    End Sub

    Po uruchomieniu tej procedury pokazuje się Error 438

  • #16 12 Sty 2017 14:06
    lesławek
    Poziom 31  

    Musisz dopisać .xlsx lub .xlsm do nazwy, a zamiast path wpisac ścieźkę.

  • #17 12 Sty 2017 17:24
    zbysiomysio
    Poziom 6  

    lesławek napisał:
    Musisz dopisać .xlsx lub .xlsm do nazwy, a zamiast path wpisac ścieźkę.


    Dopisałem xls, ale makro nie chodzi. Pokazuje mi ten sam błąd. Próbowałem zarówno z path jak i ze ścieżką

  • Pomocny post
    #18 12 Sty 2017 17:46
    clubs
    Poziom 27  

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #19 13 Sty 2017 08:47
    zbysiomysio
    Poziom 6  

    clubs napisał:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Dzięki za wszystkie uwagi. To makro rzeczywiście mi ruszyło, tylko, że ja go nie rozumiem i nie wiem co ono dokładnie robi (przepraszam, ale tak jak pisałem wcześniej moja wiedza z VBA jest cieniutka). Czy ono tylko odczytuje dane z komórki A3 z zamkniętego pliku "1" bez przenoszenia? A jeżeli tak to proszę o poradę co powinienem dopisać, aby powiedzmy dane z tej komórki A3 przeniosło mi do Arkusza1 komórki A1 w docelowym otwartym pliku z makrem. Próbowałem na zasadzie wklejania, ale to coś nie tak.

  • Pomocny post
    #20 13 Sty 2017 09:03
    clubs
    Poziom 27  

    Witam

    Wystarczy dopisać po a np.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #21 13 Sty 2017 09:53
    zbysiomysio
    Poziom 6  

    clubs napisał:
    Witam

    Wystarczy dopisać po a np.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    SUPER!!!! Dzięki. Makro chodzi. Przepraszam, że jestem taki męczący, ale próbowałem zrobić to na zakres komórek, czyli z zakresu A3:C4 miałoby przenosić do A1:C2, a więc zrobiłem to tak:

    Sub Makro2()
    arg = "'" & ActiveWorkbook.Path & "\" & "[" & "1.xls" & "]" & "Arkusz1" & "'!" & Range("A3:C4").Range("A1").Address(, , xlR1C1)
    a = ExecuteExcel4Macro(arg)
    Sheets("Arkusz1").Select
    Range("A1:C2") = a
    End Sub

    Jednak coś źle robię, bo do komórek A1:C2 przenosi wartość A3. Pewnie trzeba tu zastosować jakąś pętlę, ale nie umiem tego robić.
    I jeszcze jedno. Próbowałem wpisywać hasło do procedury, t.j. , Password:=1, ale pokazuje mi błąd. Prawdopodobnie wstawiam w złe miejsce (choć wydaje mi się, że wstawiałem już na wszystkie możliwe sposoby). W którym dokładnie miejscu powinno się to pojawić?

  • #22 15 Sty 2017 14:28
    zbysiomysio
    Poziom 6  

    JRV napisał:
    zbysiomysio napisał:
    plik źródłowy i pliki użytkowników są w tym samym folderze

    Workbooks.Open ThisWorkbook.Path & "\zrodlo.xlsx"


    Czy jest możliwość, aby przed uruchamianiem tej procedury makro sprawdzało czy plik źródło.xls jest już otwarty, a jeżeli jest otwarty, żeby nie próbował otworzyć już pliku tylko przechodził do dalszej części makra?

  • Pomocny post
    #23 15 Sty 2017 15:21
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • #24 15 Sty 2017 16:03
    zbysiomysio
    Poziom 6  

    Super. Makro śmiga. Dzięki. Wiem, że może wymagam dużo, ale czy wiesz może czy można coś dopisać do procedury, aby w przypadku otwierania pliku źródło.xls nie było to widoczne na pasku zadań, t.j., żeby nie było widoczne, że otwiera się nowe okno. Chodzi o to, że plik ten ma zostać tylko otwarty i po pobraniu danych zamknięty, a nie chciałbym, żeby inni użytkownicy widzieli, że otwiera się plik źródło.xls

  • #25 15 Sty 2017 16:29
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • #26 15 Sty 2017 19:07
    zbysiomysio
    Poziom 6  

    JRV napisał:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Dzięki za informacje. Chyba jednak to nie jest to o co mi chodziło. Jak rozumiem ten kod powoduje, że makro wykonuje działania w tle przy otwartym cały czas plikiem głównym z makrem. Mi chodziło natomiast o to czy jest możliwość, aby nie było widać na pasku zadań, że jest otwierane nowe okno z plikiem źródło.xls

  • #27 15 Sty 2017 19:20
    JRV
    Specjalista - VBA, Excel

    zbysiomysio napisał:
    Jak rozumiem
    Czy próbowałeś?

    Dodano po 3 [minuty]:

    Tak na ułamek sekundy widać

    Dodano po 4 [minuty]:

    Może przejść długą drogę - programowo utworzyć obiekt Excel, domyślnie nie jest widoczny, z nim otworzyc plik

  • #28 15 Sty 2017 19:27
    zbysiomysio
    Poziom 6  

    JRV napisał:
    zbysiomysio napisał:
    Jak rozumiem
    Czy próbowałeś?
    Dodano po 3 [minuty]:
    Tak na ułamek sekundy widać
    Dodano po 4 [minuty]:
    Może przejść długą drogę - programowo utworzyć obiekt Excel, domyślnie nie jest widoczny, z nim otworzyc plik


    Tak, próbowałem. Ja część tego kodu nawet miałem już w swoim makrze. Rozumiem, że to o co mi chodzi jest bardzo skomplikowane. Więc dajmy sobie spokój. Dzięki za pomoc

  Szukaj w 4mln produktów
Przeglądaj produkty