Legújabb, létező külső Excel munkafüzetben Fkeres

Legújabb, létező külső Excel munkafüzetben Fkeres
2019-09-10T10:37:31+02:00
2019-10-03T19:37:25+02:00
2022-10-15T21:30:50+02:00
Szadam94
Sziasztok! Abszolút kezdő vagyok VBA makrók terén, de nagyon érdekel, hogyan tudom automatizálni a munkám bizonyos részét. A problémám a következő lenne: Létrehoztam egy új fájlt, amelyben egy táblázatban ellenőrzés céljából adatok jelennek meg Fkeres függvények segítségével. Viszont az adatokat mindig a legújabb külsö fájlből kellene be Fkeresezni. Sikerült találnom és beillesztenem 3 rövid makrót, amelyek meg tudják nyitni az aktuálisan legújabb külső excel fájlokat, viszont az fkeres résszel sehogysem tudom összerakni. A segítséget előre is nagyon köszönöm, sokat fogok visszakérdezni a tudás híján.

Az alábbi makrót találtam és személyre szabtam. Ezzel csak megnyitni tudom, de a cél az lenne, hogy a legújabb fájlban végezne el a makró Fkeres függvényeket.

Sub Shiplog()
'
' Shiplog Makró
'

'
'Declare the variables
Dim MyPath As String
Dim MyFile As String
Dim LatestFile As String
Dim LatestDate As Date
Dim LMD As Date



'Specify the path to the folder
MyPath = "L:\LOGISTIC\CSCO ShipLog\Összevágott ShipLog\2019"

'Make sure that the path ends in a backslash
If Right(MyPath, 1) <> "" Then MyPath = MyPath & ""

'Get the first Excel file from the folder
MyFile = Dir(MyPath & "*.xlsx", vbNormal)


'If no files were found, exit the sub
If Len(MyFile) = 0 Then
MsgBox "Nincs meg a fájl...", vbExclamation
Exit Sub

End If


'Loop through each Excel file in the folder
Do While Len(MyFile) > 0

'Assign the date/time of the current file to a variable
LMD = FileDateTime(MyPath & MyFile)

'If the date/time of the current file is greater than the latest
'recorded date, assign its filename and date/time to variables
If LMD > LatestDate Then
LatestFile = MyFile
LatestDate = LMD
End If



'Get the next Excel file from the folder
MyFile = Dir

Loop

'Open the latest file
Workbooks.Open MyPath & LatestFile


