两个用户提示在一个工作簿中打开两个文件

时间:2018-03-05 17:02:08

标签: excel vba excel-vba

基本上我需要在同一个工作簿中打开两个文件,这样我就可以对值进行一些计算。

我可以使用以下代码打开一个文件:

Sub sbVBA_To_Open_Workbook_FileDialog_xls_C()

    Dim strFileToOpen As String

    strFileToOpen = Application.GetOpenFilename _
        (Title:="Please select an Excel file to open", _
        FileFilter:="Excel Files *.xls (*.xls),")

    If strFileToOpen = False Then
        MsgBox "No file selected.", vbExclamation, "Sorry!"
        Exit Sub
    End If

    Workbooks.Open strFileToOpen

End Sub

我确实在网上找到了一些允许用户选择多个文件的代码,但是我的存储在不同的位置,因此更容易有两个提示框。

如果我可以将它们加载到单独的纸张中,这将有所帮助,例如Sheet1Sheet2

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

这将提示两个*.XLS*文件名并将它们打开

Option Explicit

    Sub sbVBA_To_Open_Workbook_FileDialog_xls_C()

        Dim strFile1 As String, strFile2 As String

        strFile1 = Application.GetOpenFilename("Excel Files *.xls* (*.xls*),", , "Choose Excel file #1")
        If strFile1 = "" Then GoTo userCancel

        strFile2 = Application.GetOpenFilename("Excel Files *.xls* (*.xls*),", , "Choose Excel file #2")
        If strFile2 = "" Then GoTo userCancel


        Workbooks.Open strFile1
        Workbooks.Open strFile2


    Exit Sub

userCancel:
        MsgBox "User cancelled.", vbExclamation, "Sorry!"

End Sub

它不会将它们组合成一个工作表,但是需要关于它的细节。即,他们是如何结合的?如果源工作簿中有超过1个工作表怎么办?

......但这两个可以并排存在

更多信息:

答案 1 :(得分:1)

条款,"工作簿"和"文件"是同义词。打开文件时,它将成为工作簿集合中的工作簿。如果打开多个工作簿,则可以使用以下代码显示其名称:

Private Sub ShowWorkbookNames()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        Debug.Print wb.Name
    Next wb
End Sub

因此,如果您在Excel中打开了两个不同的文件(Say," Invoices.xlsm"," Download.csv"),那么运行上面的代码将提供以下输出到立即窗口,可通过ctrl + G查看:

Invoices.xlsm
Download.csv

您不希望构建包含前两个工作簿中每个工作簿中的一个工作表的第三个工作簿,但这并不重要,因为您将能够以类似的方式访问这两个工作表当您在同一工作簿中访问两个工作表时。

Private Sub IdentifyWorksheetsInSeperateWorkbooks()
    'Workbook 1
    Dim wb1 As Workbook
    Dim ws1 As Worksheet
    Set wb1 = Application.Workbooks("Invoices.xlsm")
    Set ws1 = wb1.Sheets("Accounts")
    Debug.Print ws1.Name
    'Workbook 2
    Dim wb2 As Workbook
    Dim ws2 As Worksheet
    Set wb2 = Application.Workbooks("Download.csv")
    Set ws2 = wb2.Sheets(1)
    Debug.Print ws2.Name
End Sub

运行上面的代码将在即时窗口中创建以下输出。

Accounts
Sheet1

然后你可以做你通常用工作表ws1和ws2做的所有事情,并且完全忘记它们实际上是在不同的工作簿中。

答案 2 :(得分:0)

如果您需要打开两个以上的文件,这将循环打开对话框,直到您在对话框中选择取消或此X按钮为止。
打开后,您需要更多代码才能对文件执行任何操作。

Sub sbVBA_To_Open_Workbook_FileDialog_xls_C()

    Dim strFileToOpen As String
Do
    strFileToOpen = Application.GetOpenFilename _
        (Title:="Please select an Excel file to open", _
        FileFilter:="Excel Files *.xls* (*.xls*),")

    If strFileToOpen = "False" Then
        MsgBox "No file selected.", vbExclamation, "Sorry!"
        Exit Sub
    End If

    Workbooks.Open strFileToOpen
Loop
End Sub