Notifications
Clear all

Formatar planilhas de um ficheiro

3 Posts
2 Usuários
0 Reactions
1,218 Visualizações
(@outofmemry)
Posts: 9
Active Member
Topic starter
 

Bom dia, estou com um problema na minha macro e gostaria de saber se me podiam ajudar.

Estou a fazer uma macro em um ficheiro que aceda a uma planilha de outro ficheiro e a organize de forma descendente na coluna C. O código que tenho é o seguinte:

Sub Macro2()
    Dim xl As New Application
    Dim xlw As Workbook
    Dim xls As Worksheet
    
    a = ThisWorkbook.Path & "A.csv"
    On Error GoTo bm:
    Set xlw = xl.Workbooks.Open(a)
    Set xls = xlw.Sheets(1)
    
    
'    Windows(a).Activate
    a = xls.Name
    Columns("C:C").Select
    xlw.Worksheets(a).Sort.SortFields.Clear
    xlw.Worksheets(a).Sort.SortFields.Add Key:=Range("C2"), SortOn _
        :=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With xlw.Worksheets(a).Sort
        .SetRange Range("A2:K297594")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
bm:
    xlw.Saved = True
    xlw.Close True
    xl.Quit
    Set xls = Nothing
    Set xlw = Nothing
    Set xl = Nothing
End Sub

No entanto quando ele chega à intrução

.SetRange Range("A2:K297594")

ele dá "run-time error 5" e não consigo perceber o porque.
Alguém me consegue explicar como resolver ao o porque do erro?
Obrigado :)

 
Postado : 10/12/2015 10:31 am
(@suggos)
Posts: 111
Estimable Member
 

Olá. Eu não sei por que ocorre o erro, mas sugiro que você tente uma outra forma de classificar os dados.

Em vez de

    xlw.Worksheets(a).Sort.SortFields.Clear
    xlw.Worksheets(a).Sort.SortFields.Add Key:=Range("C2"), SortOn _
        :=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With xlw.Worksheets(a).Sort
        .SetRange Range("A2:K297594")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

tente

    xlw.Worksheets(a).Range("A2:K297594").Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlNo

Não se esqueça de marcar o tópico como resolvido se a resposta for satisfatória.

 
Postado : 11/12/2015 2:13 am
(@outofmemry)
Posts: 9
Active Member
Topic starter
 

Obrigado pela ajuda, embora continue sem ou pelo ordenar os dados (ou pelo menos se os ordena não grava bem) já não dá o erro que era o problema deste tópico.
No entanto penso que a questão de não ordenar possa ser pelo facto de o ficheiro que está a ser usado ser um csv.

 
Postado : 11/12/2015 4:18 am