Atașarea și îndepărtarea diferitelor fișiere din cărți Excel, Excel macro-uri

S-ar părea, Excel nu permite acest lucru. (Și dacă îi permite să extragă fișiere atașate, fără lansarea out - este foarte problematică)
Cu toate acestea, folosind un macro, puteți pune în aplicare orice doriți (și salvați \ fișiere de extragere incluse)

Acum atașați registrul de lucru Excel pentru orice fișier, și apoi se extrage în orice dosar cu numele specificat, este posibil cu doar câteva linii de cod!

În articol atașat la un fișier din clasa 2 modul (AttachedFiles și AttachedFile). precum și exemple de utilizare a acestora sub formă de macro-uri care permit să gestioneze fișiere atașate într-un registru de lucru Excel.

Un exemplu de utilizare a modulelor de clasă funcționale pentru a salva un registru de lucru Excel în fișierul executabil, apoi se extrage:

Dacă doriți să atașați la un registru de lucru Excel este doar un singur fișier mic (de exemplu, miniatura sau pictograma)
Utilizați capacitatea de a salva fișiere într-un VBA-funcții

Luați în considerare proprietățile și metodele claselor utilizate pentru lucrul cu fișiere atașate disponibile.

clasa AttachedFiles vă permite să gestionați atașamente.

În AttachedFiles clasă există unele proprietăți care sunt disponibile pentru a citi și de a modifica:

Al doilea modul de clasa - AttachedFile - vă permite să lucrați cu un anumit fișier atașat.

  • SaveAs Metoda (Opțional ByVal filepath $) vă permite să preluați (salvați) fișier atașat de-a lungul unui anumit traseu filepath $.
    În cazul în care calea este $ filepath nu este specificat, macro produce un fișier Salvați caseta de dialog în care puteți specifica un dosar în care pentru a extrage fișierele și specificați numele fișierului pentru a crea.
  • Ștergeți metoda șterge definitiv încorporat într-un fișier Excel
  • Metoda Run - vă permite să rulați (deschis în program implicit) fișierul atașat.
    Pentru a face acest lucru, fișierul este extras automat în directorul temporar pentru Windows, și de acolo lansați fișierul creat.
  • Funcția IsCorrect returnează TRUE, în cazul în care dimensiunea zona de date fișier corespunde lungimii fișierului (care este stocat în fișierul prin adăugarea de carte Excel)
    În cazul în care o bucată de date pe o pagină ascunsă (în cazul în care sunt stocate fișierele atașate) suprascrise, funcția returnează FALSE, indicând faptul că încălcarea integrității fișierului.
    Atenție: verificarea este lent. deoarece în acest caz, realizate din foi de extragere a datelor (similar cu fișierele extrase pe disc). Și, în cazul în care atașamentele sunt mari (sute de kilobytes sau mai mult), apoi verificați fiecare fișier poate dura de la câteva secunde până la minute (pentru fișierele multi-megabyte)
  • Funcția FileSizeTXT returnează dimensiunea fișierului într-o formă accesibilă tkestovom. De exemplu, 129 kb, 3,4 kb, 12,7 MB

Proprietățile clasei AttachedFiles sunt numai pentru citire (deși schimbarea este posibilă, dar de dorit):

  • nume de fișier proprietate (ca șir) conține numele fișierului atașat cu extensia
  • proprietate AttachDate (ca dată) stochează data și ora de a adăuga un fișier la un registru de lucru Excel
  • FILESIZE (As Long) proprietatea returnează dimensiunea fișierului în octeți. Rezultatul este returnat sub formă de numere, spre deosebire de funcția FileSizeTXT de a emite o valoare de tip text.

Cum funcționează programul:

Declare public PtrSafe Funcția GetTickCount Lib "kernel32.dll" () atâta timp

„concatenare
lTime = GetTickCount
Pentru k = 1 La 10
sFlt = ""
Pentru lI = 1 Pentru MAX_STR_SIZE
sFlt = sFlt "*"
Următoarea lI „dă o medie de 374 ms
Următoarea k
Debug.Print GetTickCount - lTime „oferă o medie de 3760 ms - probleme. ;-(

Acesta este postul anterior.

Este tot la latitudinea ta.
Să nu fie parts nefondate două funcții transformare bloc (poate util)

Const public MAX_STR_SIZE = 65526
Const public MAX_BIN_SIZE = 32763

„Linii de conversie care conțin simboluri 16richnyh Valori în șir binar
„FĂRĂ concatenare string
„Dimensiunea maximă (lungime) sHexStr - MAX_STR_SIZE = 65526
„SHexStr - 16richnye valori cuprinde
Funcția fnHexStrToBinStr (ByVal sHexStr ca șir) Ca String
Dim SRET Ca String, lI Ca lung, STMP Ca String * 4, LSZ Ca pe termen lung

LSZ = Len (sHexStr) / 2: LSZ = llf (LSZ> MAX_BIN_SIZE, MAX_BIN_SIZE, LSZ)
SRET = String (LSZ, Cro (0))

Pentru lI = 1 Pentru LSZ
Mid (STMP, 3) = Mid (sHexStr, (lI - 1) * 2 + 1, 2)
Mid (SRET, lI, 1) = Cro (Val (STMP))
Următoarea lI

fnHexStrToBinStr = SRET
end Function

„Conversie String care conține un cod binar într-un caracter valori string 16richnyh
„FĂRĂ concatenare string
„Dimensiunea maximă (lungime) sBinStr - MAX_BIN_SIZE = 32763
„SBinStr - conține valori binare
Funcția fnBinStrToHexStr (ByVal sBinStr ca șir) Ca String
Dim SRET Ca String, lI Ca lung, iC Ca Integer, LSZ Atâta timp
Dim sHtmp Ca String, STMP ca șir * 2

LSZ = Len (sBinStr): LSZ = llf (LSZ> MAX_BIN_SIZE, MAX_BIN_SIZE, LSZ)
SRET = String (LSZ * 2, Cro (0))

Pentru lI = 1 La Len (sBinStr)
iC = Asc (Mid (sBinStr, lI, 1))
sHtmp = Hex (iC)
STMP = "00": Mid (STMP, 3 - Len (sHtmp)) = sHtmp
Mid (SRET, (lI - 1) * 2 + 1, 2) = STMP
Următoarea lI

fnBinStrToHexStr = SRET
end Function