Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 宏以查找和替换文本文件中的文本(不同文件的循环)_Vba_Excel - Fatal编程技术网

Vba 宏以查找和替换文本文件中的文本(不同文件的循环)

Vba 宏以查找和替换文本文件中的文本(不同文件的循环),vba,excel,Vba,Excel,VBA新手,但正在尝试为以下内容创建宏: 我希望宏打开一个文本文件(单元格A2中提供的位置) 文件名位于单元格B2),以查找文本(在单元格C2中提供), 用单元格D2中提供的新文本替换文本,然后保存并关闭文本文件 然后,它应该打开一个文本文件(在单元格A3中提供的位置) 单元格B3中的文件名),要查找文本(在单元格C3中提供),请将文本替换为单元格D3中提供的新文本,然后保存并关闭文本文件 重复此操作,直到电子表格中提供的所有文件都已完成 更新 谢谢你的帮助 电子表格示例: 请注意,我希望

VBA新手,但正在尝试为以下内容创建宏:

  • 我希望宏打开一个文本文件(单元格A2中提供的位置) 文件名位于单元格B2),以查找文本(在单元格C2中提供), 用单元格D2中提供的新文本替换文本,然后保存并关闭文本文件
  • 然后,它应该打开一个文本文件(在单元格A3中提供的位置) 单元格B3中的文件名),要查找文本(在单元格C3中提供),请将文本替换为单元格D3中提供的新文本,然后保存并关闭文本文件
  • 重复此操作,直到电子表格中提供的所有文件都已完成 更新
谢谢你的帮助

电子表格示例:

请注意,我希望能够找到并替换不必与原始文本具有相同字符数的文本

目前为止的尝试如下。运行调试时,将
strText
悬停在上方时是正确的,然后当它通过
Get#i,strText
步骤时,它将变为我尝试更新的文本文件的标题

Sub Replace_Text()
Dim src As String, fl As String
Dim strFile As String
Dim i As Integer
Dim x As Integer
Dim strText As String
Dim lngMyRow As Long
Dim lngLastRow As Long

i = FreeFile

Application.ScreenUpdating = False

lngLastRow = Range("A:B").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1

For lngLastRow = 2 To lngLastRow
x = 2
'Source directory
src = Range("A" & x)
'File name
strFile = Range("B" & x)

With CreateObject("vbscript.regexp")
    .Global = True
    Open src & "\" & strFile For Binary Access Read Write As #i
      strText = Space(LOF(i))
      Get #i, , strText
            For Each cell In Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
                .Pattern = Replace(Replace(Replace(Replace(cell.Value, "?", "\?"), "*", "\*"), "+", "\+"), ".", "\.")
                strText = .Replace(strText, cell.Offset(, 1).Value)
            Next cell
            Put #i, , strText
        Close #i

    End With
    i = i + 1
    Next lngLastRow
    MsgBox "done"
    Application.ScreenUpdating = True
    End Sub

对不起,我应该在答案中添加我的编辑吗?我是VBA的新手(今天以前从未使用过),也是论坛的新手,所以我只是刚刚起步。我尝试了
strText=Space(LOF(I))
,但它只给出了文本文件的头。FWIW-
对于lngLastRow=2到lngLastRow
应该是
对于x=2到lngLastRow
同样
下一个lngLastRow
应该是
下一个x
,并且
x=2
语句应该被删除。
strText
上的悬停文本将仅显示变量中包含的数据,直到第一个CR/LF,因此将仅显示标题。而且
i=i+1
可能是多余的-您应该能够对所有文件重复使用相同的文件号。在这些更改之后,您的代码应该(据我所知)可以正常工作。很抱歉,这些更改不起作用。当尝试运行时,它会出现一个文件路径错误。很高兴再次从头开始,就像我说的,VBA新手,刚从我找到的其他宏中提取了行。你没有提到保存文件。我更新了问题,包括保存文件。谢谢。对不起,我应该在答案中添加我的编辑吗?我是VBA的新手(今天以前从未使用过),也是论坛的新手,所以我只是刚刚起步。我尝试了
strText=Space(LOF(I))
,但它只给出了文本文件的头。FWIW-
对于lngLastRow=2到lngLastRow
应该是
对于x=2到lngLastRow
同样
下一个lngLastRow
应该是
下一个x
,并且
x=2
语句应该被删除。
strText
上的悬停文本将仅显示变量中包含的数据,直到第一个CR/LF,因此将仅显示标题。而且
i=i+1
可能是多余的-您应该能够对所有文件重复使用相同的文件号。在这些更改之后,您的代码应该(据我所知)可以正常工作。很抱歉,这些更改不起作用。当尝试运行时,它会出现一个文件路径错误。很高兴再次从头开始,就像我说的,VBA新手,刚从我找到的其他宏中提取了行。你没有提到保存文件。我更新了问题,包括保存文件。谢谢