Pagina 1 din 2

sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 10:50 am
de simion_vlaicu
Salut,

am si eu nevoie de un pic de ajutor pt ca nu reusesc sa ma descurc cu o mica problema pe care o am (mentionez ca sunt incepator in ale vba-ului).

Am creat un fisier("test vba.xlsm") care preia informatii dintr-un fisier extern, ales de utilizator, dar nu reusesc sa creez un sumif bzat pe fisierul ales de utilizator (a carui structura ramane mereu aceeasi)

Practic:

Cod: Selectaţi tot

Sub Macro4()

    Dim sursa As String

    sursa = Application.GetOpenFilename
    If sFileName = "False" Then Exit Sub
    
    Workbooks.Open Filename:=sursa, ReadOnly:= _
        True
    Windows("test vba.xlsm").Activate
        
    Sheets("Sheet1").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=SUMIF('[" & sursa & "]Sheet1'!C2,1965,'[" & sursa & "]Sheet1'!C5)"

    
End Sub
Ma poate ajuta cineva?

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 11:54 am
de IPP
Buna ziua

Poate atasarea unui fisier (cu date fictive dar relevante ca structura) ar ajuta mai mult in intelegerea si primirea unei solutii. Asa nu pot decat sa remarc urmatoarele:

Daca nu s-a schimbat ceva in sintaxa functiei SUMIF odata cu Excel 2007 (versiune pe care nu o folosesc), aceasta ar trebui sa aiba urmatoarea structura: domeniul de celule (=range) in care exista criteriul; criteriul (scris intre ghilimele sau dat sub forma de referinta dupa care trebuie facuta insumarea); domeniul de celule (egal ca lungime cu precedentul) care contine valorile ce trebuie insumate.

Eu unul nu reusesc sa gasesc aceste elemente prezente, in mod coerent, in codul dvs.
Fara a fi o solutie propriu-zisa (nu am elemente suficiente), ati putea studia cam cum ar trebui sa arate inserata o functie sumif:

Cod: Selectaţi tot

=SUMIF('[New Microsoft Excel Worksheet.xls]Sheet1'!$B$2:$B$12;'[New Microsoft Excel Worksheet.xls]Sheet1'!$B$2;'[New Microsoft Excel Worksheet.xls]Sheet1'!$C$2:$C$12)
in care ...$B$2:$B$12 reprezinta domeniul de celule in care exista criteriul
...$b$2 reprezinta celula care adaposteste criteriul
...$C$2:$C$12 reprezinta domeniul de celule in care se afla valorile

IP

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 12:04 pm
de simion_vlaicu
:D cred ca nu am reusit sa ma fac inteles. Eu nu stiu initial ce fisier va deschide utilizatorul. In prima parte a codului definesc fisierul "sursa" ce trebuie sa fie ales de utilizator. Acest poate fii oriunde (local / retea) si poate avea orice nume, doar structura lui (nume sheet-uri, coloane, etc) sunt identice in acest gen de fisier.
Ceea ce incerc sa descoper este, printre altele, cum pot face un sumif in fisierul in care lucrez (denumit "test vba.xlsm") pe baza unor criterii stabilite si pe baza range-urilor preluate din fisierul "sursa" (cel ales de utilizator). Adica, indiferent ce fisier va deschide utilizatorul cu ajutorul macro-ului sa faca sumif din fisierul respectiv, foaia sheet1, uitandu-se pt criterii pe coloana A:A si adunand coloana C:C.

am mai incercat si ceva de genul

Cod: Selectaţi tot

]
Sub Macro4()

    Dim sursa As String

    sursa = Application.GetOpenFilename
    If sFileName = "False" Then Exit Sub
    
    Workbooks.Open Filename:=sursa, ReadOnly:= _
        True
       
    Set aria1 = Workbooks("sursa").Sheets("Sheet1").Range("a:a")
    Set aria2 = Workbooks("sursa").Sheets("Sheet1").Range("c:c")
       
    Windows("test vba.xlsm").Activate
    Sheets("Sheet1").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = WorksheetFunction.SumIf(aria1, "1965", aria2)

    
