Help! Excel VBA

Discussion in 'Ajutor: Software și sisteme de operare' started by Marius '95, Nov 23, 2018.

  1. Marius '95

    Marius '95 Membru Senior Sugar daddy

    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.
     
  2. miahi

    miahi Wizzard Sugar daddy

    Păi nu ai inițializat array-ul - ori îi dai dimensiune, ori îi dai ReDim cu cât de mare vrei să fie.
     
  3. Marius '95

    Marius '95 Membru Senior Sugar daddy

    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?
     
  4. miahi

    miahi Wizzard Sugar daddy

    ReDim / ReDim Preserve.
     
  5. Marius '95

    Marius '95 Membru Senior Sugar daddy

    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?
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice