Faz um loop através da planilha mestre e filtra as linhas necessárias

2

Eu criei um script que desejo permitir que um usuário selecione um arquivo (Master File) e, se uma condição for atendida, eu quero copiar os dados para a pasta de trabalho do Excel (na qual o script é executado). abaixo mostra a ideia do que estou tentando fazer. Atualmente, a instrução if apenas verifica se A2 contém o valor 5. Eu quero verificar cada linha na coluna e não apenas a célula.

Sub copyData()
Dim FolderPath As String, Filepath As String, Filename As String

 FolderPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLS*),  
 *.XLS*", Title:="Select File To Be Opened")
 Dim numTest As Integer

Filename = Dir(FolderPath)

Dim lastrow As Long, lastcolumn As Long

Do While Filename <> ""

Workbooks.Open (FolderPath)
numTest = ActiveSheet.Range("A2").Value
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Copy
Application.DisplayAlerts = False
ActiveWorkbook.Close

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
MsgBox "Testing: " & ActiveSheet.Name & " " & Cells(2, 1).Value & " is >= 5"
If numTest >= 5 Then
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 1),   
Cells(erow, 10))
Else
MsgBox ("test1")
End If
Filename = Dir
Loop

End Sub

Eu também descobri como selecionar um intervalo para copiar:

    Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Copy

Como eu poderia mudar isso para que apenas colunas particulares sejam copiadas?

    
por Jeeb 27.07.2015 / 13:20

1 resposta

0

Você ainda tem um pequeno caminho a percorrer, mas não está tão ruim assim:)

Aqui estão algumas dicas para você que facilitarão a gravação do seu código:

  1. Armazena cada planilha como uma variável, o que torna mais fácil ver de qual folha você está pegando dados:

    Dim wbMaster As Workbook, wbCurrent As Workbook
    
    Set wbCurrent = ActiveWorkbook
    Set wbMaster = Workbooks.Open(FolderPath)
    
  2. Nomeie sua planilha no mestre para facilitar a consulta (no VB, pressione F4 para ver as propriedades da planilha):

    numTest = wbMaster.SHEETCODENAME.Range("RANGENAME").Value
    lastrow = wbMaster.Cells(Rows.Count, 1).End(xlUp).Row 
    lastcolumn = wbMaster.Cells(1, Columns.Count).End(xlToLeft).Column
    
  3. Será mais fácil para você se você tiver seus dados mestres armazenados como uma Tabela, pesquisar no Google e ver que as células e colunas ficam ainda mais fáceis de fazer referência.

  4. Faça uma colagem e copie de uma só vez (é melhor nunca selecionar intervalos durante a execução de uma macro

    wbMaster.SHEETCODENAME.Range("A:A").Copy _
        Destination:=wbCurrent.SHEETCODENAME.PasteSheet.Range("B:B")
    
  5. Verifique cada linha em um intervalo selecionado:

    Dim rw As Range
    
    For Each rw In wbMaster.SHEETCODENAME.Range("RANGENAME").Rows
        'Do something
    Next rg
    
por 30.07.2015 / 19:51