繁体   English   中英

Excel VBA从文件夹打开xlsx文件而不编写路径

[英]Excel VBA Open xlsx File From Folder Without writing Path

我想打开Excel xlsx文件而不使用变量编写路径。 我不知道为什么,但是它不起作用。 我有一个包含主要工作簿的文件夹,另一个我想打开的文件夹是xlsx。 我想将其命名为UnionWB。

  Private Sub cmdStartMonth_Click()
    'Optimize Macro Speed
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    'Analyze month by selecting
    Dim myPath As String
    Dim myFile As String
    Dim UnionWB As Workbook
    Dim MonthName As String
    MonthName = ListMonth.Value
    myExtension = "*.xlsx*"
    Set UnionWB = Workbooks.Open(ThisWorkbook.Path & myExtension)

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub

设置UnionWB = Workbooks.Open(ThisWorkbook.Path和myExtension)

这里有一些例子可能会有所帮助。

第一个会要求您选择正确的文件,然后打开它:

Public Sub Test()

    Dim sWrkbkPath As String
    Dim UnionWB As Workbook

    sWrkbkPath = GetFile(ThisWorkbook.Path)
    If sWrkbkPath <> "" Then
        Set UnionWB = Workbooks.Open(sWrkbkPath)
        MsgBox UnionWB.Name
    End If

End Sub

Function GetFile(Optional startFolder As Variant = -1) As Variant
    Dim fle As FileDialog
    Dim vItem As Variant
    Set fle = Application.FileDialog(msoFileDialogFilePicker)
    With fle
        .Title = "Select your Union Workbook"
        .AllowMultiSelect = False
        .Filters.Add "My Union Workbook", "*.xlsx", 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

第二种方法假定您在与ThisWorkbook相同的文件夹中只有一个xlsx文件,并打开找到的第一个文件:

Public Sub OpenOnlyXLSXInFolder()
    Dim sWrkbkPath As String
    Dim UnionWB As Workbook
    sWrkbkPath = Dir$(ThisWorkbook.Path & "\*.xlsx")

    'Only expecting a single file so no need to loop.
    If sWrkbkPath <> "" Then
        Set UnionWB = Workbooks.Open(ThisWorkbook.Path & "\" & sWrkbkPath)
        MsgBox UnionWB.Name
    End If

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM