VBA цикл по файлам без паттернов в папке (искать мнения) [РЕДАКТИРОВАТЬ] - PullRequest
0 голосов
/ 25 апреля 2018

Я здесь для того, чтобы получить любой совет или мнение, так как я хочу просмотреть все файлы Excel в папке.Как вы можете видеть из прикрепленного изображения, мои файлы Excel отличаются как по типам файлов (.xls <> .xlsx), так и по именам файлов (особенно в 2018 году).Мне также нужно просмотреть циклы «Пересмотренные» или «пересмотренные» файлы, поскольку, возможно, в следующий раз будет пересмотрен любой файл.

И да, я также провел некоторые исследования по этому вопросу.Насколько я понимаю, мне нужно изменить все имена файлов в шаблон, прежде чем создавать VBA для цикла.Сначала я подумал о том, чтобы разложить все имена файлов и вернуть их в форму шаблона, но это звучит слишком идеалистично.Другой способ - использовать дату в каждом файле для обозначения имени книги, но я снова обнаружил, что эти даты имеют разные стили.Некоторые файлы помечают дату, используя строку, например «Январь 2012» или «Март 2014», а другие используют форму даты, например «19/08/2013».

Поэтому я был бы признателен, если бы кто-нибудь мог предложить мне;

  1. Как я могу работать с разными именами файлов (.xls и .xlsx) в одном и том же VBA?
  2. Как мне поступить с этими разными именами файлов (некоторые файлы имеют «пересмотренные» сзади; у некоторых нет «-» между «Минусами» и датой; а некоторые используют название месяца вместо номера)?Это какой-то шаблон, который я пропускаю?

Обратите внимание, что я всего лишь новичок в VBA, так что было бы здорово, если бы вы оставили свои ответы с объяснениями или любыми примерами.

Большое спасибо.

--------------------------------------------------------[РЕДАКТИРОВАТЬ]-------------------------------------------------------------------

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

  1. Мои данные о потреблении стали, которые ежемесячно выдаются властями.Моя задача - собрать все эти данные (такие как производство, импорт, экспорт и потребление всех данных в каждой строке) и сгенерировать их в шаблон временных рядов (см. Прикрепленный экран Excel) xxx

  2. Возможно, что эти данные будут пересматриваться в любое время, поэтому я решаю загружать все эти файлы каждый раз в каждом месяце (один файл в месяц).В дополнение к этому пересмотренному файлу, орган неожиданно переименует этот файл, например, из «Cons 201601.xlsx» в «Cons 201601 - updated.xlsx)».Это затрудняет мне работу над этим (см. Прилагаемую папку для справки).enter image description here

  3. Более того, похоже, что у этого органа есть проблема с именованием файлов, поскольку в прошлом у них был другой шаблон имени файла по сравнению с нынешним.Пример приведен в таблице ниже;

    Cons 201701-Revised.xlsx 
    Cons 201710-Revised1.xlsx 
    Cons 201711.xlsx
    Cons-200902.xls 
    Cons-201212_revise.xls 
    Cons-201401-revised.xls
  4. Я упомянул имя файла выше, чтобы создать VBA для циклического просмотра этого файла, выбрать некоторый контент и вставить в другую книгу в хронологическом порядке.Это означает, что я не могу использовать «Loop while или Do while function» в моем VBA.Сначала я решил использовать две целочисленные переменные, обе из которых были установлены для годов и месяцев (например, For i = 2009 to 2018 и For j = 1 to 12), чтобы создать систему имен файлов (например, filename = "Cons" & "-" & i & j).Но, как я уже говорил ранее, авторитетные имена не позволили мне создать такой цикл.

  5. Я также пытался использовать дату в ячейке B2 на рисунке 1, чтобыпометьте дату, чтобы создать цикл, который я уже объяснил ранее.Однако, опять же, орган власти не использовал один и тот же шаблон для указания даты и месяца.После того, как я проверил много файлов, это пример стиля даты в ячейке B2

    January 2012 (string) 
    February 2009 (string) 
    Jan-16 (1/1/2016 date in custom format) 
  6. Учитывая приведенные выше ограничения, не могли бы вы, ребята, еще раз предложить мне любой возможный способ создания хронологического цикла, чтобыКак скопировать и вставить данные в другую рабочую книгу, чтобы сформировать набор данных временных рядов для каждого продукта?

Спасибо за вашу любезную помощь:)

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Во-первых, используйте FileSystemObject (включите ссылку на Microsoft Scripting Runtime в вашем проекте VBA), в котором есть несколько полезных функций. Вы всегда можете написать свой код, но зачем изобретать велосипед в этом случае?

Сегодня утром у меня нет времени что-то кодировать, поэтому вот псевдокод:

Open a Folder using your known filepath
Loop through all the files in the Folder (For each f in Folder.Files
    extract the date code from your filename (e.g. using RegEx)
    Add to a collection (e.g. array or Dictionary item) of the filename and the extracted date code (your key).
(end loop)
Sort your collection based on the extracted date code

Это теперь дает вам упорядоченный список файлов, которые вы можете открыть по очереди и извлечь данные. Дополнительным бонусом является то, что ключ в коллекции дает вам единообразное представление даты, которое вы можете использовать в качестве индекса в вашей собранной информации.

0 голосов
/ 25 апреля 2018

Если вы просто хотите просмотреть все файлы в папке, используйте это:

   dim file as variant
       file = Dir("<PathToFolder>")

        While (file <> "")
        'Your logic here
        file = Dir
        wend
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...