这是我当前代码的一部分:
选项明确
Sub ImportData()
Dim wkbCrntWorkBook As Workbook
Dim wkbSourceBook As Workbook
Dim fNameAndPath As Variant
Set wkbCrntWorkBook = ActiveWorkbook
fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel 2007, *.xlsx; *.xlsm; *.xlsa", Title:="Select File To Import")
If fNameAndPath = False Then Exit Sub
Call ReadDataFromCloseFile(fNameAndPath)
Set wkbCrntWorkBook = Nothing
Set wkbSourceBook = Nothing
End Sub
Sub ReadDataFromCloseFile(filePath As Variant)
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Dim src As Workbook
Set src = Workbooks.Open(filePath, True, True)
' COPY DATA FROM SOURCE (CLOSE WORKGROUP) TO THE DESTINATION WORKBOOK.
' GET THE TOTAL ROWS FROM THE SOURCE WORKBOOK.
Dim lastLine As Long ' last line from source
lastLine = src.Worksheets(source_sheet_1_name).Range("A" & Rows.count).End(xlUp).Row
Worksheets("abc").Range("A3:A40")).Value= src.Worksheets("cde").Range("A4:A41").Value
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE.
Set src = Nothing
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
根据this,数据的源工作簿将不会打开。但是,只要我在文件浏览器中单击文件名以选择要导入的文件,excel就会打开该文件。
有谁知道我应该如何实现目标(无论最后一段中的链接如何)?
(我的目标是在用户指示要导入的文件后,根据某些标准自动将某些列从xlsx文件复制/导入到xlsm文件中(无需打开要导入的文件)。但是,在我选择之后通过双击导入的文件,只是打开要导入的文件。在导入的文件打开后,程序不会继续导入相应的列。)
答案 0 :(得分:2)
你可以在这做一些事情。需要以某种方式打开文件。但是,尽可能锁定/隐藏它将是关键。
你可以尝试一些不同的东西:
1)在打开工作簿之前,设置Application.ScreenUpdating = False
,然后在关闭子服务器之前的最后,确保将其设置回True
。
2)使用src = workbooks.open...
打开工作簿后,尝试设置Application.Visible = False
。完成导入过程并关闭源工作簿后,请确保将其设置为true:Application.Visible = True
。
这应该允许您打开工作簿,保持更新,以便没有人能够看到发生了什么,并以最小的阻力/可见性关闭工作簿。
可能导致错误,或者直接无法正常工作的原因可能来自您尝试调用的工作簿工作表名称。我没有看到变量的分配,因此lastLine = src.Worksheets(source_sheet_1_name)
实际上应该在其中说出工作表名称,例如lastLine = src.Worksheets("Sheet1")
给我一个机会让我知道。