获得以下可作为Excel VBScript宏使用的代码:
Sub replace()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Sheets(ws.Name).Activate
Dim I
For I = 5 To 20
ActiveSheet.Range("T" & I).Value = "=AVERAGE(3)"
Next I
Next ws
End Sub
很显然,=AVERAGE(3)
并不意味着以任何方式有用,而是表明该代码在上有效,而以下代码段无效:< / p>
Sub replace()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Sheets(ws.Name).Activate
Dim I
For I = 5 To 20
ActiveSheet.Range("T" & I).Value = "=IF(1=1;1;0)"
Next I
Next ws
End Sub
实际上,应该有一种更复杂的公式,其中IF
所在(看起来像:=IF(Q5<>0;IF(R5+S5>Q5;"ERROR";IF(R5="";S5/Q5;IF(Q5=R5;"Coord.";S5/(Q5-R5))));"N/A")
。
问题是,我缩小了范围,直到看到即使是微不足道的=IF(1=1;1;0)
语句也因1004运行时错误而失败。
我认为解决这个问题并不重要,但是整个宏仅是为了将每个工作表中的约15个单元格更新为约31个工作表。正如我说的那样,第一个块有效(通过AVERAGE()
计算),但是=IF
不起作用。
为了完整起见,这是我想要的代码:
Sub updCells()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Sheets(ws.Name).Activate
Dim I
For I = 5 To 20
ActiveSheet.Range("T" & I).Value = "=IF(Q" & I & "<>0,IF(R" & I & "+S" & I & ">Q" & I & ",""ERROR"",IF(R" & I & "="""",S" & I & "/Q" & I & ",IF(Q" & I & "=R" & I & ",""Coord."",S" & I & "/(Q" & I & "-R" & I & ")))),""N/A"")"
Next I
Next ws
End Sub
答案 0 :(得分:0)
您的代码可以简化为以下内容,除了注释之外,您无需激活工作表。参见how to avoid select。
这通常也适用于更复杂的公式(例如您的示例)-Excel将计算出相对引用。
Sub replace()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Range("T5:T20").Formula = "=IF(1=1,1,0)"
Next ws
End Sub