希望Excel VBA能够引用打开的工作簿

时间:2016-09-28 12:13:41

标签: excel vba excel-vba macros

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

我试图在另一个工作簿中同时打开时显示另一个工作簿中的一个工作簿的结果,无论如何使用左功能或包含这样的工作,以便我可以打开2个报告的任意组合,他们将拉过与日期无关的东西?

public function handle(Request $request, Closure $next) {
  $response = $next($request);

  // 'Catch' our FormValidationException and redirect back.
  if (!empty($response->exception) && $response->exception instanceof FormValidationException) {
    return redirect()->back()->withErrors($response->exception->form->getErrors())->withInput();
  }

  return $response;
}

或者

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

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

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

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

有谁知道我该怎么做或更好地解决这个问题?

修改

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

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

1 个答案:

答案 0 :(得分:0)

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

下面的代码会询问文件的位置(使用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