excel - 在 Excel 中处理对象组时创建循环以替换多个嵌套的 if 语句
问题描述
我不确定如何将下面附加的代码优化为某种形式的循环,并希望有人能够说明如何最好地解决这个问题。
基本上,我继承了一个电子表格,其中包含从宏记录器记录和/或由没有 VBA 经验的人编写的几个 VBA 模块,并且运行速度非常慢。我一直在经历并将许多冗余的“嵌套 if”类型部分减少到 for 循环中,以尝试优化和加快速度,但是我也非常缺乏经验,而且我自己也不是你可能猜到的编码器!
If Range("Link1").Value = "" Then
Application.CutCopyMode = False
GoTo Finale:
Else
If Range("Link2").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1")).Select
Selection.Copy
Else
If Range("Link3").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2")).Select
Selection.Copy
Else
If Range("Link4").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3")).Select
Selection.Copy
Else
If Range("Link5").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4")).Select
Selection.Copy
Else
If Range("Link6").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5")).Select
Selection.Copy
Else
If Range("Link7").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5", "Group6")).Select
Selection.Copy
Else
If Range("Link8").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5", "Group6", "Group7")).Select
Selection.Copy
Else
ActiveSheet.Shapes.Range(Array("Group1", "Group2", "Group3", "Group4", "Group5", "Group6", "Group7", "Group8")).Select
Selection.Copy
End If
End If
End If
End If
End If
End If
End If
End If
该代码处理复制 8 组“事物”(在本例中,每组都包含文本框和一个图形)并检查是否已填充链接,并在找到未填充的链接时复制先前的组。因此,这里的想法是只复制填充的组。
关于这一切的第二个问题是,当您有多个这样的 if 语句时,将这些事情减少到循环中实际上是更快或更优化,还是我应该寻找其他地方来进一步优化电子表格?将长段递归代码转换为最小循环当然感觉很好(!),但我不知道这是否真的是提高速度和稳定性真正需要做的,或者它实际上没有什么有意义的影响。
解决方案
很难从您提供的内容中判断您的代码在做什么,但是有几种方法可以至少使这部分更有效。
首先是使用ElseIf
构造。这使您不必执行许多嵌套的 if 语句。
其次,您要尽可能避免使用Select
。
以下是重构代码的示例:
If Range("Link2").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1")).Copy
ElseIf Range("Link3").Value = "" Then
ActiveSheet.Shapes.Range(Array("Group1", "Group2")).Copy
Elseif ...
推荐阅读
- python - Python Map 应用相同的函数名但不同的函数
- c++ - 铸造一个结构
- python - How do i return a string if a list is empty in python
- sql - R 不会使用 SQL 块编织到 html 或 pdf。eval 中的错误(x,envir = envir):找不到对象“连接”
- c# - 将 UDP 输出添加到 log4net 附加程序
- java - VSCode Java 调试器抛出未知错误
- python - Tweepy 绑定方法 API.me
- docker - 大 IP 删除 tcp/ip 路由并阻止与 Docker 容器的通信
- python - Python - 检查字典中的所有键值对并转换为 int 或 float
- mysql - 选择列中具有最大值的行