2015-04-29 6 views
2

Я добавляю таблицу с помощью VBA с помощью следующих команд:Как проверить, если схема была уже создана

Dim CsvVisualization As ChartObject 
Set ChartSizePosition = Range("B8:I25") 
Set CsvVisualization = ThisWorkbook.Sheets("Übersicht").ChartObjects.Add(ChartSizePosition.Left, ChartSizePosition.Top, ChartSizePosition.Width, ChartSizePosition.Height) 
CsvVisualization.Name = "MeasurementVisualization" 
With CsvVisualization.Chart 
    .ChartType = xlXYScatterSmoothNoMarkers 
... 

Как я мог proofe, если эта карта уже была создана, когда файл Excel будет открыт? Я пытался что-то вроде:

If CsvVisualization Is Nothing Then 

Но CsvVisualization не будет держать его значение, когда файл закрывается и открывается снова.

Благодарим за помощь!

ответ

1

Вы можете посмотреть на всех графиках в книге, чтобы увидеть, если диаграмма с таким именем уже существует, когда лист открывается:

Private Sub Workbook_Open() 
    Dim testChart As ChartObject 

    For Each testChart In ThisWorkbook.Charts 
     If testChart.Name = "MeasurementVisualization" Then 
      'Chart exists, so do something or not or whatever or what have you 
     End If 
    Next 
End Sub 
+0

бить меня менее чем за минуту ... – FreeMan

+0

@FreeMan Мне нравится, что вы просто смотрите на диаграммы на вкладке, о которой заботится OP. Я просто небрежно смотрю на всех с этим. – JNevill

+0

Я в основном копировал этот код из проекта, над которым я сейчас работаю, а затем застрял в нем свои биты создания диаграммы ... – FreeMan

3
Dim CsvVisualization As ChartObject 
Dim MyChartName as string 
Dim CreateChart as Boolean 

MyChartName = "MeasurementVisualization" 
CreateChart = True 

If ThisWorkbook.Sheets("Übersicht").ChartObjects.Count = 0 Then 
    For Each CsvVisualization in ThisWorkbook.Sheets("Übersicht").ChartObjects 
    If CsvVisualization.name = MyChartName then 
     CreateChart = False 
    End If 
    Next 
End if 

If CreateChart then 
    Set ChartSizePosition = Range("B8:I25") 
    Set CsvVisualization = ThisWorkbook.Sheets("Übersicht").ChartObjects.Add(ChartSizePosition.Left, ChartSizePosition.Top, ChartSizePosition.Width, ChartSizePosition.Height) 
CsvVisualization.Name = "MeasurementVisualization" 
    With CsvVisualization.Chart 
    .ChartType = xlXYScatterSmoothNoMarkers 
... 
End If 
0

Вы можете попробовать, если вы получите ошибку ссылающийся на объект

On Error Resume Next 
Set CurrentChart = thisworkbook.sheets("Übersicht").ChartObjects("MeasurementVisualization") 
On Error GoTo 0 

If IsEmpty(CurrentChart) Then 
MsgBox "Not found" 
Else 
CurrentChart.Activate 
End If 

вы можете заменить свои коды внутри If с созданием диаграммы ....

Смежные вопросы