【问题标题】:Excel VBA Open xlsx File From Folder Without writing PathExcel VBA从文件夹中打开xlsx文件而不写入路径
【发布时间】:2018-04-20 21:43:00
【问题描述】:

我想打开 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)

【问题讨论】:

  • 您计算机上的文件在哪里?声明文件夹路径有什么问题,它应该是动态的吗?
  • 我希望它是动态的。并且文件夹名称不是英文的,我不能在代码中使用。 @Luuklag
  • @Luuklag 编辑后你明白我的意思吗?
  • 您的代码说文件名是*.xlsx,而不是特定的文件名。 myExtension 未声明,ThisWorkbook.Path 末尾不会有文件分隔符 - 它应该是 ThisWorkbook.Path & "\" & myExtension。不过,您仍然需要弄清楚它试图打开哪个文件 - *.xlsx 不是指单个文件。 MonthName 不在任何地方使用,也不需要 ScreenUpdatingEnableEvents
  • 不写路径”是什么意思。 ThisWorkbook.Path 是一个非常静态的路径 - 它是保存包含代码的工作簿的位置,因此您尝试打开的工作簿必须与原始文件位于同一文件夹中。

标签: vba excel


【解决方案1】:

这里有几个例子可能会有所帮助。

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

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

【讨论】:

  • 第二个子是我需要的,但不知何故,它说它找不到正确名称的文件,它是文件夹中唯一的 xlsx 文件
  • “抱歉,我们找不到“bla bla”。它可能被删除、重命名或删除了吗?”
  • 这两个文件是文件夹中唯一的一个,但它仍然显示一个按摩框,它在文件夹中找不到 xlsx 文件。
  • 对不起,那是我的错。出于某种原因,即使Dir 只返回工作簿名称而不返回路径,它也对我有用。当我在不同的文件夹中尝试它时,我遇到了与您相同的错误 - 我已更新代码以在打开文件时包含路径。
猜你喜欢
  • 2022-07-27
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2013-02-26
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多