使用VBA,如何在不打开xlsx文件的情况下将xlsx文件导入到xlsm中?

这是我现在的代码的一部分:

选项显式

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 

据此,数据的源工作簿将不会被打开。 但是,只要我点击文件浏览器中的文件名来select要导入的文件,Excel打开文件。

有谁知道我应该如何实现目标(不pipe最后一段中的链接)?

(我的目标是在用户指定要导入的文件(不打开要导入的文件)后自动根据一定的准则将xlsx文件中的某些列拷贝/导入到xlsm文件中,但是select要导入的文件后通过双击导入,只导入要导入的文件,在导入的文件打开后,程序不继续导入相应的列。

有几件事你可以在这里做。 这个文件需要以某种方式打开。 但尽可能locking/隐藏将是关键。

你可以尝试一些不同的东西:

1)打开工作簿之前,设置Application.ScreenUpdating = False ,然后在结束之前结束子,请确保您将其设置为True

2)打开工作簿后,用src = workbooks.open...尝试设置Application.Visible = False 。 一旦完成导入过程并closures源工作簿,请确保将其设置为true: Application.Visible = True

这应该允许您打开工作簿,closures更新,以便无人看到发生的情况,并以最小的阻力/可见性closures工作簿。

它可能导致错误,或者完全不工作的原因可能来自您尝试调用的工作簿表名称。 我没有看到variables的赋值,所以lastLine = src.Worksheets(source_sheet_1_name)实际上应该在其中指定sheetname,比如lastLine = src.Worksheets("Sheet1")

给这个镜头,让我知道。