VBA-Excel - AJUDA

Delpi10

Membro
Boas,estou com um problema,estou a estagiar na EDP, e o meu curso é Eng.electronica de computadores,e como podem imaginar não damos Visual Basic ,apenas C e assembly,e o problema é o
seguinte o meu orientador na empresa pediu me que cria-se uma macro que abri-se dois ficheiros um .dat e outro mhtml,e que copia-se certa informação dos mesmos,e depois que a coloca-se por ordem
do maior para o mais pequeno a depender da Coluna I. O problema e que cada ficheiro que vá importar tanto pode ter 1000 linhas como pode ter 25000 ,e sempre que importo novos dados fica todo
desformatado visto que coloquei anteriormente todo por ordem do maior ao mais pequeno,e as celulas assumem os valores antigos do genero a celula F18 deveria ter o seguinte valor "=SEG.TEXTO(Folha2!A2;8;18)",mas fica a ter
"=SEG.TEXTO(Folha2!A518;8;18)"... e o codigo que fiz em vba foi este :


Sub import()
Dim customerBook As Workbook
Dim filter As String
Dim i As Integer
Dim caption As String
Dim customerFilename As String
Dim customerWorkbook As Workbook
Dim targetWorkbook As Workbook

'Set regionSheet = Sheets("REGION SHEET")


'assume que este livre é o destino dos valores
Set targetWorkbook = Application.ActiveWorkbook

' procura o ficheiro donde se importa os dados
filter = "Text files (*.dat),(*.xlsx),*.dat,*.xlsx "

caption = "Por favor escolha o ficheiro a importar (.dat ou excel)"
customerFilename = Application.GetOpenFilename(filter, , caption)
If customerFilename = False Then
MsgBox ("Nenhum ficheiro selecionado!")
Else
If customerFilename = Null Then
MsgBox ("Nenhum ficheiro selecionado!")
Else
Set customerWorkbook = Application.Workbooks.Open(customerFilename)

' assume que a info a copiar começa na celula Ai ate Ni
' copia a info da fonte
Dim targetSheet As Worksheet
Dim targetSheet1 As Worksheet
Set targetSheet = targetWorkbook.Worksheets(2)
Set targetSheet1 = targetWorkbook.Worksheets(1)
Dim sourceSheet As Worksheet
Set sourceSheet = customerWorkbook.Worksheets(1)

i = Application.CountA(Range("A:A"))
targetSheet.Range("A1", "N25000").Value = sourceSheet.Range("A10", "N25000").Value
customerWorkbook.Close

' fecha o livro


targetSheet1.Range("F17").FormulaLocal = "=SEG.TEXTO(Folha2!A1;8;18)"
targetSheet1.Range("G17").Value = "=Folha2!G1*1"
targetSheet1.Range("H17").Value = "=Folha2!G1-Folha2!F1"
targetSheet1.Range("I17").Value = "=Folha2!D1*1"
targetSheet1.Range("J17").Value = "=Folha3!C1"
targetSheet1.Range("K17").Value = "=Folha3!D1"
targetSheet1.Range("L17").Value = "=Folha3!H1"
targetSheet1.Range("M17").Value = "=Folha3!G1"
targetSheet1.Range("N17").Value = "=Folha3!E1"
targetSheet1.Range("O17").Value = "=Folha3!J1"


Application.ScreenUpdating = currentUpdating

End If
End If
filter = "Text files (*.mhtml),*.mhtml"

caption = "Por favor escolha o ficheiro a importar MHTML"
customerFilename = Application.GetOpenFilename(filter, , caption)
If customerFilename = False Then
MsgBox ("Nenhum ficheiro selecionado!")
Else
If customerFilename = Null Then
MsgBox ("Nenhum ficheiro selecionado!")
Else
Set customerWorkbook = Application.Workbooks.Open(customerFilename)

' assume que a info a copiar começa na celula Ai ate Ni
' copia a info da fonte
Dim targetSheet2 As Worksheet
Set targetSheet2 = targetWorkbook.Worksheets(3)
Dim sourceSheet2 As Worksheet
Set sourceSheet2 = customerWorkbook.Worksheets(1)

targetSheet2.Range("A1", "N12500").Value = sourceSheet2.Range("A2", "N12500").Value

' fecha o livro
customerWorkbook.Close

Application.ScreenUpdating = currentUpdating
End If
End If

End Sub

-> Acredito que esteja muito confuso,mas eu nunca trabalhei com vba ,e agora queria vos pedir se conseguem dar umas dicas para resolver os seguintes problemas:
quando importar os dados de outros livros que copie de forma correcta que fique por exemplo,na celula F17 "=SEG.TEXTO(Folha2!A1;8;18)" e as restantes a partir desta por ordem
a F18"=SEG.TEXTO(Folha2!A2;8;18)" e dai em diante. E que no fim de copiar e colocar tudo por ordem ,que automaticamente ponha a ordenar tudo do maior para o mais pequeno a depender da coluna I.
Espero que tenha sido claro,caso não tenham percebido digam que eu tento me explicar melhor.
Obrigado.
 
Back
Topo