sumif bazat pe un fisier modificabil

sumif bazat pe un fisier modificabil

Mesajde simion_vlaicu » Mar Mai 25, 2010 10:50 am

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?
simion_vlaicu
 
Mesaje: 12
Membru din: Mar Mai 25, 2010 10:42 am

Re: sumif bazat pe un fisier modificabil

Mesajde IPP » Mar Mai 25, 2010 11:54 am

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
IPP
Moderator
Moderator
 
Mesaje: 3630
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: sumif bazat pe un fisier modificabil

Mesajde simion_vlaicu » Mar Mai 25, 2010 12:04 pm

: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.
simion_vlaicu
 
Mesaje: 12
Membru din: Mar Mai 25, 2010 10:42 am

Re: sumif bazat pe un fisier modificabil

Mesajde gecs » Mar Mai 25, 2010 3:01 pm

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.
Avatar utilizator
gecs
Moderator
Moderator
 
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: sumif bazat pe un fisier modificabil

Mesajde simion_vlaicu » Mar Mai 25, 2010 3:12 pm

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"?
simion_vlaicu
 
Mesaje: 12
Membru din: Mar Mai 25, 2010 10:42 am

Re: sumif bazat pe un fisier modificabil

Mesajde Dr.Windows » Mar Mai 25, 2010 3:16 pm

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"...)
Dr.Windows
Site Admin
Site Admin
 
Mesaje: 4496
Membru din: Vin Iul 31, 2009 7:32 am

Re: sumif bazat pe un fisier modificabil

Mesajde gecs » Mar Mai 25, 2010 3:19 pm

Corect, uitasem ca numele de fisier pot contine si spatii :D
Multumesc Lucian!
Avatar utilizator
gecs
Moderator
Moderator
 
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: sumif bazat pe un fisier modificabil

Mesajde simion_vlaicu » Mar Mai 25, 2010 3:26 pm

mda, din pacate tot nu merge, chiar si cu corectia respectiva
teoretic, solutia asta doar concateneaza niste siruri de caractere?
simion_vlaicu
 
Mesaje: 12
Membru din: Mar Mai 25, 2010 10:42 am

Re: sumif bazat pe un fisier modificabil

Mesajde gecs » Mar Mai 25, 2010 3:28 pm

Mai exact, ce nu merge?
Avatar utilizator
gecs
Moderator
Moderator
 
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: sumif bazat pe un fisier modificabil

Mesajde simion_vlaicu » Mar Mai 25, 2010 3:30 pm

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
simion_vlaicu
 
Mesaje: 12
Membru din: Mar Mai 25, 2010 10:42 am

Următorul

Înapoi la Visual Basic for Application (VBA) cu Excel - Intrebari tehnice

Cine este conectat

Utilizatorii ce navighează pe acest forum: Google [Bot] şi 5 vizitatori

cron