Munka faylami_vba
Nyitása és zárása egy fájlt
Beszéljétek az utasításokat kapcsolódó fájl megnyitásával I / O műveletek, valamint a lezárás befejezésekor a munka vele.
Nyílt végrehajtását teszi lehetővé az I / O műveletek a fájlt. szintaxis:
Nyílt út a mód [elérheti az Access] [Lock] A [#] FileNumber [Len = length]
Path - egy string kifejezés, amely megadja a fájl nevét
- Beállítja az üzemmódban a fájlt. Az érvényes értékek: hozzáfűzése, Binary, bemeneti, kimeneti, vagy a Random
Access - állapítja meg a működési engedélyt a fájl megnyitásakor. Az érvényes értékek: olvasás, írás, vagy olvassa el írása
Lock - állítja a művelet megengedett megnyitni egy fájlt más folyamatokat. Az érvényes értékek:
Közös, Lock Read, Write Lock and Lock Read Write és sorszámokkal - lehetséges ügyszám. A számot 1 és 255 Megjegyezzük, hogy a szám a paraméter fájl előzi meg a # jelet. FileNumber értéket nem lehet módosítani, amíg a fájl megnyitásakor. De a következő alkalommal, amikor megnyitja a fájlt több fájl lehet egy másik szám hossza - szám kisebb vagy egyenlő, mint 32.767 (bájt). Tudja megnyitni a
Random mód, ez az érték a rekord hosszát. Fájlokhoz szekvenciális hozzáférés, ez az érték az a szám, pufferelt karaktereket tartalmazó kézikönyv megnyitásához is fontos tudni, hogy futás közben a VBA is fenntartja a fájl buffer, hogy gyorsítsák fel a folyamatot a felvétel és az olvasás (közvetlen írásos le az adatokat a lemezen is jelentősen lelassítja a programok végrehajtását, amelyek különösen a nagy méretű fájlok). A legnagyobb számú fájlpuffer meg a Config.sys fájlrendszer
Bezárás végződik I / O műveletek a fájlmegnyitási keresztül nyitott oktatás. Ez az utasítás „törli a puffer, és azt mondja az operációs rendszer frissítésére a FAT (fájlallokációs tábla). Fontos, hogy minden fájlt a munka befejezésekor vele zárva volt, különben nem vezethet részleges adatvesztés.
Bezár [SpisokNomerovFaylov] SpisokNomerovFaylov érv lehet egy vagy több fájl számokat. Ez a következő szintaxist használja, ahol FileNumber bármilyen érvényes ügyszáma: [[#] FileNumber] [[#] FileNumber].
Reset Bezárja az összes aktív megnyitott fájlok egy manuális nyitott, így írja a fájl tartalmát puffer
Lemezre, kinyitotta a Megnyitás nyilatkozat
FreeFile függvény a rendelkezésre álló szám, amelyet fel lehet használni a kézi
Itt egy példa az utasítások megnyílik az írás a bináris fájlt a munkakönyvtárt első, majd az utasításokat, amely ezt a bináris fájlt.
Nyissa meg a „First” bináris Access Írj Mint # 1 # 1 bezár
Az adatok beviteléhez a szekvenciális hozzáférés fájl
Beszéljétek utasításokat beírásakor információk a szekvenciális fájlban.
Itt egy példa a beviteli # utasítások adatolvasás fájlból. Ez a példa azt feltételezi, hogy a lemez van egy csoport közgazdász, amely információkat tartalmaz a hallgatók. A fájl felhasználásával jött létre az utasításokat levelet # és két oszlopból áll, amelyek közül az első tartalmazza a nevét, és a második - értékelését a hallgató. A kényelem, az adatok automatikusan a felhasználó típusát diákok. Az eljárás például a beviteli sorban kiolvassa a családjára és értékelése a fájlt, és kiadja ezeket a cella az első és a második oszlop a munkalapon.
Név As String * 20
Értékelés As String * 3 End Type
Sub PrimerIspolzovaniyaInput () Dim Mivel diák diákok
A bemenet i = 1 12
Do While Not EOF (2) A hallgató
Input # 2. Név. értékelés
A sejteket (i, 1) .Value = .Familiya
A sejteket (i, 2) .Value = Befejezés .Otsenka
i = i + 1 hurok bezárása # 2
Itt egy példa segítségével Vonal bemenet # utasításokat olvasni az adatokat a gruppaEkonomistov fájlt, amelynek a szerkezete ugyanolyan, mint az előző példában, de megteremtette a Print # nyilatkozatot. Vonal bemenet # utasítás beolvassa az egész sort a fájlból egy string változó. Ezért ebben az esetben nincs szükség, hogy egy egyéni típusú bevezetett, és csak annyi, hogy korlátozzák a normális string változó. Minden információ olvasható soronként szerepel a listán, a dialógus
Private Sub UserForm_Initialize () Dim Student As String
Open "GruppaEkonomistov" For Input # 1
Tiszta Do While Not EOF (l) Line Input 11, Student
Addltem Student i = i + 1 hurok bezárása #l
Munka a fájl véletlen elérésű
Itt van egy I / O utasítás információt, ha dolgozik, a fájlt véletlenszerű hozzáférés, valamint utasításokat hosszának meghatározására, és a fájl kurzorpozícióját a fájlt.
Put ír a változó tartalmát a véletlen hozzáférésű fájl. szintaxis:
Tedd [#] FileNumber [NomerZapisi]. ImyaPeremennoy
FileNumber - fájl száma
NomerZapisi - rekord számú (Random mód) vagy byte szám (bináris módban), amellyel meg szeretné kezdeni a felvételt. Ha NomerZapisi elhagyható, rögzített a helyszínen, ahol azt állították mutatót, miután az utolsó nyilatkozatot Get vagy Tedd, vagy ahol ez a átszámítani
ImyaPeremennoy - a változó nevét tartalmazó adatokat egy fájlba
Get adatokat olvas egy nyitott fájlt egy változó random access. szintaxis:
Kap [#] FileNumber [NomerZapisi]. ImyaPeremennoy
FileNumber - fájl száma
NomerZapisi - rekord számú (a véletlenszerű módban fájlokat), illetve byte szám (bináris módban a fájl), ahonnan indul olvasási Imyaperemennoy - a változó nevét el szeretné helyezni az olvasott adatokat
Keressétek a függvény értéke típusú Long, amely meghatározza a jelenlegi helyzetben a kiolvasási mutató / felvétel belül létrehozott fájl a Megnyitás nyilatkozatot. szintaxis:
LOF függvény egy értéket típusú Long képviselő a fájl mérete bájtban kinyitotta a Megnyitás nyilatkozatot. Méretének meghatározására a zárt használandó fájl FileLen funkciót.
FileLen vissza egy hosszú, azzal a fájl mérete bájtban. szintaxis:
Ahogy az előző részben példát információ olvasása révén manuális bemeneti # A gruppaEkonomistov fájlok, soros elérés Néha kényelmes megad egy sorozatot rekordok (ebben az esetben a hallgatói Records), és úgy van kialakítva egy csoportja területeken, egyes feljegyzések (ebben az esetén a mezők neve és értékelés). Megjegyzendő, hogy ez a csoportosítás rekordok nem valami velejárója szekvenciális hozzáférés fájlokat. Ez az egyszerű megközelítés lehetővé teszi, hogy egyszerűsítse a folyamat szekvenciális olvasási rekordok. A szekvenciális hozzáférés fájl létezik csak egy belső szerkezet, amelyet szeparátorok (vesszővel vagy speciális karaktert jelölő új sor).
Ezzel szemben a szekvenciális hozzáférés fájlokat a véletlen hozzáférésű fájlok rögzítésére van ágyazva. elérésű fájl - egy fájlt, rendezve a bejegyzések, így gyorsan mozog minden rekordot, átadva az előzőt.
Amikor létrehoz egy fájlt véletlen hozzáférésű jelzi a maximális hosszát minden rekord. Magától értetődik, hogy minden rekord lehet a bevitt adatok nem foglalják el a helyet juttatott a rekordot, de nem tud belépni igényel az adatok több helyet, mint a megengedett hossza a felvételt. Extra információ egyszerűen vágva.
A gyakorlatban célszerű létrehozni egy külön fájlban, amely információkat tárol a szerkezet a véletlen elérésű fájl: rekord szerkezete, hossza, és a helyszíni címeket. Vegye figyelembe, hogy ha kinyitja elérésű fájl, szemben a szekvenciális hozzáférési fájl, nem kifejezetten jelzi, hogy nyitva van a bemeneti vagy kimeneti. A bemeneti és kimeneti adatok határozzák Put és a Get parancsokat.
Itt egy példa a műveletet egy véletlen elérésű fájl csoport közgazdászok, amelynek felépítése ugyanolyan, mint az előző példában. Fájl létre zapisvoayl eljárást egymás után beolvassa az adatokat az első és a második oszlop a munkalapot, és majd beadja azokat egy fájlba. Ebben az eljárásban a száma, bemeneti bejegyzés van rögzítve, és egyenlő 5. Az eljárás kiolvasására a fájlt az ellenkező hatást - olvassa az adatokat a fájlt, és beírja a sejtek a harmadik és negyedik oszlopa a munkalapon. Egy érdekes tulajdonsága véletlen elérésű fájl, hogy ha dolgozik vele, akkor meg a bejegyzések száma, nem számítva azokat. A bejegyzések száma egyenlő az arány a fájl mérete a hossza egy rekordot. A rekord hossza van beállítva, hogy hozza létre a fájlt és véletlenszerű hozzáférés típusa határozza meg a változó, amellyel a fájl létrehozásának, nyissa meg a fájl méretét adja vissza LOF funkció, de még nem
Open - működnek FileLen. Ebben az esetben a bejegyzések számát a fájlban egyenlő
Név As String * 20 Értékelés As String * 3 End Type
Filesearch objektum a funkcionalitást a párbeszédablak Megnyitás (Open), megjelenik ekrane_posredstvom választhat a Fájl, Megnyitás (File, Open). Filesearch objektum tartalmazza az objektum hierarchia és kérelem tartalmazza
Család FoundFiles, ami egy listát az összes fájlt, amelyek vissza a keresési eredményekben
Család PropertyTests, ami egy listát az összes keresési feltétel
Ábra. 13.1. A hierarchikus felépítése objektum filesearch
Filesearch objektum visszaadja az ingatlan filesearch objektum alkalmazás.
Filesearch objektum a következő két módszer.
Végrehajtás Search megadott fájlt. szintaxis:
Execute (céljából SortBy, sortorder, AlwaysAccurate)
Céljából SortBy - létrehozza a módszer válogatás fájlokat. Az érvényes értékek: msoSortbyFileName, msoSortbyFileType, msoSortbyLastModif vezetett és msoSortbySize
Sortorder - állítja a sorrend a fájlok.
Az érvényes értékek: msoSortOrderAscending és msoSort Order Csökkenő AiwaysAccurate - megengedett értékek: True (keresés és módosított
fájlok) és hamis (egyéb)
NewSearch állítja az alkalmazott kritériumokat az alapértelmezett keresési
Íme a leggyakrabban használt tulajdonságait filesearch objektumot.
A következő példa lehetővé teszi a listában a párbeszédablak felsorolni az összes fájlt az aktuális mappában:
Private Sub UserForm_Initialize () ComboBoxl.Clear A Application.FileSearch
FileName = "* .xls" .SearchSubFolders = False Ha .Execute (céljából SortBy: = msoSortByFileName, sortorder: = msoSortOrderAscending)> 0 Ekkor i = 1 az .FoundFiles.Count ComboBoxl.Addltem .FoundFiles (i)
End If End With End Sub
Előző program megjeleníti a területen a teljes listát a fájl nevét, t. E. A fájl nevét és elérési útját. Ahhoz, hogy megjelenjen csak a fájlnevek listája (nincs út), a program módosítani kell a következő módon:
Private Sub UserForm_Initialize () Dim DestName As String
Dim fájlnevet String Dim As Integer DlinaPuti
ComboBoxl.Clear DestName = CurDir DlinaPuti = Len (DestName) A Application.FileSearch .FileName = "* .xls"
Ha .Execute (céljából SortBy: = msoSortByFileName, sortorder: = msoSortOrderAscending)> 0 Ezután i = 1 A .FoundFiles.Count
FileName = Jobb (.FoundFiles (i), Len (.FqundFiles (i)) - DlinaPuti - 1) ComboBoxl.Addltem fájlnév
End If End With End Sub