Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 0
  • 1

Dzień dobry!

Szukam pomysłu w jaki optymalny sposób napisać procedurę w VBA dla nw. czynności.

Informacje wprowadzające w sytuację.

W folderze o nazwie „DANE” istnieje skoroszyt (.xlsm) o nazwie „DRUCZEK” z kilkoma arkuszami.

Jeden z tych arkuszy nosi nazwę „BazaZ”.

Także w tym samym folderze znajduje się skoroszyt bez makr (.xlsx) o nazwie „ARCH_1” i jednym arkuszu o nazwie „Arkusz_1”, zawierającym listę z wierszem nagłówkowym A2:AC2. Komórka „G2” ma nagłówek „Numer” (inne są tutaj nieistotne).

Lista ma format tabeli, chociaż nie jest sformatowana jako tabela. Zasilana jest narastająco kolejnymi rekordami danych. Odbywa się to za pomocą procedury uruchamianej w arkuszu „BazaZ” w skoroszycie „DRUCZEK”. Dla tego przykładu rekordem nazwałem trzy wiersze (chociaż to niefachowo), które są wklejane do wspomnianej listy narastająco. Noszą ten sam numer w komórkach kol. „G”. Może się zdarzyć, że będą to dwa, lub jeden wiersz. Wszystkie zawsze mają szerokości A:AC.

Czego szukam.

Szukam optymalnego rozwiązania, aby z poziomu arkusza „BazaZ” uaktywnić makro, które otworzy skoroszyt „ARCH_1” z arkuszem „Arkusz_1” i wyszuka w kolumnie „G” wszystkie rekordy z numerem np. 19, skopiuje i wklei specjalnie (jako wartość) do obszaru rozpoczynającego się w komórce „C37” arkusza „BazaZ” skoroszytu  „DRUCZEK”.

Ułatwieniem może być to, że te rekordy z tym numerem zawsze są jeden po drugim i nie są przedzielone innym.

Z góry dziękuję za jakąkolwiek pomoc.

 

Tadeusz_Kasprzak
  • Zapytał
  • @ Tadeusz_Kasprzak | 13.12.2018
    • 9
    • 4
    • 11

Odpowiedzi (3)

  • 0

Otwieranie skoroszytu w celu pobrania z niego danych nie jest optymalne :) Sprawdź coś takiego:

Sub pobierz_dane()
Dim Conn, Conn_txt As String, SQL_txt As String, numer As Integer

numer = 19

Set Conn = CreateObject("ADODB.recordset")

Conn_txt = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
            "Data Source=" & ThisWorkbook.Path & "\ARCH_1.xlsx;" & _
            "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';"

SQL_txt = "select * from [Arkusz_1$] where [Numer]=""" & numer & """;"

Conn.Open SQL_txt, Conn_txt

[BazaZ!c37].CopyFromRecordset Conn

End Sub

 

Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 13.12.2018
    • 1
    • 7
    • 1
Komentarze
Dziękuję za szybką reakcję. Wkleiłem Twój kod do modułu, ale haczy - pokazuje błąd. Chciałbym załączyć zrzut z ekranu, ale z tego poziomu komentarza się nie da. Przejdę do okna niżej.
Skomentował : @ Tadeusz_Kasprzak ,14.12.2018
  • 9
  • 4
  • 11
  • 0

Po wklejeniu świetnie wyglądającego kodu uruchomiłem go, ale niestety haczy. Zgłasza się błąd. Załaczyłem dwa zrzuty ekranu, z tej operacji. Nie znam się tak dobrze na VBA i dlatego liczę na pomoc tutaj.

Załączniki

  • jpg

    Zrzut_1.JPG ( 43K )
  • jpg

    Zrzut_2.JPG ( 43K )
Tadeusz_Kasprzak
  • Odpowiedział
  • @ Tadeusz_Kasprzak | 14.12.2018
    • 9
    • 4
    • 11
  • 0

Wiem, że to nie jest odpowiedź jakiej oczekujesz, ale właśnie takich rzeczy uczę na EX04, zapraszam

  • Odpowiedział
  • @ | 19.12.2018
  • TRENER ALTKOM AKADEMII
Komentarze
Sorry Darku, ale już miałem u Was szkolenie EX04/ZPOMBD (listopad 2014) z Markiem Krawczykiem. Tak daleko nie zabrnęliśmy w VBA. Pozdrawiam!
Skomentował : @ Tadeusz_Kasprzak ,14.01.2019
  • 9
  • 4
  • 11