excel - For循环中的VBA查找和替换未按预期替换
问题描述
我正在使用 Excel 工作表并将它们转换为 XML 格式,然后导入 SQL。我有一个文件链接列表的工作表,称为“文件列表”。该代码在文件链接中打开了必要的表格,并将数据放入名为“XML 格式”的表格中,该表格适合随后导入 SQL。问题是传输数据循环中的查找和替换确实运行,但似乎没有通过第一个“文件列表”引用。
Sub LinkFile()
Application.ScreenUpdating = False
ThisWorkbook.Sheets("Files List").Activate
oldfile = Sheets("Files List").Range("oldFile")
Debug.Print oldfile
strfnd = oldfile
Set db1 = connect_sql_server()
strfnd = Format_link(oldfile)
Debug.Print strfnd
For i = 3 To 50
Sheets("Files List").Range("FIleIndex").value = i
filelink = Sheets("Files List").Range("fileindex2")
curfile = ThisWorkbook.Sheets("Files List").Range("curfile")
Set wkbkNew = Workbooks.Open(filelink)
ThisWorkbook.Sheets("XML Format").Range("B3") = ActiveWorkbook.Name
Debug.Print (ThisWorkbook.Sheets("XML Format").Range("B3"))
Set wbsheet = wkbkNew.Sheets("Calculations")
filelink = ThisWorkbook.Sheets("Files List").Range("E3")
strRplc = filelink
Debug.Print (strRplc)
Set sht = ThisWorkbook.Sheets("XML Format")
Application.Volatile
ActiveWorkbook.Close SaveChanges:=False
Application.Volatile
sht.Cells.Replace What:=strfnd, Replacement:=strRplc, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
strfnd = strRplc
Debug.Print (strfnd)
ThisWorkbook.Sheets("XML Format").Activate
strxml = concatenate_xml()
Debug.Print (strxml)
'this imports data into sql server
WriteDB strxml, db1
strfnd = strRplc
continue:
Next i
db1.Close
End Sub
假设循环设置为 i=2 到 2。预期结果是在“XML 格式”表中,数据应该来自“文件列表”中的第二个文件链接。实际输出是数据始终来自第一个文件链接,即原始“旧文件”。唯一能按预期工作的是文件名“ActiveWorkbook.Name”。
解决方案
抱歉,如果我不能花很多时间详细回答您的问题。尝试通过各种工作簿中 Excel 中的大量单元格来工作通常会给我带来很多问题。特别是如果您在工作表事件上运行宏。我能给出的最好建议是,您从旧工作表中获取全部内容,使用 VBA 对其进行处理,然后将其放回新工作表中。它还将使您的宏加速几个数量级。
这个过程看起来有点像这样:
XML_table = thisWorkbook.range()
for i = 1 to nr_rows
for j = 1 to nr_columns
XML_table(i,j) = replace_str(XML_table(i,j))
next j
next i
thatWorkbook.range() = XML_table
祝你好运,希望快速的建议能有所帮助
推荐阅读
- scala - 由推断的表达式类型覆盖的类型注释
- javascript - 批处理期间发生错误:ORA-06550:第 1 行,第 81 列:PLS-00103:
- python-3.x - 导入开放数据集给出属性错误
- c# - 如果在控制台应用程序 C# 中未找到更新,如何显示消息
- java - 是否可以“继承”已实现的迭代器?
- python - TypeError: 不支持 unicode 字符串,请编码为字节:
- azure - Azure DevOps 临时代理不工作
- javascript - 用于下载二进制文件的 JavaScript Blob 创建损坏的文件
- elasticsearch - 从 ES 1.4.2 更新到 ES 7.9 后,弹性搜索性能下降
- reactjs - 如何使用 React-Hook-Form 处理更改事件?