End Sub



dar tot fara reusita.

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:01 pm
de gecs
Incearca procedura de mai jos:

Cod: Selectaţi tot

Sub SumifColoanaFisierExtern()
    Dim NumeFisier As Variant
    Dim AcestFisier, AltFisier As String
    AcestFisier = ThisWorkbook.Name
    On Error GoTo 100
    Application.ScreenUpdating = False
    NumeFisier = Application.GetOpenFilename
    If TypeName(NumeFisier) = "Boolean" Then Exit Sub
    Workbooks.Open Filename:=NumeFisier
    AltFisier = ActiveWorkbook.Name
    Windows(AcestFisier).Activate
    Sheets("Sheet1").Select
    Range("A1").FormulaLocal = "=SUMIF([" & AltFisier & "]Sheet1!A:A,1965," & "[" & AltFisier & "]Sheet1!C:C)"
    Application.ScreenUpdating = True
Exit Sub
100:
    MsgBox "Eroare " & Err.Number
    Select Case Err.Number
        Case 1004
            Resume Next
    End Select
End Sub
Linia cu MsgBox-ul de dupa linia 100 va semnala ce erori pot aparea in afara de eroarea 1004 (fisierul e deja deschis) si poate fi comentata dupa ce in urma testelor te-ai convins ca procedura functioneaza cum trebuie.

Atata vreme cat fisierul la care face referire o formula din alt fisier e deschis, formula nu trebuie sa includa decat numele fisierului sub care e deschis in Excel, nu si calea. La inchiderea fisierului respectiv Excel-ul inlocuieste referinta care cuprinde doar numele fisierului cu o referinta care cuprinde si calea catre fisierul respectiv si include si denumirea respectiva intre apostrofuri.

Mai vezi si care e diferenta dintre proprietatile "FormulaLocal" si "FormulaR1C1" ale unui range si in general ce inseamna o referinta de tip A1 si una de tip R1C1.

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:12 pm
de simion_vlaicu
multumesc pentru raspuns, insa am o prima eroare care din ce mi-am dat seama apare la fisierele a caror denumire este compusa din mai multe cuvinte separate cu spatiu (Ex:"balanta decembrie 2009.xls").
dupa ce redenumesc fisierele respective procedura merge ok.

cum pot scapa de acest inconvenient? poate sa declar altfel variabilele "Dim AcestFisier, AltFisier As String"?

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:16 pm
de Dr.Windows
Incearca sa modifici linia asta:

Cod: Selectaţi tot

Range("A1").FormulaLocal = "=SUMIF([" & AltFisier & "]Sheet1!A:A,1965," & "[" & AltFisier & "]Sheet1!C:C)"
cu asta:

Cod: Selectaţi tot

Range("A1").FormulaLocal = "=SUMIF(['" & AltFisier & "']Sheet1!A:A,1965," & "['" & AltFisier & "']Sheet1!C:C)"
(au mai aparut niste ghilimele simple dupa si inaintea parentezelor "drepte"...)

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:19 pm
de gecs
Corect, uitasem ca numele de fisier pot contine si spatii :D
Multumesc Lucian!

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:26 pm
de simion_vlaicu
mda, din pacate tot nu merge, chiar si cu corectia respectiva
teoretic, solutia asta doar concateneaza niste siruri de caractere?

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:28 pm
de gecs
Mai exact, ce nu merge?

Re: sumif bazat pe un fisier modificabil

Scris: Mar Mai 25, 2010 3:30 pm
de simion_vlaicu
pai dupa ce am modificat conform mesajului lui lucian, primesc acel mesaj cu "1004", in conditiile in care nu am deschise decat fisierul curent in care am vba-ul