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

Vlookup użycie wartości która znajduje się w nagłówku arkusza

Pa_ula 14 Wrz 2017 16:56 723 12
  • #1 14 Wrz 2017 16:56
    Pa_ula
    Poziom 3  

    Witam,

    potrzebuję pomocy z funkcją VLOOKUP. Utworzyłam plik Excel z dwoma arkuszami. Pierwszy arkusz zawiera bazę danych, natomiast drugi arkusz stanowi formę formularza. Po uzupełnieniu bazy danych, automatycznie tworzony jest nowy plik excel z formularzem. Chciałabym, aby pola w formularzu uzupełniły się automatycznie na podstawie bazy danych. Dodam, iż część danych wprowadzana jest później do bazy, więc wygenerowany nowy plik musi się aktualizować. Do wypełniania formularza chciałabym użyć funkcji VLOOKUP (chyba, że jest inna odpowiedniejsza funkcja). Mój problem jest taki, iż wartość szukana znajduje się w nagłówku arkusza formularz i ma postać typu 01/2017/KJ. Czy jest możliwość, aby w funkcji VLOOKUP odnieść się do wartości szukanej, która znajduje się w nagłówku arkusza?

    Z góry dziękuję za pomoc. Jestem początkująca jeśli chodzi o VBA

    0 12
  • #2 14 Wrz 2017 17:34
    JRV
    Specjalista - VBA, Excel

    Bez dołączania pliku doradzić coś trudno.

    0
  • #3 19 Wrz 2017 02:03
    lanzul
    Poziom 23  

    Pa_ula napisał:
    wartość szukana znajduje się w nagłówku arkusza formularz i ma postać typu 01/2017/KJ. Czy jest możliwość, aby w funkcji VLOOKUP odnieść się do wartości szukanej, która znajduje się w nagłówku arkusza?

    Co kryje się pod sformułowaniem "odnieść się do wartości szukanej" ?
    Czy na pewno VLOOKUP, czy też może HLOOKUP ?

    "Odnieść" się można - trzeba tylko podać odpowiednie parametry funkcji - przykład:
    Vlookup użycie wartości która znajduje się w nagłówku arkusza

    0
  • #4 20 Wrz 2017 08:24
    Pa_ula
    Poziom 3  

    Witam,

    wartość szukana w moim przypadku, jest to numer karty reklamacyjnej, który zmienia się z każdą kolejną kartą. Numer generowany jest w nagłówku arkusza, zatem nie mogę podać lokalizacji wartości szukanej jako adres komórki np A1.

    Zamiast funkcji VLOOKUP zastanawiam się nad użyciem funkcji FIND jednak mój kod nie działa. Kod zamieszczam poniżej

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #5 20 Wrz 2017 17:23
    adamas_nt
    Moderator Programowanie

    Jeśli pierwszy MsgBox pokazuje Ci prawidłową wartość, to jesteś w domu.
    Wpisz prawidłowy zakres, zrezygnuj z LookIn na rzecz LookAt i powinno działać:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Zmienna "a" powinna zadeklarowana być jako Range.

    0
  • #6 21 Wrz 2017 07:46
    Pa_ula
    Poziom 3  

    Witam,
    MsgBox naglowek pokazuje wartość prawidłową. Zamieniłam LookIn na LookAt i niestey pojawia się błąd Run - Time error '1004' Application - Defined or object - defined error

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #7 21 Wrz 2017 08:32
    adamas_nt
    Moderator Programowanie

    Nie ma takiego zakresu Range("B:B100")
    Albo "B:B", albo Np "B1:B100"
    Popraw

    0
  • #8 21 Wrz 2017 08:50
    Pa_ula
    Poziom 3  

    Zakres poprawiony, jednak nie podaje adresu komórki i MsgBox wyswietla nie znaleziono "non trouve"

    Dodano po 3 [minuty]:

    Podejrzewam, że problem jest z formatem naglowka. Poniżej zamieszczam kod w jaki sposob jesqt tworzony naglowek

    Worksheets("Nazwa").Range("A1").Value = Worksheets("Nazwa").Range("A1").Value + 1
    Worksheets("Nazwa").Range("A1").NumberFormat = "00"
    Worksheets("Nazwa").Range("B1").Value = Worksheets("Zestawienie_Reklamacji").Range("A" & lastCell + 1).Value


    Worksheets("Karta_Reklamacji").Activate
    With ActiveSheet.PageSetup
    .RightHeader = Worksheets("Nazwa").Range("A1").Text & "/2017/" & "KR/PJK"

    0
  • #9 21 Wrz 2017 08:58
    adamas_nt
    Moderator Programowanie

    Czyli sam kod działa. Musisz teraz dojść do tego, dlaczego nie znalazł.
    Spróbuj ręcznie (przez ctrl+f) z wartością podawaną przez MsgBox. Sprawdź, czy nie ma spacji na początku i końcu. Czy wielkość liter zgodna (może trzeba dodać 'Option Compare Text' w nagłówku modułu, lub argument MatchCase:=False w 'Find'.

    Najprościej byłoby, gdybyś załączyła ten "niedziałający" przykład...

    Edit: Zmieniłaś, to i ja zmienię. Być może szukasz "1" zamiast "01", albo odwrotnie.

    0
  • #10 21 Wrz 2017 10:10
    Pa_ula
    Poziom 3  

    Teraz działa dziękuję :-)

    0
  • #11 28 Wrz 2017 08:10
    Pa_ula
    Poziom 3  

    Witam,

    potrzebuje pomocy:-) Potrzebuje aby odwołać się do komórki w zamkniętym pliku Excel, adres komórki jest zależny od zmiennych. Ostatnia linijka kodu jest napisana błędnie czy możecie pomóc?

    Set celluletrouvee = Worksheets("Zestawienie_Reklamacji").Range("A1:D100").Find(What:=naglowek, lookat:=xlWhole)

    If celluletrouvee Is Nothing Then
    MsgBox ("pas trouvé " + Chr(13) + Str(Date))
    Else
    ligne = celluletrouvee.Row
    col = celluletrouvee.Column
    MsgBox ("trouvé : ligne = " & ligne & " , colonne = " & col)

    MsgBox celluletrouvee.Address
    Range(celluletrouvee.Address).Select



    End If

    Worksheets("Karta_Reklamacji").Range("E25") = Reklamacje.xlsmZestawienie_Reklamacji!.Cells(ligne, col + 12).Value

    0
  • #12 28 Wrz 2017 17:04
    clubs
    Poziom 29  

    Pa_ula napisał:
    Ostatnia linijka kodu jest napisana błędnie czy możecie pomóc?


    Plik zamknięty musi być w tym samy katalogu(lub trzeba podać ścieżkę)



    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #13 28 Wrz 2017 20:36
    lanzul
    Poziom 23  

    Pa_ula napisał:
    Potrzebuje aby odwołać się do komórki w zamkniętym pliku Excel, adres komórki jest zależny od zmiennych. Ostatnia linijka kodu jest napisana błędnie ...

    Jak bardzo zależy od zmiennych ?
    Bo jak nie za bardzo, to można obsłużyć to zwykłymi wzorami.
    Przykład pobrania zawartości komórki 'A4' z arkusza 'Arkusz1' z pliku (niezahasłowanego) o nazwie 'Raport_2017.xls' umieszczonego w 'c:\temp'
    Kod: Funk
    Zaloguj się, aby zobaczyć kod

    Jeśli bardziej, to tak jak kolega clubs podał, chociaż niekoniecznie trzeba do tego używać 'makrosów excela 4.0' ... można takie "zwykłe vba" mając za schemat wzór powyżej lub też stosując np.:
    1) Workbooks.Open / Workbooks.Close
    2) CreateObject / GetObject
    3) ADO używając np.: 'Microsoft.Jet.OLEDB Provider'

    ... ale tak "na sucho" to można wszystkie możliwości rozważać, przykład jakowyś się upraszająco kłania, choćby zmyślony całkowicie ... :) ...

    0