【问题标题】:Would like Excel VBA to refer to open workbook starting with希望 Excel VBA 引用以开头的打开工作簿
【发布时间】:2016-09-28 12:13:40
【问题描述】:

我们处理多个报告,每次都以报告的名称开头并以相同的格式以日期结尾,例如“Example Report 28.09.16.xls”。

我试图在另一个工作簿中同时打开一个工作簿时显示结果,是否可以使用左函数或包含来完成这项工作,以便我可以打开 2 个报告的任意组合,它们将与日期无关的拉过来?

Windows("Example Report 28.09.16.xls").Activate

或者

=VLOOKUP(B1,'[Example Report 28.09.16.xls]Sheet1'!$B$1:$C$10,2,FALSE)

我希望这是一个宏,但公式版本也很好。

如上所述,我需要日期才能为其他任何内容,因为打开报告的人将同时打开相关报告。

目标是让在多个报告中引用的项目在一个报告中的该项目旁边显示每个报告的所有数据。

有谁知道我可以如何做到这一点或有什么更好的方法来解决这个问题?

编辑

我刚刚想到的另一个想法是,有没有办法通过使用“右”功能从当前打开的文件的文件名中提取日期,然后将其添加到我引用的静态报告名称中来拼凑要激活的窗口?如:

Dim ReportDate As String

ReportDate = Right(ThisWorkbook.FullName,12)

Dim ReportName As String

ReportName = "Example Report "

Windows( ReportName + ReportName ).Activate

【问题讨论】:

  • 查看正则表达式以对文件名执行必要的模式匹配。如果我以后有时间(并且没有其他人已经这样做了),我会为你整理一个更完整的答案

标签: vba excel macros


【解决方案1】:

您可以要求用户选择要打开的文件,或使用某种方式获取有效日期(可能是日历控件),然后在代码中使用对这些工作簿的引用。

下面的代码将询问文件的位置(使用GetFile1 函数)并打开它。然后它将在用户桌面 (GetFile) 上打开带有今天日期的文件 - 只需为不同的文件传递不同的日期。

然后它将从两个工作簿中的单元格 A1 中获取值,并将这些值放在包含代码的工作簿的单元格 A1:A2 中。

Public Sub Test()

    Dim wrkBk1 As Workbook
    Dim wrkBk2 As Workbook

    Set wrkBk1 = Workbooks.Open(GetFile1)
    Set wrkBk2 = Workbooks.Open(GetFile(Date))

    'ThisWorkbook is the file containing this code.
    With ThisWorkbook.Worksheets("Sheet1")
        .Cells(1, 1) = wrkBk1.Worksheets("Sheet1").Cells(1, 1) 'Get the value from A1 and place in A1.
        .Cells(2, 1) = wrkBk2.Worksheets("Sheet1").Cells(1, 1) 'Get the value from A1 and place in A2.
    End With

End Sub

Function GetFile1(Optional startFolder As Variant = -1) As Variant
    Dim fle As FileDialog
    Dim vItem As Variant
    Set fle = Application.FileDialog(msoFileDialogFilePicker)
    With fle
        .Title = "Select a File"
        .AllowMultiSelect = False
        .Filters.Add "Excel Files", "*.xls*", 1
        If startFolder = -1 Then
            .InitialFileName = Application.DefaultFilePath
        Else
            If Right(startFolder, 1) <> "\" Then
                .InitialFileName = startFolder & "\"
            Else
                .InitialFileName = startFolder
            End If
        End If
        If .Show <> -1 Then GoTo NextCode
        vItem = .SelectedItems(1)
    End With
NextCode:
    GetFile = vItem
    Set fle = Nothing
End Function


Function GetFile(dDate As Date) As Variant

    GetFile = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Example Report " & Format(dDate, "dd.mm.yyyy") & ".xls"

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多