Pergunta

Então, eu estava tentando criar uma lista de arquivos do excel em uma pasta (nome e caminho do arquivo) e, em seguida, use um loop For para copiar e colar uma folha de cálculo especificada para todos os arquivos listados em uma determinada planilha na pasta de trabalho do excel que contém a macro.Até agora tudo funciona, exceto pelo fato de que o mesmo arquivo mantém a ser copiados e colados sobre, em vez de todos os arquivos.Os ciclos de macro para o número correto de vezes, mas não usando todos os arquivos do excel.

Aqui está o código:

Primeira parte para listar os arquivos na pasta

Private Sub btn_LeaveReport()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer

'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
Set objFolder = objFSO.GetFolder("D:\Administration\Time Sheets")
i = 2
'loops through each file in the directory and prints their names and path
For Each objFile In objFolder.Files
    'print file name
    Cells(i + 1, 2) = objFile.Name
    'print file path
    Cells(i + 1, 3) = objFile.Path
    i = i + 1
Next objFile
End Sub

e esta é a parte para o ciclo

Private Sub btn_PullData()
'Declared Variables
Dim wbk As Workbook
Dim i As Integer
Dim StartAt As Integer
Dim EndAt As Integer
Dim CopyPath As String
Dim CopyPathRow As Integer
Dim iRow As Integer

'Ranges
StartAt = 1
EndAt = Val(ThisWorkbook.Worksheets("LeaveReport").Range("A1"))
CopyPathRow = 3
CopyPath = ThisWorkbook.Worksheets("LeaveReport").Range("C" & CopyPathRow)
iRow = 3

'Loop de loop
For i = StartAt To EndAt
    Application.ScreenUpdating = False
    Set wbk = Workbooks.Open(CopyPath)
    Sheets("TIMESHEET").Select
    Range("C12:S34").Select
    Selection.Copy

    ThisWorkbook.Activate
    Sheets("Pastebin").Select
    Range("a" & iRow).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False

    iRow = iRow + 39
    CopyPathRow = CopyPathRow + 1
    wbk.Close True
Next i

Sheets("Pastebin").Select
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Application.ScreenUpdating = True
MsgBox "Timesheet Data Imported"
End Sub

Com base na origem do erro, i.é.mesmo arquivo que está sendo usado, eu estou supondo que o problema está com a parte que tem esse:

CopyPath = Estelivro.Worksheets("LeaveReport").Range("C" & CopyPathRow)

e é "suposto" para atualizar no loop através deste:

CopyPathRow = CopyPathRow + 1

Foi útil?

Solução

Mover a linha

CopyPath = ThisWorkbook.Worksheets("LeaveReport").Range("C" & CopyPathRow)

Dentro do loop, o valor de CopyPath nunca é alterado, mas o valor de CopyPathRow é.

Editar:Eu não chamaria isso de recursão quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top