2016-03-23 5 views
0

Zuerst sah meine Unter wie folgt aus:Verwenden Sie mich. in Funktionen

Sub DeleteGraph() 

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

End Sub 

Dies funktionierte nicht, wenn sie von dem Hauptcode wegen Me genannt.

Dann habe ich versucht, dies:

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 

Das ist nicht von der Arbeit „Set test = Me.CodeName“

ich um das Web durchsucht und herausgefunden, dass ich 'wahrscheinlich verwenden CallByName ', aber ich kann es scheinbar nicht funktionieren lassen. Ist das der richtige Ansatz und wenn ja, wie?

Vielen Dank!

+1

Warum nicht einfach 'ActiveSheet' verwenden? Welches Objekt soll "Ich" darstellen, wenn es nicht das aktive Blatt ist? –

+0

Ich denke, es könnte funktionieren, aber ich bin einfach nicht glücklich darüber, 'ActiveSheet' zu verwenden. Gibt es eine Möglichkeit, es ohne Active Sheet arbeiten zu lassen? – Mobz

+0

Sie könnten den Arbeitsblattnamen natürlich fest codieren, aber "ActiveSheet" einmal ganz am Anfang aufzurufen, um es in eine Variable zu ziehen, ist nicht schlecht - d. H. "Set test = ActiveSheet". – Comintern

Antwort

1

In VBA Me ist kontextsensitiv. Es bietet eine Referenz auf das übergeordnete Objekt. Wenn Ihr Code innerhalb von ThisWorkbookMe deklariert ist, wird auf den aktuellen workbook object verwiesen. Wenn Sie Ihren Code innerhalb eines Benutzerformulars deklarieren, wird Me auf diesen userform verweisen.

Ich vermute, dass Ihr Code ursprünglich innerhalb einer Sheet object deklariert wurde.

Worksheet objects with IDE

Von hier aus wäre es zum aktuellen worksheet object, zuzugreifen, die das ChartObjects Objekt enthält.

Eine Möglichkeit, Ihren Code zu reparieren, besteht darin, ihn in das erforderliche Arbeitsblatt zu verschieben. Sie könnten auch den Namen der Arbeitsmappe wie folgt parametrisieren:

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 
Verwandte Themen