Help! Excel VBA

Marius '95

troubleShooter
Se da urmatorul cod:
Code:
Dim CobasExportPath As String
Dim ImportLine As String
Dim Head1() As String
Dim Head2() As String
Dim Head() As String
Dim OldIndex As String
Dim I As Integer

CobasExportPath = Application.GetOpenFilename(, , "Fisierul exportat de Cobas 6000", "Importa")
Open CobasExportPath For Input As #1
Line Input #1, ImportLine
Head1 = Split(ImportLine, ",")
Line Input #1, ImportLine
Head2 = Split(ImportLine, ",")
OldIndex = ""
For I = 0 To UBound(Head2)
    If Head1(I) = "" Then
        Head1(I) = OldIndex
    Else
        OldIndex = Head1(I)
    End If
    Debug.Print Head1(I)     'Printeaza "" (string gol)
    Debug.Print "|"     'Printeaza "|" (bara verticala)
    Debug.Print Head1(I) & "|"     'Printeaza "|" (bara verticala)
    Debug.Print Head1(I) & "|" & Head2(I)     'Printeaza "|RType_1" (bara verticala si ceva citit din fisier)
    Head(I) = Head1(I) & "|" & Head2(I)   'Da eroare: Subscript out of range
Next I

For I = 0 To UBound(Head)
    Debug.Print Head(I)
Next I
Ce fac gresit?

LE:
Am izolat-o la:
Code:
Dim Head1() As String
Head1(0) = "Tralala"     'Eroare: Subscript out of range
Mentionez ca este vorba despre Excel 2003.
 
Păi nu ai inițializat array-ul - ori îi dai dimensiune, ori îi dai ReDim cu cât de mare vrei să fie.
 
Nu am de unde sa stiu cat de mare o sa fie.

Am incercat:
Dim Head(LBound(Head2), UBound(Head2)) as String
Dar zice "Constant expression required".

LE: Hai ca i-am dat de cap. Am adaugat in Head1 deja existent in loc sa fac matrice noua.
Dar asa, pentru viitor, cum adaug valori la o matrice atunci cand nu stiu cate sunt de adaugat?
 
VBA = cel mai oribil limbaj intalnit pana azi. Pana si spaghetti code-ul de la HC90 iesea mai elegant.
</rant>

Se da un fisier CSV enorm exportat de un analizor idiot. Are cateva sute de coloane, spre 1000... Din acest fisier programul meu trebuie sa extrag niste date si sa generez pagini Excel cu ele, dupa un template (formular tipizat) care trebuie "umplut".

Ma confrunt cu urmatoarele probleme:
- Majoritatea calculatoarelor pe care va trebui sa ruleze au Win7+, dar nu M$ Office. Au o clona Excel fara VBA. Hai sa zicem ca ar fi relativ simplu ca utilizatorii sa gaseasca un PC cu Excel si VBA.
- 99.9% dintre utilizatorii finali n-au auzit de macro pana acum. Cred ca 50% nu stiu sa scrie nici macar o adunare in Excel.
- Utilizatorii n-au drepturi de admin.
- Exista retea, dar nu pot folosi un server de orice fel. (Sau ar fi extraordinar de greu sa conving admin-ul.)

Ce variante am? M-am gandit la:
1) Sa le zic tuturor sa imi trimita mie CSV-urile si sa generez eu toate documentele. Prevad discutii interminabile, modificari, ras-modificari, etc. Nu m-as baga.
2) Sa obtin datele cu un program stand-alone (.exe) sau VBScript. Fara SQL ar fi criminal de greu! Mai bine 1).
3) Am auzit ca windows-ul are un SQL propriu independent de Office? Jet...-ceva? L-as putea accesa/utiliza din VBScript? Sa zicem ca rezulta CSV-uri pentru fiecare pagina. Cum fac sa pun CSV-urile in formulare?
4) VBA in Excel care pre-proceseaza datele (altfel nu incap) si le pune intr-un tabel. Deschid tabelul ca sursa ODBC si scot datele cu SQL. Acelasi VBA umple foile cu date si salveaza rezultatul.
5) alta varianta?
 
Soluția mea ar fi 2) bazat pe ceva python sau java self-packed în exe + (dacă chiar ai nevoie) sqlite + biblioteci de csv și excel (extrem de mature pe java, un pic mai ciudate pe python dacă vrei chestii super complexe). Dai csv-ul, iese excel (presupun că mai multe excel-uri, dacă sunt așa de multe date că-ți trebuie SQL).

Restul...
1) doar dacă automatizezi ceva bazat pe e-mail sau altceva (dar altceva presupun că înseamnă un server ceea ce nu vrei. Oricum "te bagi" având în vedere că avem discuția asta :).
3) Jet e deprecated de ceva timp și nu e by default în OS-uri, trebuie să înstalezi chestii (admin rights) + distracții cu OLE and stuff
4) și de unde ai excel, că asta ziceai mai înainte că nu e.
 
Nu stiu Java. Python stiu, dar prea minimal ca sa ma bag la asemenea complicaciuni. Drept vorbind, nici cu VBA nu stau prea bine, dar e pe jumatate facut:
M-am apucat de 4). Aveam deja VBA-ul care pune datele selectionate in pagini Excel dupa template. Am de scris doar partea de selectionat date, care pana acum o faceam in PHP+SQL. Am facut ieri importul CSV-ului in Excel cu preselectia datelor. Acum ma chinui cu ODBC-ul.

LE:
Microshit bloody fucking piece of crap pls die now!
Nu merge.
Code:
ADOConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
=> File in use. Bine inteles ca in use; tocmai rulez VBA-ul din el!
 
Last edited:
Nu stiu daca mai e de actualitate, dar daca faci o pagina de web prin care sa incarce fisierul CSV si sa descarce Excel-ul rezultat nu e mai simplu? Pagina o pui pe orice calculator pe care poti pune un server de web minimal, un script in spate si o librarie de export in Excel, doar ca acel calculator trebuie sa fie pornit tot timpul cat utilizatorii respectivi au nevoie de procesarea respectiva.

Ce nu mergea in SQL + PHP?
 
Nu exista librarie de export in Excel si fisierul contine date medicale ale pacientilor. Daca ma prinde cineva, m-am ars.
 
PHPSpreadsheet? Nu e in SQL, dar e in "SQL + PHP". Stiu sigur ca functioneaza, eu personal nu am folosit-o dar un coleg o are in cateva aplicatii in productie.

Indiferent cum faci procesarea intri sub incidenta unor reglementari gen GDPR, care e diferenta intre uneltele folosite?
 
Că la firmă n-are mediu de dev/test/prod, probabil nici VPN ca să lucreze de acasă direct în producție, și la serviciu probabil n-are job de programator ca să poate să-și aloce mult timp să facă experimente :)
 
Pai acasa isi simuleaza date aleatoare in orice cantitate doreste, scrie ce are de scris, testeaza, o pune in productie la serviciu. E treaba de 1-2 ore, dar daca nu e programator atunci mai bine nu se baga, din experienta faci cuiva un bine si dupa aia te trezesti responsabil sa le oferi suport tehnic si actualizari pe viata, normal ca gratuit.
 
OK, ma dau batut, daca e vre-un insider joke nu m-am prins.
Marius este mai special de felul lui, face implementări de chestii pentru care nu-i tocmai calificat în jobul lui de zi cu zi care nu este de fapt în IT :D

Are și o pasiune pentru Windows 98 SE, pe care încă-l folosește, tunat de nici Bill Gates nu i-ar da de cap.

Dar nouă ne place și ținem la el așa cum este <3
 
Back
Top