为工作簿中的每个工作表调用函数VBA
我是VBA的初学者,似乎无法弄清楚如何在工作簿中的所有工作表中调用函数。有没有办法调用这样的函数?如果可能的话,我希望它在2个独立的Subs中。谢谢。为工作簿中的每个工作表调用函数VBA
Sub Formuoli2()
Dim iLastRow As Integer
Dim i As Integer
Dim ws As Worksheet
iLastRow = 5
For i = 1 To iLastRow
Range("A" & i) = "a" 'these are formulas
Range("B" & i) = "b" 'these are formulas
Range("C" & i) = "c" 'these are formulas
Range("D" & i) = "d" 'these are formulas
Range("E" & i) = "e" 'these are formulas
Range("F" & i) = "f"
Next i
End Sub
Sub Formuoli3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws
Call Formuoli2
End With
Next
End Sub
添加一行:
.Select
Call Formuoli2
您可以直接通过工作表作为参数传递给第二子:
Sub Formuoli2(ws As Worksheet)
Dim iLastRow As Long
Dim i As Long
iLastRow = 5
For i = 1 To iLastRow
ws.Range("A" & i) = "a" 'these are formulas
ws.Range("B" & i) = "b" 'these are formulas
ws.Range("C" & i) = "c" 'these are formulas
ws.Range("D" & i) = "d" 'these are formulas
ws.Range("E" & i) = "e" 'these are formulas
ws.Range("F" & i) = "f"
Next i
End Sub
Sub Formuoli3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Call Formuoli2(ws)
Next
End Sub
对不起,我在编辑你的答案时发布了你的答案,那就是“超调“,击败了我! – user3598756
这是更好地传递ws
到Formuoli2()
子
Option Explicit
Sub Formuoli3()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Formuoli2 ws
Next
End Sub
Sub Formuoli2(ws As Worksheet)
Dim iLastRow As Integer
Dim i As Integer
iLastRow = 5
With ws
For i = 1 To iLastRow
.Range("A" & i).Resize(, 6) = Array("a", "b", "c", "d", "e", "f") 'these are formulas
Next i
End With
End Sub
谢谢!出于好奇,为什么更好? – Rob
仅供参考,您的'With'模块没有做任何事情,因为您的'Range'调用在它前面缺少'.'。 – Rory
您应该避免选择/激活工作表和/或单元格,并使用完全参考范围,主要有三个原因:1)确定实际工作簿的实际工作表格的单元格,而“激活”或“选择”给你一个_instant_有效的表单,可以在用户选择后或随后的代码语句本身进行更改(可能没有意识到)2)激活表单是一项耗时的工作3)激活表单导致屏幕闪烁 – user3598756
Th谢谢你!你有什么想法在这种情况下,“方法'选择'对象'工作表'失败的方法吗? – Rob
不知道为什么你会得到那个。你有隐藏的表吗? –
不 - 我试图扩展这个逻辑到另一个宏但是,Formuoli2的重要组成部分允许你这样做? – Rob