excel - Excel Header 和 Footer 文本替换太慢了,有替代方案吗?
问题描述
我正在尝试用VBA替换excel左页眉(以及每个页眉和页脚)中的一组特定单词问题是它太慢了,2张纸大约需要40秒..
我已经用替换命令完成了它:
With osheet.PageSetup
For i = 1 To footerfindreplace.count
.LeftHeader = Application.WorksheetFunction.Substitute(.LeftHeader, footerfindreplace(i).TextReplace, footerfindreplace(i).TextReplaceBy)
next i
End with
还有这种替代方法,但是将所有文本替换为我想要的单词,并且不保留我不想替换的剩余文本。
If .LeftHeader = footerfindreplace(i).TextReplace Then
.LeftHeader = footerfindreplace(i).TextReplaceBy
End If
更新,
根据建议还尝试了 VBA.replace 它需要完全相同的时间.. 20 秒打开替换文本的文件,无论执行什么命令。我也试过把循环放在不同的地方,仍然没有改进。20秒内更换所有页眉和页脚需要20秒正常吗?
我查看了大约 15 个文本查找和替换的可能性,但是对于相同数量的可能性,cells.replace 命令可以完美地工作而不会延迟。
谢谢你的帮助
解决方案
您是否尝试过使用 VBA.Replace?
此代码将 LeftHeader 中的所有“Foo”替换为“Bar”。
替换Set pgSetup = Sheet1.PageSetup
为您需要的任何内容,并在必要时循环。
Sub testRep()
Dim pgSetup As PageSetup
Dim findStr As String
Dim repStr As String
Set pgSetup = Sheet1.PageSetup
findStr = "Foo"
repStr = "Bar"
pgSetup.LeftHeader = VBA.Replace(pgSetup.LeftHeader, findStr, repStr)
End Sub
编辑:
添加了一些额外的代码,你应该看到更新需要多长时间。作为比较,使用下面的代码 (testRep2),使用 3 个标题 (R,C,L) 更新 5 张工作表,每张工作表需要 0.1 到 1 秒(比没有Application.ScreenUpdating
and快大约 3 倍Application.DisplayStatusBar
)。
Sub testRep2()
Dim sht As Worksheet
Dim findStr As String
Dim repStr As String
Dim start As Long
Dim startSheet As Long
findStr = "Foo"
repStr = "Bar"
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
start = timer
For Each sht In ActiveWorkbook.Worksheets
startSheet = timer
With sht.PageSetup
.LeftHeader = VBA.Replace(.LeftHeader, findStr, repStr)
.CenterHeader = VBA.Replace(.CenterHeader, findStr, repStr)
.RightHeader = VBA.Replace(.RightHeader, findStr, repStr)
End With
Debug.Print sht.Name, timer - startSheet
Next sht
Debug.Print "Total:", timer - start
Application.DisplayStatusBar = True
Application.ScreenUpdating = True
End Sub
Sheet1 (5) 0.796875
Sheet1 (4) 0.34765625
Sheet1 (3) 0.89453125
Sheet1 (2) 0.42578125
Sheet1 0.96875
Total: 2.96875
推荐阅读
- python - 新屏幕阅读说明
- javascript - 在addEventListener方法中,将参数x传递给实现console.log(x)的匿名函数如何返回事件?
- azure-active-directory - 在 BookinPolicy 中添加 AzureAD ApplicationID
- neo4j - 基于类型/属性的颜色节点
- c++ - 是否可以使用 QML Quick3D View3D 动态加载 .OBJ 文件?
- azure-data-explorer - 如何在 kusto/appinsight 连接中使用 where 条件
- mysql - MySQL - SUM(字符串值)实际上是做什么的?
- class - Next.js:跨页面ssr的类实例
- r - 使用列名 (R) 更改数据表中的单元格值?
- php - 如何控制 Symfony 的 RepeatedType 验证序列