excel文件循环

在我的Excel表格中,我使用了涉及外部表格的公式。 我不想手动更改单元格E7的值(插入外部工作表的名称)的值,而是要写入一个macros以打开所有外部工作表,在E7更改参考值并复制生成的值。

不幸的是,我的代码不工作 – Excel不能“看到”外部工作表中的值。 我应该改变什么?


 Sub lista_plik() Dim oExcel As Excel.Application Dim oWB As Workbook Set oExcel = New Excel.Application folder = "path_here" folder2 = folder & "*.xlsx" arkusz = Dir(folder2) Do While arkusz <> "" x = x + 1 Range("E7").Value = Replace(arkusz, ".xlsx", "") arkusz = folder & arkusz Set oWB = oExcel.Workbooks.Open(arkusz) '''''''''''''''''''' HERE CODE TO COPY VALUES ''''''''''''''''''''''' oWB.Close arkusz = Dir Loop End Sub 

我同意brettdj,很难知道你正在努力实现什么。

克里斯已经修复了你的两个错误,但没有解释我怀疑是造成这个问题的原因。

在你的代码中使用Range("E7").Value 。 这是指活动工作簿的活动工作表内的单元格E7。 克里斯已经改变了这个oWS.Range("E7").Value ,这是一个改进,但OWS尚未初始化,所以它不够。

我使用多个工作簿的经验是你必须保持完全的控制。 我怀疑你的错误是Excel看错了E7。 下面的步骤将消除和任何类似的错误。

步骤1

通过检查WorkBooks.Count = 1 ,确保一开始只打开一个工作簿。 如果允许打开两个或更多工作簿,则需要使用代码来检查活动工作簿是否是您想要的。 所以像这样:

 If WorkBooks.Count > 1 Then Call MsgBox("Please close other workbooks then try again.", vbYesOnly) Exit Sub End If 

第2步

在打开任何其他工作簿之前,请logging哪一个是主工作簿。

 Dim WBkMaster As WorkBook WBkMaster = ActiveWorkBook 

第3步

始终明确地参考工作簿和工作表。 例如:

 With WBkMaster With Sheets("x1") .Range("E7").Value = ... ' Extract data from Sheet x1 to variables here End With With Sheets("x2") ' Extract data from Sheet x2 to variables here End With End With Set WBkDestination = Application.Workbooks.Open(arkusz) With WBkDestination With Sheets("x3") ' Save data for Sheet x3 from variables here End With With Sheets("x4") ' Save data for Sheet x4 from variables here End With . Close End With oWB = Nothing ' Ensure no reference to closed workbook 

还有其他方法可以在工作表和工作簿之间复制数据,但是您没有提供足够的信息来推荐哪种方法最合适。 关键问题在于,您必须完全明确您要处理的工作表和哪个工作簿。

如果你在VBA中运行这个,你不需要声明一个Excwl的实例。 改成:

 Sub lista_plik() Dim oWB As Workbook Dim oWs As Worksheet Set oWs = ActiveSheet folder = "path_here\" folder2 = folder & "*.xlsx" arkusz = Dir(folder2) Do While arkusz <> "" x = x + 1 oWs.Range("E7").Value = Replace(arkusz, ".xlsx", "") arkusz = folder & arkusz Set oWB = Application.Workbooks.Open(arkusz) '''''''''''''''''''' 'HERE CODE TO COPY VALUES ''''''''''''''''''''''' oWB.Close arkusz = Dir Loop End Sub 

注意:我并不确定您正在引用哪个工作簿单元格E7 ,这里我假设它在活动工作簿中。