首先我的潜点看起来像这样:
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',但我似乎无法使其工作。这是正确的方法,如果是这样,怎么办?
谢谢!
答案 0 :(得分:2)
在VBA中Me
是上下文敏感的。它提供了对父对象的引用。如果您的代码在ThisWorkbook
Me
内声明,则会指向当前的workbook object。如果您在用户表单Me
中声明代码,则会引用userform。
我怀疑您的代码最初是在Sheet object内声明的。
从此处可以访问包含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