Colectarea de date din fișierele excel din directorul specificat, macro-uri pentru excel

Această macrocomandă este concepută pentru a colecta (încărca) informații din fișiere Excel situate în același folder.

Pentru a lucra cu această macrocomandă, pe lângă aceasta, va trebui să adăugați în fișierul dvs.:







  1. pentru a obține lista fișierelor din dosar
  2. funcția GetFolder pentru a afișa caseta de dialog pentru selectarea unui dosar cu spațiul de stocare al directorului selectat
  3. bara de progres pentru afișarea procesului de procesare a fișierelor (modul și formă de clasă)

Dacă apare o eroare la testarea unei macrocomenzi care nu a găsit o funcție,
- verificați dacă toate fișierele necesare (enumerate mai sus) sunt adăugate în fișierul dvs.

Această macrocomandă publică în primul rând pentru mine (deoarece folosesc acest cod aproape în fiecare treime din programul meu),
așa că nu vă voi ajuta să creați această macrocomandă dacă nu lucrează dintr-o dată pentru dvs.

Macro la pornire afișează o casetă de dialog pentru selectarea folderului în care se află fișierele care urmează să fie procesate,
apoi deschide fiecare fișier, citește datele din el, îl pune în registrul de lucru curent (din care rulează macro-ul),
și închide fișierul procesat fără a salva modificările.

După ce fișierul următor este procesat, se trece la al doilea dosar ("arhiva").

Igor, salut!
Aș dori să clarific această chestiune.
În macro a făcut doar o singură modificare - în loc de 10 coloane indicat 40. Macro toate tras în sus și nu o dată. A fost necesar să închideți fișierul și să încercați din nou să strângeți, macro-ul funcționează, arată că totul este de succes și, ca urmare, datele nu sunt strânse.
Cu ce ​​poate fi conectat?

Serghei, orice poți dacă macrocomanda nu se schimbă puțin.
Pot să fac o comandă (plătită), - dacă această opțiune vă convine, scrieți la Skype sau poștă.

Igor, bună după-amiază!
O macrocomandă excelentă, dar eu sunt confruntat cu o problemă curioasă, este posibil să introduc datele nu așa cum sunt luate, ci în linie (am o coloană dintr-o gamă specifică în diferite cărți)?

Nu există nicio restricție privind startup-urile (codul este deschis, îl puteți vedea pe cont propriu)
Extindeți coloanele pe care nu le interferați, nu există restricții și protecții în fișierul atașat
În cazul în care să-l repara - nu voi prompt (suport tehnic pentru macro-uri gratuite nu este)
Dacă nu înțelegeți - pot face o comandă (valoarea minimă a comenzii este de 1500 de ruble)







Bună ziua. Mă uit la tine macro este proiectat pentru 3000 de porniri și apoi totul? Și al doilea punct, pentru a extinde coloanele mai mult decât J este deja plătit? sau unde pot să o corectez, văd că sunteți chemați de trupe în toate macrosurile care urmează.

Problema sa rezolvat, tocmai a trebuit să re-deschideți fișierul pentru a aplica modificările formatelor.

Într-o zi bună, ai putea să-mi spui de ce atunci când colectezi mai mult de 64.000 de linii, macro-ul nu mai introduce date?
cartea a fost salvată în format .xlsb
eroarea este următoarea:
pentru
shd.Range ("a" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (ra.Rows.Count, ra.Columns.Count) .Value
produce un mesaj: "Definiție definită de aplicație sau definită de obiect"

Faceți o comandă pe site, o vom face.

Bună ziua. Aici este sarcina mea, în Excel sunt un ceainic. Ajutați-l să rezolve problema. Esența următoarelor. Există un anumit număr de fișiere Excel într-un dosar, în fiecare zi este diferită (de la 100 la câteva mii), aveți nevoie de o concluzie numele fiecărui fișier în tabelul general, șirul de nume de fișier în coloana cu numărul de linie din fiecare Fale, cu excepția capacului, numărul total de integrare dorit faylov.I în cuvânt. Cum se atașează tabelele pentru un exemplu?

a atras codul de genul:

'Dacă (sh.Range ("c45") = 1) Apoi
'shd.Range ("f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .Value = Array (sh.Range ("e45"))
"End If" Instrucțiuni de utilizare - călătorii de afaceri

'Dacă (sh.Range ("c47") = 1) Apoi
'shd.Range ("f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .value = Array (sh.Range ( "E47"))
"Sfârșit dacă" Instrucțiuni de utilizare - contabilitatea costurilor

'Dacă (sh.Range ("c49") = 1) Apoi
'shd.Range ("f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .Value = Array (sh.Range ("e49"))
"End If" Instrucțiuni de utilizare - depunerea de fonduri

'Dacă (sh.Range ("c51") = 1) Apoi
'shd.Range ("f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .value = Array (sh.Range ( "E51"))
"End If" Instrucțiuni de utilizare - Altele

Totul funcționează bine, iar masa finală a valorii înregistrate corespunzătoare „e“ a coloanei în cazul în care coloana „cu“ numai o apariție a lui „1“. În caz contrar, dacă "1" este mai multe, atunci sunt adăugate rânduri suplimentare în tabel. Este posibil, atunci să corecteze că cel puțin mai multe apariții ale „1“ în coloana „c“ în tabelul sintetic datele înregistrate ale rândului corespunzător din coloana „e“ într-o singură celulă prin separator.

Alo
Mulțumesc pentru macro-ul minunat, ceea ce am nevoie, trebuie doar să reparăm câteva linii.
Setați ra = sh.Range (sh.Range ("n2330"), sh.Range ("n" sh.Rows.Count) .End (xlUp)) Redimensionare (, 1)

shd.Range ("a" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (ra.Rows.Count, ra.Columns.Count) .value = ra.Value

Nu am nevoie de o serie de date, dar să introduc 4-5 celule specifice într-o singură linie, nu-mi spuneți cum să schimb aceste linii?
Mulțumesc

În articol, nu este scris tot codul.
În atașamentul la articol, un fișier cu toate macrocomenzile necesare.
Deschideți acest fișier - și copiați de acolo toate codurile (modulul de clasă și formatul barei de progres)

Bună, Rafael.
Da, desigur, puteți.
Efectuați o comandă pe site, atașați fișierele de eșantion și descrieți în detaliu ce și cum ar trebui să funcționeze.

Bună ziua și puteți face o comandă pentru o macrocomandă. afișează 2 casete de dialog, astfel încât să puteți schimba parametrii, de exemplu, luați de la 1 sau 2 coli. și de la care celule să ia date







Trimiteți-le prietenilor: