Попытка использовать Excel VBA для объединения данных из нескольких электронных таблиц, но мой цикл продолжает сохранять ранее сохраненные данные - PullRequest
0 голосов
/ 05 октября 2018

Я нашел веб-сайт с макросом, который позволяет вам выполнить зацикленное действие для всех электронных таблиц в папке с файлами.Я использовал этот макрос в качестве основы для своего макроса ниже: См. Ссылку здесь

Я смог успешно использовать его для нескольких других проектов, но я сталкиваюсь снекоторые вопросы по моему текущему проекту.У меня есть несколько таблиц в папке с файлами, которые я пытаюсь открыть, скопировать данные, а затем вставить в основную таблицу.Цель состоит в том, чтобы поместить все данные из многих электронных таблиц в одну отдельную электронную таблицу.Список многих электронных таблиц в папке с файлами представляет собой динамический список, который со временем будет меняться.Поэтому я не могу просто по отдельности ссылаться на каждую электронную таблицу, поэтому я пытаюсь использовать стратегию зацикливания по ссылке выше.

Проблема, с которой я столкнулся, заключается в том, что некоторые вставки вставляются поверх предыдущей электронной таблицы.ценности.Таким образом, вместо вставки каждой электронной таблицы внизу значений предыдущего, некоторые вставляются в середину и перезаписывают нужную мне информацию.Я думаю, что моя проблема в том, что в Excel возникает путаница в отношении того, на какую электронную таблицу следует ссылаться, когда я попадаю в row.count, раздел кода копирования / вставки и переменные для i & j назначаются неправильно.Но я не могу понять, как это исправить.У меня нет идей, и я полностью разочарован!Извиняюсь, если я напортачу что-то довольно простое, но я довольно плохо знаком с VBA.

Sub CombineReports()

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim i As Integer
Dim j As Integer

'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

'Retrieve Target Folder Path From User
  myPath = "I:\Pricing\mt access\Tier Reports\Final Reports\"

'Target Path with Ending Extention
  myFile = Dir(myPath)

'Loop through each Excel file in folder
  Do While myFile <> ""
    'Set variable equal to opened workbook
    Set wb = Workbooks.Open(Filename:=myPath & myFile)

    'Ensure Workbook has opened before moving on to next line of code
    DoEvents

    'Worksheet tasks

    i = wb.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
    wb.Worksheets(1).Range("A5", "N" & i).Copy
    Workbooks.Open ("I:\Pricing\mt access\Tier Reports\Final Reports\Combined Report\CombinedTierReport.xlsx")
    j = Workbooks("CombinedTierReport.xlsx").Worksheets("AllStores").Range("B" & Rows.Count).End(xlUp).Row
    Workbooks("CombinedTierReport.xlsx").Worksheets("AllStores").Range("A" & j + 1, "N" & i).PasteSpecial xlPasteValues
    Workbooks("CombinedTierReport.xlsx").Save
    Workbooks("CombinedTierReport.xlsx").Close

    DoEvents

    'Save and Close Workbook
    Application.DisplayAlerts = False
    wb.Close SaveChanges:=False
    Application.DisplayAlerts = True
    'Ensure Workbook has closed before moving on to next line of code
      DoEvents

    'Get next file name
      myFile = Dir
        Loop

ResetSettings:
  'Reset Macro Optimization Settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub

1 Ответ

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

Измените Range("A" & j + 1, "N" & i) на Range("A" & j + 1).а) диапазон неправильный и б) вам нужна только верхняя левая ячейка вставки.

...
i = wb.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
wb.Worksheets(1).range("A5", "N" & i).Copy
with Workbooks.Open ("I:\Pricing\mt access\Tier Reports\Final Reports\Combined Report\CombinedTierReport.xlsx")
    j = .Worksheets("AllStores").Range("B" & Rows.Count).End(xlUp).Row
    .Worksheets("AllStores").Range("A" & j + 1).PasteSpecial xlPasteValues
    .Save
    .Close savechanges:=false
end with
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...