End Sub
Mutasd a teljes hozzászólást!

  • Szia!

    Megmutatnád az Fkeres függvényes makrót is? Vagy az képletekkel van megoldva?
    Az Fkeres képes külső hivatkozásokat is kezelni. Ha képlet, akkor pl. egy cellába beírod a fájl nevét, az Fkeres-ben pedig Indirekttel használod.
    Ha makró, akkor rendelj az új fájlhoz-munkalaphoz egy objektum változót és azt használd a Vlookup paraméterének meghatározásakor.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia Fferi!

    Sajnos pont ez a része nem megy nekem. Az előző makró ugye megtalálja a legfrisebb fájlt és meg van a fájl neve is ( MyPath & LatestFile). A hogyan továbbra lenne szükségem, hogy egy Vlookup függvény ebben a fájlban hajtson végre egy keresést a B:AG táblában, és a 32-es sor értékét adja eredményül. Sokat próbálkoztam de mindig hibára futottam. Biztos rosszul határozom meg a változókat.
    Mutasd a teljes hozzászólást!
  • Szia!

    Van rá lehetőség, hogy a fájlban keress:

    How to use VLOOKUP from another workbook in Excel


    Now, we want to retrieve information of certain products from this list using VLOOKUP formula. The best way is to enter VLOOKUP formula normally and while entering table_array argument reference the external workbook and select the range of cells of the table. In this example, we want to retrieve the price of certain products out of this products list in a separate file or workbook, say Book2 here. We will use the following formula to VLOOKUP from another workbook:

    =VLOOKUP(C4,[Products.xlsx]Sheet1!B$2:G$10,6,FALSE)




    A vba kód elejére tegyél option explicit-sort, minden modul, stb. -be. Ez segít. A másik, hogy mielőtt meghívod a vookup függvényt csinálj egy olyan tesztet, ami a fentihez hasonló, 'Kézzel' helyben megadott adatokkal működik. Ha az ok, akkor majd helyettesítsd egyenként a saját változóiddal! Minden egyes változás után tesztelj.
    Mutasd a teljes hozzászólást!
  • Szia!
    Mivel minden megnyitott fájlnak egyedi és új neve lesz, célszerű változóba tenni.
    Megnyitás előtt pedig az cél munkalapot is változóba tesszük.

    dim sh1 as worksheet set sh1=activesheet 'az aktuális munkalap, ahova a függvény értéke kerül 'Ezután jön a megnyitás. 'Open the latest file Workbooks.Open MyPath & LatestFile dim sh2 as worksheet set sh2 =activesheet 'megnyitás után a nyitott fájl aktív, a záráskori aktív munkalappal 'ezután jöhet a vlookup függvény dim eredm eredm =Application.Vlookup(sh1.range("A1"),sh2.range("B1:AG1000"),32,0) (Persze a 32-sor helyett a 32. oszlopát akartad írni gondolom) 'Ha képletet szeretnél írni egy cellába a cél munkafüzetben, akkor sh1.activate Range("B1").Formula="=Vlookup(A1," & sh2.range("B1:AG1000").Address(external:=true) & ",32,0)" Ekkor a B1 cellában keletkezik az eredmény.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Ez syntax errort hozott. Sajnos nem látom át a hiba okát, miért nem működik az Fkeres


    Sub teszt()
    '
    '
    '

    '
    'Declare the variables
    Dim MyPath As String
    Dim MyFile As String
    Dim LatestFile As String
    Dim LatestDate As Date
    Dim LMD As Date
    Dim MySheet As String
    Dim MyArg As String



    'Specify the path to the folder
    MyPath = "L:\LOGISTIC\CSCO ShipLog\Összevágott ShipLog\2019"

    'Make sure that the path ends in a backslash
    If Right(MyPath, 1) <> "" Then MyPath = MyPath & ""

    'Get the first Excel file from the folder
    MyFile = Dir(MyPath & "*.xlsx", vbNormal)

    MySheet = "Munka1'!$B:$AG"

    MyArg = "'" & MyPath & "[" & MyFile & "]" & MySheet

    'If no files were found, exit the sub
    If Len(MyFile) = 0 Then
    MsgBox "Nincs meg a fájl...", vbExclamation
    Exit Sub

    End If


    'Loop through each Excel file in the folder
    Do While Len(MyFile) > 0

    'Assign the date/time of the current file to a variable
    LMD = FileDateTime(MyPath & MyFile)

    'If the date/time of the current file is greater than the latest
    'recorded date, assign its filename and date/time to variables
    If LMD > LatestDate Then
    LatestFile = MyFile
    LatestDate = LMD
    End If



    'Get the next Excel file from the folder
    MyFile = Dir

    Loop

    worksheetfunction.VLookup(cells(2,7),MyArg,32,False)
    Range("N16").Select


    End Sub
    Mutasd a teljes hozzászólást!
  • Szia!

    worksheetfunction.VLookup(cells(2,7),MyArg,32,False)

    Ez a sor nem állhat így magában.
    Ahogy már korábban írtam, vagy egy változó értékének kell adnod, vagy egy cellába képletként kell beírnod a keresést.
    Másrészt a MyArg változód sem az aktuális, megtalált fájl nevét tartalmazza, hiszen még a keresés előtt összeállítottad. 
    Légy szíves használd a forráskód gombot - balról a harmadik:  </> - mert úgy tekinthető át a kódod. 
    Üdv.
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítségeteket!

    Ez így sajna nem fog menni, majd egy tanfolyam elvégzése után visszatérek erre a kérdésre :)
    Mutasd a teljes hozzászólást!
  • Szia!

    Ha minden kötél szakad, én azt mondom, hogy tedd be a fájlod munkalapját/munkalapjait a most használt fájlodba, a 2. fájlt meg nyugodtan nyisd meg akár manuálisan (tehát legyen bezárva).
    Lehet hülyeség, de ha már minden szakad még jó lehet...

    dim myfilename as variant
    myfilename = application.getopenfilename
    msgbox "válaszd ki a fájlt" 'ez csak értesítést ír ki, amit le lehet okézni, bármire átírható/kivehető
    workbooks.open(myfilename)

    'innen a másik munkalapban kezd el dolgozni

    Sheets("Munkalap neve").Select
    Cells.Select
    Selection.Copy
    'térjünk vissza
    Activewindow.Activateprevious
    Sheets(1).Select 'az a munkalap, vagy jelen esetben munkalap "indexe", ami után majd bedobjon egy üres munkalapot
    Sheets.Add After:=ActiveSheet 'ez így a kiválasztott lap után dobja be a munkalapot
    Sheets(2).Select 'új munkalap kiválasztása; valszeg fölösleges, de ha minden bugra fut, akkor próbáljuk így
    Sheets(2).Name = "valami_konkret"
    'És ide próbáljunk egy fkerest, de az oszlop végéig
    Range("A1").Select
    'értékként be A1 cellába
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    'át arra a munkalapra, ahol fkereseznél
    Sheets("Munkalap_neve").select
    Dim Endrow As Long
    Endrow = Range("A65000").End(xlUp).Row 'tetszőlegesen nagy tartomány; innen felfele halad, megkeresi, hol van az utolsó érték, eddig húzza majd az fkerest; ha a viszonyítás nem A oszlop, ezt írd át.
    'aztán jöhet az fkeres

    Range("fkeres_elso_cellaja").Formula = IDE csak makrórögzítővel nyomd be az első cellát, fix munkalapnévvel ezt később nem kell majd átírnod
    Range("fkeres_elso_cellaja").Select
    Range("fkeres_elso_cellaja").Copy
    Range(Cells(fkeres_elso_cellajanak_sorindexe, fkeres_oszlop indexe), Cells(Endrow, oszlop index)).PasteSpecial (xlPasteFormulas)

    Kevésbé automatikus, talán nem is a leggyorsabb módszer, de "látatlanul" én ezt próbálnám, ha tényleg csak ellenőrző szerepet töltene be a fájl.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd