用我。在函数中

时间:2016-03-23 12:21:29

标签: vba

首先我的潜点看起来像这样:

Sub DeleteGraph()

For Each objCht In Me.ChartObjects
    For Each s In objCht.Chart.SeriesCollection
        s.Delete
    Next s
Next objCht

End Sub

由于Me,从主代码调用时这不起作用。

然后我尝试了这个:

Sub Main()

     Dim test As Worksheet
     Set test = Me.CodeName
     DeleteGraph test
End sub

Sub DeleteGraph(sheets As Worksheet)
    For Each objCht In sheets.ChartObjects
        For Each s In objCht.Chart.SeriesCollection
            s.Delete
        Next s
    Next objCht
End Sub

这不适用于“Set test = Me.CodeName”

我在网上搜索并发现我可能不得不使用'CallByName',但我似乎无法使其工作。这是正确的方法,如果是这样,怎么办?

谢谢!

1 个答案:

答案 0 :(得分:2)

在VBA中Me是上下文敏感的。它提供了对父对象的引用。如果您的代码在ThisWorkbook Me内声明,则会指向当前的workbook object。如果您在用户表单Me中声明代码,则会引用userform

我怀疑您的代码最初是在Sheet object内声明的。

Worksheet objects with IDE

从此处可以访问包含ChartObjects对象的当前worksheet object

修复代码的一种方法是将其移动到所需的工作表中。您还可以参数化工作簿名称,如下所示:

Sub DeleteGraph(ByVal WorksheetName AS String)

    For Each objCht In Sheets(WorksheetName).ChartObjects
        For Each s In objCht.Chart.SeriesCollection
            s.Delete
        Next s
    Next objCht

End Sub