【问题标题】:VBA EXCEL: Apply sub to another worksheet from moduleVBA EXCEL:将子应用到模块中的另一个工作表
【发布时间】:2017-08-12 03:56:05
【问题描述】:

试图从模块中获取子组件以在另一个工作表中运行。从某种意义上说,停止使用冗余范围并保持其精简。

i.e.
-Module object-
Public sub method1()
{
  Range("B4:B23") = ""
  Range("C4:C23") = ""
  'Empties these ranges...
}
-worksheet(s)-
sub project)
{
with sheet1 (or on any sheet 2,3,4,5... etc.)
Call module1.method1 
'but this method only works on the module object, not in the context of the 'specified worksheet where it is needed
End with

理想情况下,通过在任何工作表中使用方法 1 来清除范围内的数据。我尝试的每个引用都只是运行 module1 方法而没有任何效果,或者对方法或工作表进行无用的引用。只是试图通过不写对格式相同的每个工作表的直接引用来节省代码空间。

【问题讨论】:

  • 只需录制一个宏并调整代码以使其可重用

标签: excel vba methods


【解决方案1】:

您可以使用 sub (ClearCells) 来执行此操作,该子 (ClearCells) 通过 ParamArray 关键字接受可变数量的参数。然后,您可以简单地调用 ClearCells 子并将要清除相同范围的工作表对象传递给它,就像在 DoClear 子中一样。您可以根据需要在GetRanges 函数中为Union 函数添加更多范围。

Sub DoClear()

    ClearCells Sheet1, Sheet3

End Sub


Sub ClearCells(ParamArray wkshts() As Variant)

    Dim vWs As Variant
    Dim ws  As Worksheet

    For Each vWs In wkshts
        Set ws = vWs
        GetRanges(ws).Clear
    Next vWs

End Sub

Function GetRanges(ws As Worksheet) As Range

    With ws
        Set GetRanges = Union(.Range("B4:B23"), _
                            .Range("C4:C23"))
    End With

End Function

【讨论】:

    【解决方案2】:

    或者假设您从要清除的工作表中调用方法,您可以使用 ActiveSheet:

    Public Sub Method1()
        ActiveSheet.Range("B4:B23").Clear
        ActiveSheet.Range("C4:C23").Clear
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多