Как открыть определенные папки Excel в файле с общим именем, используя VBA - PullRequest
2 голосов
/ 14 января 2011

Моя проблема заключается в том, что мне нужно открыть несколько файлов Excel с помощью VBA (для Excel 2007) и извлечь данные.Все файлы, которые я хочу открыть, называются «profit for January.xlsx», «profit for February.xlsx» и т. Д., При этом меняется только название месяца, поэтому я хочу открыть файл с именем «profit for *».,В папке есть еще один файл с именем «totalcome.xlsx», который я не хочу открывать.

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

У меня есть код для извлечения данных, который работает, но он либо импортирует все данные в папке, либо ничего вообще!

Любая помощь по этому вопросу будет принята с благодарностью, как и ястажер пытается проникнуть в дверь, и это будет для меня большим прорывом!

Дополнительная информация

Пока у меня есть код ниже (Я не включил дим, потому что я чувствовал, что они могут быть ненужными?), Который я взял с других веб-сайтов.Я также обнаружил, что, пытаясь открыть все файлы в папке, он пытается открыть сам!Если бы кто-нибудь мог предложить, как улучшить это, я был бы очень благодарен.Я не использую VBA очень долго, и считаю это назначение довольно сложным!

Окно с ошибкой, которое появляется иногда, говорит, что мне нужен «объект» для переменной sfilename, и яне уверен, как это сделать, не испортив другую часть кода.

sub import data ()

ChDir ThisWorkbook.Path

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set sfolder = objFSO.GetFolder(ThisWorkbook.Path)

    For Each sfilename In sfolder.Files

        If sfilename <> "Total Revenue.xlsx" Then

            Workbooks.Open Filename:= _
                sfilename                             *'open the file*

            Set sfilename = ActiveWorkbook   *'set the file name as sfilename, so the single piece of code will work with the copy-loop*

            b = Sheets.Count                                *'for the data-import loop*

            Call ImportData                                 *'call in the loop*
            sfilename.Close                                 *'close the file*

        End If

    Next

end sub

Ответы [ 2 ]

0 голосов
/ 14 января 2011

Пока у меня есть код ниже (я не включил дим, потому что я чувствовал, что они могут быть ненужными?), Который я взял с других веб-сайтов.Я также обнаружил, что, пытаясь открыть все файлы в папке, он пытается открыть сам!Если бы кто-нибудь мог предложить, как улучшить это, я был бы очень благодарен.Я не использую VBA очень долго, и считаю это назначение довольно сложным!

Окно с ошибкой, которое появляется иногда, говорит, что мне нужен «объект» для переменной sfilename, и яне уверен, как это сделать, не испортив другую часть кода.

Большое спасибо и наилучшие пожелания, Марк

sub import data ()

ChDir ThisWorkbook.Path

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set sfolder = objFSO.GetFolder(ThisWorkbook.Path)

For Each sfilename In sfolder.Files

    If sfilename <> "Total Revenue.xlsx" Then

        Workbooks.Open Filename:= _
            sfilename                             *'open the file*

        Set sfilename = ActiveWorkbook   *'set the file name as sfilename, so the single piece of code will work with the copy-loop*

        b = Sheets.Count                                *'for the data-import loop*

        Call ImportData                                 *'call in the loop*
        sfilename.Close                                 *'close the file*

    End If

Next

end sub

0 голосов
/ 14 января 2011

Что вы используете в данный момент? Для каждого файла в папке?

Возможности включают

  • FileSystemObject
  • Dir
  • Для i = от 1 до 12
    MONTHNAME (я)

EDIT

Sub import_data()

    sPath = ThisWorkbook.Path
    sTemplate = "\profit for qqq.xls"

    For i = 1 To 12
        sFileName = Replace(sTemplate, "qqq", MonthName(i))

        ''Just checking
        If Dir(sPath & sFileName) <> "" Then
            Workbooks.Open Filename:= _
                sPath & sFileName
                'open the file*

            Set sFileName = ActiveWorkbook
            'set the file name as sfilename, so the single
            'piece of code will work with the copy-loop*

            b = Sheets.Count
            '*'for the data-import loop*

            ''Call ImportData
            '*'call in the loop*
            sFileName.Close
            '*'close the file*
        End If
    Next

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...