0

これが私が達成したいことです:

指定したディレクトリにある最近変更したExcelファイルの最初のシート全体の内容をコピーしたいと思います。次に、このコピー操作の値を現在のブックの最初のシートに貼り付けます。

ディレクトリ内の最後に変更されたファイルを取得するマクロがあることは知っていますが、これを実装するための迅速でクリーンな方法がわかりません。

4

2 に答える 2

6

下記参照。これにより、現在アクティブなブックが使用さC:\Your\Pathれ、変更日が最新のExcelファイルが検索されます。次に、ファイルを開き、最初のシートからコンテンツをコピーして、元のブック(最初のシート)に貼り付けます。

Dim fso, fol, fil
Dim wkbSource As Workbook, wkbData As Workbook

Dim fileData As Date
Dim fileName As String, strExtension As String

Set wkbSource = ActiveWorkbook

Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder("C:\Your\Path")

fileData = DateSerial(1900, 1, 1)

    For Each fil In fol.Files

        strExtension = fso.GetExtensionName(fil.Path)
        If Left$(strExtension, 3) = "xls" Then

            If (fil.DateLastModified > fileData) Then
                fileData = fil.DateLastModified
                fileName = fil.Path
            End If

        End If

    Next fil

Set wkbData = Workbooks.Open(fileName, , True)

wkbData.Sheets(1).Cells.Copy 
wkbSource.Sheets(1).Range("A1").PasteSpecial Paste:=xlValues

Application.CutCopyMode = False

wkbData.Close

Set fso = Nothing
Set fol = Nothing
Set flc = Nothing
Set wkbData = Nothing
于 2012-12-19T14:51:28.773 に答える
3

私は昼食にこれ以上することは何もありませんでした-それでここに行きます。

それを発射するには、以下を使用します。getSheetFromA()

これを現在のファイルに入れます:

Dim most_recent_file(1, 2) As Variant
Sub getSheetFromA()

    ' STEP 1 - Delete first sheet in this workbook
    ' STEP 2 - Look through the folder and get the most recently modified file path
    ' STEP 3 - Copy the first sheet from that file to the start of this file


    ' STEP 1
    ' Delete the first sheet in the current file (named incase if deleting the wrong one..)
    delete_worksheet ("Sheet1")

    ' STEP 2
    ' Now look for the most recent file
    Dim folder As String
    folder = "C:\Documents and Settings\Chris\Desktop\foldername\"

    Call recurse_files(folder, "xls")

    ' STEP 3
    Dim most_recently_modified_sheet As String
    most_recently_modified_sheet = most_recent_file(1, 0)
    getSheet most_recently_modified_sheet, 1
End Sub

Sub getSheet(filename As String, sheetNr As Integer)
    ' Copy a sheet from an external sheet to this workbook and put it first in the workbook.
    Dim srcWorkbook As Workbook

    Set srcWorkbook = Application.Workbooks.Open(filename)
    srcWorkbook.Worksheets(sheetNr).Copy before:=ThisWorkbook.Sheets(1)

    srcWorkbook.Close
    Set srcWorkbook = Nothing
End Sub

Sub delete_worksheet(sheet_name)
    ' Delete a sheet (turn alerting off and on again to avoid prompts)
    Application.DisplayAlerts = False
    Sheets(sheet_name).Delete
    Application.DisplayAlerts = True
End Sub

Function recurse_files(working_directory, file_extension)
    With Application.FileSearch
        .LookIn = working_directory
        .SearchSubFolders = True
        .filename = "*." & file_extension
        .MatchTextExactly = True
        .FileType = msoFileTypeAllFiles

        If .Execute() > 0 Then
            number_of_files = .FoundFiles.Count
            For i = 1 To .FoundFiles.Count
                vFile = .FoundFiles(i)

                Dim temp_filename As String
                temp_filename = vFile

                ' the next bit works by seeing if the current file is newer than the one in the array, if it is, then replace the current file in the array.
                If (most_recent_file(1, 1) <> "") Then
                    If (FileLastModified(temp_filename) > most_recent_file(1, 1)) Then
                        most_recent_file(1, 0) = temp_filename
                        most_recent_file(1, 1) = FileLastModified(temp_filename)
                    End If
                Else
                    most_recent_file(1, 0) = temp_filename
                    most_recent_file(1, 1) = FileLastModified(temp_filename)
                End If
            Next i
        Else
            MsgBox "There were no files found."
        End If
    End With
End Function

Function FileLastModified(strFullFileName As String)
    ' Taken from: http://www.ozgrid.com/forum/showthread.php?t=27740
    Dim fs As Object, f As Object, s As String

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(strFullFileName)


    s = f.DateLastModified
    FileLastModified = s

    Set fs = Nothing: Set f = Nothing

End Function
于 2012-12-19T14:41:54.367 に答える