VBA搜索和替换脚本会产生长时间的延迟

时间:2019-02-13 20:50:59

标签: vba ms-word

[[更新:抱歉...我忘记了代码块。已编辑。]]

这是我的一个老师提出的问题,因此我将直接引用他,并以说我不知道​​VB(这里只是管道)为开头对此进行介绍:

“为了帮助国际学生,我需要将YouTube成绩单和隐藏式字幕转换为可读的文本。

我编写此例程的目的是,通过从Microsoft Word中调用Visual Basic,从Youtube成绩单中消除时间码标记。由于时间码始终位于单独的行上,并且由于时间码必须包含“:”,因此我要搜索字符“:”,然后删除出现该字符的整行。由于某种原因,我编写的例程在完成后会迫使Word进入很长的无响应时间段(大约60-100秒),在此之后它会很好地运行。有什么建议可以避免这种延迟或在Word中解决此问题而无需编写宏吗?”

Sub Deleteyt()

Dim oRng As Word.Range

Dim oRngDelete As Word.Range

Set oRng = ActiveDocument.Range

With oRng.Find

.Text = ":"

While .Execute

oRng.Select

Set oRngDelete = ActiveDocument.Bookmarks("\Line").Range

oRngDelete.Delete

Wend

End With

End Sub

因此代码可以正常工作,前面只是很长的延迟。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

为什么不修改包含成绩单的文本文件?我希望您最终得到一个.txt文件。

请参见以下示例,该示例非常受Text file in VBA: Open/Find Replace/SaveAs/Close File

的启发
Sub CleanFile()

Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String

' Edit as needed
sFileName = application.GetOpenFilename

iFileNum = FreeFile
Open sFileName For Input As iFileNum

Do Until EOF(iFileNum)
    Line Input #iFileNum, sBuf
    'If the line does not contain a ':', then include the line in the memory sTemp 
    if If InStr(sBuf, ":") = 0 Then sTemp = sTemp & sBuf & vbCrLf
Loop
Close iFileNum

iFileNum = FreeFile

sFileName = Application.GetSaveAsFilename()
Open sFileName For Output As iFileNum
Print #iFileNum, sTemp
Close iFileNum

End Sub

答案 1 :(得分:0)

您不需要宏-您所需的只是一个通配符查找/替换,并带有:

Find = <[0-9]@:[0-9]@>*^13
Replace = nothing