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
,这里我假设它在活动工作簿中。