Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

VBA EXCEL - Makro po wypełnieniu komórki tworzy nowy arkusz i dodaje hiperłącze

zbbyn 14 Aug 2018 10:16 1167 15
  • #1
    zbbyn
    Level 9  
    Witam

    Męczę się z tym tematem już od kilku dni, wydaje mi się iż im więcej wiedzy na temat VBA wchłaniam tym jestem dalej od osiągnięcia celu.

    Musze stworzyć makro, które po wypełnieniu komórki np. B2 (nazwisko) stworzy nowy arkusz nazwie go tak jak B2, zaś w komórce D2 utworzy hiperłącze do tego arkusza, ponadto nowo stworzony arkusz musiałby już zawierać określone tabele .

    Jest to ostatni etap mojej pracy, i się na nim wyłożyłem. Proszę o pomoc w kodzie VBA.
  • #2
    clubs
    Level 37  
    Prosty sposób to nagranie makra i podstawienie wybranych komórek
  • #3
    zbbyn
    Level 9  
    Zapożyczyłem i w miarę możliwości dostosowałem do swoich potrzeb taki kod:

    Sub new_book()

    With ThisWorkbook
    .Sheets("wzor rodzinne").Copy
    ActiveWorkbook.SaveAs .Path & "\rodzinne\" & _
    .Sheets("set").Range("dok") & _
    .Sheets("set").Range("num") & ".xls"
    ActiveWorkbook.Close
    End With
    End Sub

    Chciałbym aby makro nazywało dokument nie po komórce "dok" jak w kodzie, ale po aktualnie zaznaczonej/aktywnej komórce.
  • #4
    clubs
    Level 37  
    zbbyn wrote:
    Chciałbym aby makro nazywało dokument nie po komórce "dok" jak w kodzie, ale po aktualnie zaznaczonej/aktywnej komórce.

    Zmień z dok na ActiveCell
  • #5
    zbbyn
    Level 9  
    clubs wrote:
    Zmień z dok na ActiveCell

    Dzięki za szybką odpowiedź.
    To była pierwsza rzecz, którą zrobiłem przed zadaniem tu pytania, jednak po tej zmianie makro wywala mi bład 1004
  • #6
    clubs
    Level 37  
    Rozumiem że tak to zrobiłeś?
    Code: vbscript
    Log in, to see the code
  • #7
    zbbyn
    Level 9  
    Podobnie, jednak przedstawiony przez Ciebie sposób też nie działa.
    Wywala ten sam błąd 1004 Method 'SaveAs' of object'_Woorkbook'failed
    zaznacza tą linie >> ActiveCell.Value & ".xls"

    nie wiem już co robie źle. ehh
  • #8
    clubs
    Level 37  
    Co masz w ActiveCell? Nie może być znaku typu /?\
  • #9
    zbbyn
    Level 9  
    same zwykłe litery, czy jest możliwość aby makro brało aktywną komórkę z formularza wzór a nie z formularza set?
  • #10
    clubs
    Level 37  
    Jak sama nazwa wskazuje ActiveCell to taka w którą aktualnie kliknąłeś w danym arkuszu
  • #11
    zbbyn
    Level 9  
    W moim przykładzie kodu makro brało nazwę zapisywanego pliku z wskazanych komórek z formularza "set" (chciałem aby brało z tego formularza z aktywnych zaznaczonych komórek)

    ActiveWorkbook.SaveAs .Path & "\rodzinne\" & _
    .Sheets("set").Range("dok") & _
    .Sheets("set").Range("num") & ".xls"

    w twoim przykładzie (mimo że mam otwarty formularz "set") bierze z zaznaczonej komórki ale w formularzu "wzór rodzinne"
    ActiveWorkbook.SaveAs .Path & "\rodzinne\" & _
    ActiveCell.Value & ".xls"

    Proszę podpowiedz jak zrobić aby brało z formularza "set"?
  • Helpful post
    #12
    clubs
    Level 37  
    Code: vbscript
    Log in, to see the code
  • #13
    zbbyn
    Level 9  
    Dziękuję. Wszystko działa.
    Zamykam

    Dodano po 8 [godziny] 4 [minuty]:

    Pojawił się jeszcze jeden problem.
    Makro nie chce zapisać do pliku xlsm
    Jest na to jakiś sposób?

    Dodano po 13 [minuty]:

    Przebrnąłem przez problem z zapisem do xlsm dodając:

    FileFormat:=xlOpenXMLWorkbookMacroEnabled

    Jednak napotkałem na kolejny problem, makro kopiuje arkusz ze wzoru z obsługą makr jednak nie kopiuje forms i modules.
    Nie wiem czy przez to przebrnę...
  • #14
    Prot
    Level 38  
    zbbyn wrote:
    makro, które po wypełnieniu komórki np. B2 (nazwisko) stworzy nowy arkusz nazwie go tak jak B2, zaś w komórce D2 utworzy hiperłącze do tego arkusza, ponadto nowo stworzony arkusz musiałby już zawierać określone tabele

    W Twoim pierwotnym opisie mowa była tylko o tworzeniu nowych arkuszy i hiperłączy do nich :cry:
    Dla uzyskania takiego pierwotnego efektu
    VBA EXCEL - Makro po wypełnieniu komórki tworzy nowy arkusz i dodaje hiperłącze2018-08...png Download (32.64 kB)
    możesz wykorzystać makro uruchamiane podwójnym kliknięciem każdą niepustą komórkę w kolumnie B :spoko:

    Całość w załączonym pliku
    AutoHip...xls Download (43 kB)Points: 3 for user
  • #15
    zbbyn
    Level 9  
    Dziękuję Prot, to jest to czego szukałem.

    Faktycznie na początku szukałem opcji z nowymi arkuszami jednak w związku z tym, że w sieci udało mi się znaleźć tylko opcję z nowymi plikami, doszedłem do wniosku, "że też się nada", i że wystarczy "tylko" ją odpowiednio zmodyfikować do własnych celów, jak się to później okazało z moją wiedzą było to bardzo trudne.
  • #16
    zbbyn
    Level 9  
    Niestety jestem zmuszony powrócić do tego tematu.

    Podczas pracy na stworzonym arkuszu, i w trakcie dodawania klientów, po tym jak zostało dodanych około 300 klientów i powstało około 300 zakładek, po pierwsze działanie programu i makr zwolniło po drugie plik waży ponad 5mb i nie jest możliwa praca w sieci na zasadzie współdzielenia, zaś w starszej opcji udostępniania z kolei nie działają makra.

    W związku z tym jestem zmuszony do powrotu do opcji aby każdy klient miał dodawaną kartę w postaci zapisu do oddzielnego pliku, a nie jako zakładkę.

    Robię to w ten sposób

    Code: vbscript
    Log in, to see the code


    Makro wywala błąd i zaznacza
    Code: vbscript
    Log in, to see the code


    Ścieżka dobra, co robię źle?

    Dodano po 4 [godziny] 52 [minuty]:

    Musiałem aktywować "Ufaj dostępowi do modelu obiektowego projektu VBA"
    i wszystko działa.

    Pozdrawiam