为工作簿中的每个工作表调用函数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 
+0

Th谢谢你!你有什么想法在这种情况下,“方法'选择'对象'工作表'失败的方法吗? – Rob

+0

不知道为什么你会得到那个。你有隐藏的表吗? –

+0

不 - 我试图扩展这个逻辑到另一个宏但是,Formuoli2的重要组成部分允许你这样做? – Rob

您可以直接通过工作表作为参数传递给第二子:

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 
+0

对不起,我在编辑你的答案时发布了你的答案,那就是“超调“,击败了我! – user3598756

这是更好地传递wsFormuoli2()

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 
+0

谢谢!出于好奇,为什么更好? – Rob

+0

仅供参考,您的'With'模块没有做任何事情,因为您的'Range'调用在它前面缺少'.'。 – Rory

+1

您应该避免选择/激活工作表和/或单元格,并使用完全参考范围,主要有三个原因:1)确定实际工作簿的实际工作表格的单元格,而“激活”或“选择”给你一个_instant_有效的表单,可以在用户选择后或随后的代码语句本身进行更改(可能没有意识到)2)激活表单是一项耗时的工作3)激活表单导致屏幕闪烁 – user3598756