VBA 关闭并重新打开后无法读取文件 excel

VBA unable to read files after closing and reopen excel

假设我在同一个文件夹中有 3 个文件(item.xlsx、master.xlsx、transfer.xlsm)主要目的是将数据从项目传输到母版。

我在 transfer.xlsm 中完成了所有代码,并允许用户输入文件名和列映射。我已经为代码做了几个小时,并且已经测试了几次并且工作得很好。通过单击按钮,可以根据列映射从 item.xlsx 读取数据并复制到 master.xlsx。

但是,当我关闭所有 3 个文件并再次重新打开时出现问题。我打开所有 3 个文件,当我单击传输按钮时,xlsm 显示找不到文件,这是我所做的错误处理。我确实尝试在我的桌面上创建一个新文件夹并在其中创建一个全新的 transfer.xlsm,我将项目和主文件以及我的代码复制到我的新按钮中。它实际上能够工作但是当我关闭并重新打开那个新文件夹时它不起作用,

当我处理它时基本上工作正常,当我完全关闭它并重新打开时它无法检测到这 2 个文件。

根据用户输入transfer.xlsm在transfer.xlsm中输入单元格值

source = Cells(5, 2)
sourceSheet = Cells(6, 2)
sourceSheetRow = Cells(7, 2) - 1

destination = Cells(8, 2)
destinationSheet = Cells(9, 2)
destinationSheetRow = Cells(10, 2) - 1

source = source + ".xlsx"
destination = destination + ".xlsx"

rows = Cells(11, 2)

If FileExists(source) = False Or FileExists(destination) = False Then
    MsgBox "File not found, please double check file name and make sure is in the same folder"
Exit Sub
End If

For i = 1 To rows
...
Next i

Function FileExists(FilePath As String) As Boolean
Dim TestStr As String
    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FilePath)
    On Error GoTo 0
    If TestStr = "" Then
        FileExists = False
    Else
        FileExists = True
    End If
End Function

我创建了这个 transfer.xlsm,这样我就可以将它发送给那些想将数据块从一个 excel 复制到另一个 excel 而不是逐行复制粘贴的人。希望有人能给我一些指导

根据您提供的信息,我假设用户提供的信息只是没有扩展名的文件名:itemmaster,而不是完整的文件路径C:\SampleFolder\item.xlsxC:\SampleFolder\master.xlsx。此外,我假设当您 运行 此代码时,所有三个文件都必须位于同一文件夹中。

如果是这种情况,请尝试使用 ThisWorkbook.Path,您可以将其应用于您的源路径和目标路径,以确保使用正确的文件路径。

Dim sPath as String
sPath = ThisWorkbook.Path + "\"

source = Cells(5, 2)
sourceSheet = Cells(6, 2)
sourceSheetRow = Cells(7, 2) - 1

destination = Cells(8, 2)
destinationSheet = Cells(9, 2)
destinationSheetRow = Cells(10, 2) - 1

source = source + ".xlsx"
destination = destination + ".xlsx"

If FileExists(sPath + source) = False Or FileExists(sPath + destination) = False Then
    MsgBox "File not found, please double check file name and make sure is in the same folder"
Exit Sub
End If
...