Access VBA - XLSM fájlok feldolgozása táblába (fájlonként)

Access VBA - XLSM fájlok feldolgozása táblába (fájlonként)
2017-10-30T01:18:34+01:00
2017-11-09T18:20:52+01:00
2022-10-19T07:30:38+02:00
  • Találtam egy metódust, de ez pont a fordítottja a szükségesnekExcel VBA kód, ami Excel-ből Access-be exportálja az adatokat.
    Nekem Access VBA kellene, ami Excel-ből Access-be importálja az adatokat. (Soronként, mivel bizonyos mezőkhöz külön feltételeket kell megadnom.)
    Ugyanígy 2 mezős egyezésre van szükség - tehát 2 kulcs mezőt kell figyelnem - az Update-hez, egyéb esetben Új rekord.

    Merre érdemes elindulni?
    - csatolt tábla Excelből, majd többszintű SQL utasítások vagy az alábbihoz hasonló Recordset?
    (mivel csak az Excel 6. sorától kellenek az adatok, előtte más típusú/formátumú adatok vannak, a csatolás talán felejtős)
    - Access VBA-ból Excel Connection (ha létezik, és nem szükséges a CreateObject("Excel.Application") metódus), majd többszintű SQL utasítások vagy az alábbihoz hasonló Recordset?
    - ...

    Public Sub UpdatePriceList() Dim cn As ADODB.Connection, rs As ADODB.Recordset Dim sProduct As String, sVariety As String, cPrice As Variant ' connect to the Access database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _ "Data Source=C:\Users\Gord\Desktop\Database1.accdb;" ' open a recordset Set rs = New ADODB.Recordset rs.Open "PriceList", cn, adOpenKeyset, adLockOptimistic, adCmdTable Range("A2").Activate ' row 1 contains column headings Do While Not IsEmpty(ActiveCell) sProduct = ActiveCell.Value sVariety = ActiveCell.Offset(0, 1).Value cPrice = ActiveCell.Offset(0, 2).Value rs.Filter = "product='" & sProduct & "' AND variety='" & sVariety & "'" If rs.EOF Then Debug.Print "No existing record - adding new..." rs.Filter = "" rs.AddNew rs("product").Value = sProduct rs("variety").Value = sVariety Else Debug.Print "Existing record found..." End If rs("price").Value = cPrice rs.Update Debug.Print "...record update complete." ActiveCell.Offset(1, 0).Activate ' next cell down Loop rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub
    Excel munkalap a fenti sablon alapján:

    product variety price bacon regular 3.79 bacon premium 4.89 bacon deluxe 5.99
    Access tábla a fenti sablon alapján:
    product variety price bacon premium 4.99 bacon regular 3.99
    Közzétette:
    Gord Thompson
    VBA code to update / create new record from Excel to Access
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Adott egy Access adatbázis + egy fix mappában XLSM fájlok (azonos formátumúak, illetve mindig jönnek újak).
    A terv az volna, hogy gombnyomásra a következők megvalósuljanak:
    1. a mappában aktuálisan található XLSM fájlok fájlnevei átkerüljenek a Log táblába (FSO-ra gondoltam)
    (egyéb adatokkal/mezőkkel: munka azonosító - az adott adag fájl mindegyike mellett ugyanaz a munka azonosító jelenik meg, felhasználó, dátum/idő, státusz)
    2. LOOP-pal fájlonként minden fájl feldolgozása (nem sok fájl, viszont fájlonként kb. 4000 sor):
    - csak a 6. sortól vannak releváns adatok (ezért a csatolt táblás megoldás talán nem a legjobb megoldás - pl. egy dátum mező nem dátum formátumú lenne az első 5 sor szöveges adatai miatt, stb.)
    - a céltáblával való megfeleltetéshez 2 mezőt egyszerre kell vizsgálni (cím, előadó)
          - FRISSÍTÉS: ha a 2 mező a céltábában egy sorban szerepel, csak frissíteni kell a többi megadott mezőt az adott sorban az XLSM adott sora alapján
          - BŐVÍTÉS: ha a 2 mező a céltábában nem szerepel egy sorban, akkor új rekordként kell rögzíteni az adatokat
    - viszgálnom kell egy 3. mezőt, ami meghatározza, hogy melyik céltáblába dolgozzak (két céltábla van), illetve ennek az értéke módosítva kell bekerüljön a céltáblába

    Mit gondoltok, hogyan érdemes nekiállni (FSO?, recordset / csatolás?, 2 mezős megfeleltetés hogyan?)?
    - FSO-val fájlnevek LOG táblába?
    - majd innen feldolgozás fájlonként? (feldolg. után a Log tábla adott sorának Státusz mezője is töltendő)
    - feldolgozás Recordset-tel? (így a Recordset feltölthető lenne csak a fájlok 6. sorától, de nem tudom, a Recordset ~4000 soros XLSM-nél ajánlatos-e?
    - hogyan lehet kezelni a 2 mezős egyezést, illetve ennek fényében, hogy Frissítsen vagy Bővítsen?

    Nagyon hálás lennék a tanácsaitokért! Bármilyen egyszerű tanács sokat segítene!
    Ha megvan az irányvonal, onnantól talán már össze tudnám ollózni.

    Köszönöm!

    N
    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