Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在工作表中循环以在VBA中创建图形_Vba_Excel_Charts - Fatal编程技术网

在工作表中循环以在VBA中创建图形

在工作表中循环以在VBA中创建图形,vba,excel,charts,Vba,Excel,Charts,我试图根据工作表中的一些数据创建一个图表。我有一个创建图形的代码 问题 我正在尝试循环检查工作簿中的工作表,以检查图表是否已经存在,在这种情况下,我将激活它,清除以前的数据并放入新数据 如果不是,我创建一个新的图形并将数据放入 我试图创建一个双循环来检查工作表的名称是否匹配,但这不起作用(无法将图表设置为“无”) 有什么办法吗 当前代码(仅相关部分) 名称“Ret”是图表对象的属性,而不是图表 最高的层次结构是ChartObject,在它下面可以找到Chart、Name和其他许多层次结构,请参见

我试图根据工作表中的一些数据创建一个图表。我有一个创建图形的代码

问题 我正在尝试循环检查工作簿中的工作表,以检查图表是否已经存在,在这种情况下,我将激活它,清除以前的数据并放入新数据

如果不是,我创建一个新的图形并将数据放入

我试图创建一个双循环来检查工作表的名称是否匹配,但这不起作用(无法将图表设置为“无”)

有什么办法吗

当前代码(仅相关部分)

名称
“Ret”是
图表对象
的属性,而不是
图表

最高的层次结构是
ChartObject
,在它下面可以找到
Chart
Name
和其他许多层次结构,请参见下面的简图:

ChartObject
--> Chart
  |--> ChartArea
  |--> Axes
  |--> SeriesCollection
     |--> Format.Line
--> Name
--> Top 
--> Left  
--> Height
--> Width
注释:我建议使用
图表对象
,然后您可以轻松地嵌套在下面以修改所有其他属性。此外,几乎所有情况下都没有理由使用
Select
Selection
,而是使用完全限定的
ChartObjects
及其嵌套属性

下面的代码将遍历所有
工作表
,然后对于每个
工作表
将遍历所有
图表对象
,并搜索“Ret”

代码

Option Explicit

Sub LoopSheets_ChartObjects()

Dim RetChart As Chart
Dim ChtObj As ChartObject
Dim ws As Worksheet
Dim w As Workbook

Set w = ThisWorkbook

For Each ws In w.Worksheets
    If ws.Name = "RetGraph" Then
        For Each ChtObj In ws.ChartObjects
            If ChtObj.Name = "Ret" Then '<-- if there is a match
                Set RetChart = ChtObj.Chart ' <-- set chart to ChartObject.Chart
            End If
        Next ChtObj
    End If
 Next ws

If RetChart Is Nothing Then
    MsgBox "NOT Found"
    ' do your coding stuff
End If

End Sub
选项显式
子循环表\u图表对象()
作为图表的图表
将ChtObj设置为图表对象
将ws设置为工作表
将w作为工作簿
Set w=此工作簿
对于w工作表中的每个ws
如果ws.Name=“RetGraph”,则
对于ws.ChartObjects中的每个ChtObj

如果ChtObj.Name=“Ret”,则可以避免在图纸中循环

Dim RetChart As Chart

On Error Resume Next
Set RetChart = w.Charts("RetGraph")
On Error GoTo 0

If RetChart Is Nothing Then '<--| chart not found
    MsgBox "NOT Found"
    ' do your coding stuff
Else ' <--| chart found
    RetChart.ChartTitle.Text = "Test" '<-- for debug only
End If
Dim RetChart作为图表
出错时继续下一步
设置RetChart=w.Charts(“RetChart”)
错误转到0

如果RetChart算不了什么,那么“谢谢你的回答。我知道你在工作表中循环浏览了图表。我的错误是在图表表中创建图表。我现在正试图循环浏览它,看看图表是否已经存在。如果没有,请创建一个图表。
Dim RetChart As Chart
Dim Cht_Sht As Chart

For Each Cht_Sht In w.Charts
    If Cht_Sht.Name = "RetGraph" Then
        Set RetChart = Cht_Sht
    End If
Next Cht_Sht

If RetChart Is Nothing Then
    MsgBox "NOT Found"
    ' do your coding stuff

Else ' <-- chart found
    RetChart.ChartTitle.Text = "Test" '<-- for debug only
End If
Dim RetChart As Chart

On Error Resume Next
Set RetChart = w.Charts("RetGraph")
On Error GoTo 0

If RetChart Is Nothing Then '<--| chart not found
    MsgBox "NOT Found"
    ' do your coding stuff
Else ' <--| chart found
    RetChart.ChartTitle.Text = "Test" '<-- for debug only
End If