Получение ошибки при вводе имени файла из папки после последнего заполненного столбца - PullRequest
0 голосов
/ 03 октября 2018

Предыдущий вопрос о синтаксисе был решен Скоттом для внесения имени файла в основную рабочую книгу.Слегка измененный новый вопрос

По сути, у меня есть сотни файлов в папке, и я копирую все данные из этих файлов в основную рабочую книгу на вкладки, где совпадают имена вкладок источника и назначения.Все работает нормально, кроме вставки имени файла рядом с скопированными данными, и проблема в том, что он заполняет только первую строку, потому что это пустая строка, которая, я думаю, из-за следующей строки:

lLastRow = wsDst.UsedRange.Rows(wsDst.UsedRange.Rows.Count).Row + 1 

Вот код.Я уверен, что есть простой способ сделать это

Sub ProjectMacro()
Dim wbDst As Workbook
Dim wsDst As Worksheet
Dim wbSrc As Workbook
Dim wsSrc As Worksheet
Dim MyPath As String
Dim strFilename As String
Dim lLastRow As Long
Dim lLastColumn As Long
Dim LC As Long
Dim s As Worksheet, t As String
Dim i As Long, K As Long
K = Sheets.Count


Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False


Set wbDst = ThisWorkbook
MyPath = "C:\Users\tomhardy\Desktop\787 files\"
strFilename = Dir(MyPath & "*.xls*", vbNormal)

Do While strFilename <> ""
'loop through each worksheet in the source file
For Each wsSrc In wbSrc.Worksheets
    'Find the corresponding worksheet in the destination with 
the same name as the source
  On Error Resume Next
Set wsDst = wbDst.Worksheets(wsSrc.Name)
    On Error GoTo 0
If wsDst.Name = wsSrc.Name Then
lLastRow = 
 wsDst.UsedRange.Rows(wsDst.UsedRange.Rows.Count).Row + 1    
 lLastColumn =wsDst.UsedRange.Columns(wsDst.UsedRange.Columns.Count).Column + 1
  wsSrc.UsedRange.Copy
 wsDst.Range("A" & lLastRow).PasteSpecial xlPasteValues
 wsDst.Cells(1,lLastColumn).Value = wbDst.FullName
 End If
 Application.CutCopyMode = False
Next wsSrc


wbSrc.Close False
strFilename = Dir()
Loop

Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
End Sub

1 Ответ

0 голосов
/ 03 октября 2018

Попробуйте:

wsDst.Cells(1,lLastColumn).Resize(wsSrc.UsedRange.Rows.Count,1).Value = wbDst.FullName

Сам код должен быть достаточно объяснительным относительно того, что он делает.

Или это, потому что я не на 100% уверен, что именно вы хотите.

wsDst.Range("A" & lLastRow).Resize(wsSrc.UsedRange.Rows.Count,1).Value = wbDst.FullName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...