VBA为预定义字符串数组strFormulas(2)赋值问题(续篇)
嘿,我懂你想优化之前那套多工作表填充公式的VBA代码,针对不同工作表给strFormulas(2)分配对应公式的需求对吧?其实这个实现起来很直观,我们只需要在遍历工作表的循环里加个条件判断就行,下面给你具体的方案和代码示例:
针对不同工作表动态设置strFormulas(2)的VBA方案
我们可以通过判断当前遍历到的工作表名称(比索引更稳定,毕竟工作表顺序可能被调整),来为strFormulas(2)分配专属公式。这里给你两种实现思路:
1. 明确分支判断(适合公式差异较大的场景)
Sub FillFormulasOptimized() Dim ws As Worksheet ' 根据你的实际需求调整数组维度,这里假设是1到3的数组 Dim strFormulas(1 To 3) As String ' 遍历工作簿内所有工作表 For Each ws In ThisWorkbook.Worksheets ' 先设置通用公式(如果有) strFormulas(1) = "=SUM(A1:A10)" ' 示例通用公式,替换成你的实际内容 strFormulas(3) = "=AVERAGE(B1:B10)" ' 示例通用公式,替换成你的实际内容 ' 针对目标工作表设置strFormulas(2) Select Case ws.Name Case "Table 1" ' 注意:VBA中字符串里的双引号要写两个来转义 strFormulas(2) = "=IF('Table 1 S'!N1838=""S"",""S"","""")" Case "Table 2" ' 这里替换成Table 2对应的公式 strFormulas(2) = "=IF('Table 2 S'!N1838=""S"",""S"","""")" Case Else ' 其他工作表可以设置默认值或留空 strFormulas(2) = "" End Select ' 将公式填充到当前工作表的指定区域,这里示例是C1:C3 ws.Range("C1:C3").Formula = strFormulas Next ws End Sub
2. 字符串拼接简化(适合公式仅工作表名称不同的场景)
如果Table 1和Table 2的公式只是关联的工作表名称有差异,完全可以用字符串拼接来减少重复代码:
Sub FillFormulasSimplified() Dim ws As Worksheet Dim strFormulas(1 To 3) As String For Each ws In ThisWorkbook.Worksheets strFormulas(1) = "=SUM(A1:A10)" strFormulas(3) = "=AVERAGE(B1:B10)" ' 匹配目标工作表,自动拼接公式中的工作表名称 Select Case ws.Name Case "Table 1", "Table 2" strFormulas(2) = "=IF('" & ws.Name & " S'!N1838=""S"",""S"","""")" Case Else strFormulas(2) = "" End Select ws.Range("C1:C3").Formula = strFormulas Next ws End Sub
关键细节提醒
- 双引号转义:VBA里要在字符串中使用双引号,必须写成两个连续的
"",否则会触发编译错误,这是新手很容易踩的坑。 - 判断逻辑选择:如果你的工作表顺序固定不变,也可以用
ws.Index来判断(比如Case 2对应Table 1),但用名称判断更健壮,避免工作表顺序调整后代码失效。
内容的提问来源于stack exchange,提问作者lydias
相关产品推荐
相关产品推荐

