Скопировать имена файлов в файл назначения

Надеюсь, что у всех все хорошо.

Я пытаюсь скопировать/вставить имя файла в столбец A целевой книги. Ниже показано копирование данных из всех книг из папки и вставка их в мой мастер-файл.

Application.ScreenUpdating = False
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Dim LastRow As Long
    Const strPath As String = "folder of data files"
    ChDir strPath
    strExtension = Dir("*.csv*")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath & strExtension)
        With wkbSource
            LastRow = .Sheets("ADJUSTMENTS_EXTR").Cells.Find("Total", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
            .Sheets("ADJUSTMENTS_EXTR").Range("A10:V" & LastRow).Copy wkbDest.Sheets("Consolidated Data").Cells(Rows.Count, "B").End(xlUp).Offset(0, 0)
            .wkbDest.Range("A2" & LastRow) = wkbSource.Name
            **'.wkbDest.Sheets("Consolidated Data").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = wkbSource.Name**
            .Close savechanges:=False
        End With
        
        
        strExtension = Dir
    Loop
    Application.ScreenUpdating = True

В папке данных обычно находится 5-6 файлов. Цель состоит в том, чтобы при копировании данных мне также требовалось имя каждого файла в столбце A моего основного файла вместе с данными. ниже то, что я пробовал. К сожалению, не удалось заставить это работать. Заранее спасибо.

.wkbDest.Sheets("Consolidated Data").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = wkbSource.Name**

Эта строка является синтаксической ошибкой: у wkbSource нет свойства рабочей книги.

Balázs 26.07.2024 13:16

удалять . перед неделей недели

Vincent G 26.07.2024 13:17

когда я удаляю «.», возвращает объект, не поддерживающий ошибку свойства.

metalscuba 26.07.2024 13:26

Я не думаю, что можно использовать ChDir с Dir вот так..

CLR 26.07.2024 13:31

это работает, пока я не добавлю .wkbDest.Range("A2" & LastRow) = wkbSource.Name.

metalscuba 26.07.2024 17:57

Вы исправили ошибку, указанную в первом комментарии? .wkbDest.Range("A2" & LastRow) = wkbSource.Name должно быть wkbDest.Range("A2" & LastRow) = .Name

Tim Williams 26.07.2024 18:48

эй, Тим, wkbDest.Range("A2" & LastRow) = .Name также возвращает ошибку объекта.

metalscuba 27.07.2024 10:16

Вы не указали целевой лист, так что возможно wkbDest.Worksheets("Consolidated Data").Range("A" & LastRow) = .Name

Tim Williams 28.07.2024 00:57

Какие файлы вы ищете? Для поиска файлов CSV используйте более точный "*.csv". Кроме того, файлы CSV содержат только один лист, и вы не можете ссылаться на листы разных файлов CSV в одной папке, используя одно и то же имя (ADJUSTMENTS_EXTR). Обычно вы делаете это с индексом 1, т. е. wbkSource.Sheets(1). A2 предполагает, что заголовки уже заполнены на целевом листе. A10 предполагает, что первой строкой исходных данных является строка 10. В каком столбце находится Total? Вы уверены, что хотите скопировать строку итогов? Просьба уточнить.

VBasic2008 28.07.2024 09:07

Привет, Тим, не повезло с wkbDest.Worksheets("Консолидированные данные").Range("A" & LastRow) = .Name'

metalscuba 29.07.2024 14:17
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
10
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Копирование значений из закрытых файлов

Источники

Место назначения

Sub RetrieveData()
    
    Const PROC_TITLE As String = "Retrieve Data"
    
    ' Define constants.
    
    ' Source
    Const SRC_FOLDER_PATH As String = "C:\Test\"
    Const SRC_DIR_PATTERN As String = "*.csv"
    Const SRC_TOTALS_ROW_IDENTIFIER As String = "Total"
    Const SRC_TOTALS_ROW_OFFSET As Long = 1 ' 0 to copy totals row
    Const SRC_FIRST_ROW As Long = 10
    Const SRC_COLUMNS As String = "A:V"
    ' Destination
    Const DST_SHEET_NAME As String = "Consolidated Data"
    Const DST_FIRST_CELL_ADDRESS As String = "B2"
    Const DST_SOURCE_NAME_COLUMN As String = "A"
    
    Application.ScreenUpdating = False
    
    ' Reference the destination objects.
    
    Dim dwb As Workbook: Set dwb = ThisWorkbook
    Dim dws As Worksheet: Set dws = dwb.Sheets(DST_SHEET_NAME)
    Dim dcell As Range: Set dcell = dws.Range(DST_FIRST_CELL_ADDRESS)
    Dim ColumnsCount As Long: ColumnsCount = dws _
        .Columns(SRC_COLUMNS).Columns.Count
    Dim drrg As Range: Set drrg = dcell.Resize(, ColumnsCount)
    Dim dncell As Range: Set dncell = drrg.Cells(1) _
        .EntireRow.Columns(DST_SOURCE_NAME_COLUMN)
    
    ' Clear existing data.
    
    Dim drCount As Long: drCount = dws.Rows.Count - drrg.Row + 1
    drrg.Resize(drCount).ClearContents
    dncell.Resize(drCount).ClearContents
    
    ' Get the source first file name.
    
    Dim sFileName As String: sFileName = Dir(SRC_FOLDER_PATH & SRC_DIR_PATTERN)
    
    If Len(sFileName) = 0 Then
        MsgBox "No (""" & SRC_DIR_PATTERN & """) files found in """ _
            & SRC_FOLDER_PATH & """!", vbExclamation
        Exit Sub
    End If
    
    ' For each found file, copy...
    
    Dim swb As Workbook, sws As Worksheet, srg As Range, slCell As Range
    Dim sRowsCount As Long, dRowsCount As Long, swsCount As Long
    
    Do While Len(sFileName) > 0
        
        Set swb = Workbooks.Open(Filename:=SRC_FOLDER_PATH & sFileName, Local:=True)
        Set sws = swb.Sheets(1)
        Set slCell = sws.Cells.Find(What: = "Total", LookIn:=xlFormulas, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
        
        If Not slCell Is Nothing Then
            sRowsCount = slCell.Row - SRC_TOTALS_ROW_OFFSET - SRC_FIRST_ROW + 1
            If sRowsCount > 0 Then
                Set srg = sws.Rows(SRC_FIRST_ROW) _
                    .Resize(sRowsCount).Columns(SRC_COLUMNS)
                dncell.Offset(dRowsCount).Value = swb.Name ' write workbook name
                drrg.Offset(dRowsCount).Resize(sRowsCount).Value = srg.Value
                dRowsCount = dRowsCount + sRowsCount
                swsCount = swsCount + 1
            'Else ' no data found
            End If
        'Else ' totals row not identified
        End If
        
        swb.Close SaveChanges:=False
        
        sFileName = Dir ' next file
    Loop
    
    Application.ScreenUpdating = True

    ' Inform.
    
    MsgBox "Retrieved " & dRowsCount & " row" _
        & IIf(dRowsCount = 1, "", "s") & " of data from " _
        & swsCount & " file" & IIf(swsCount = 1, "", "s") & ".", _
        vbInformation, PROC_TITLE

End Sub

Привет, этот работает отлично. Спасибо за это. Хотя это намного выше моего уровня.

metalscuba 29.07.2024 14:20

Другие вопросы по теме