Vba 以编程方式访问图表源数据名称
我从同一个工作簿复制了一些图表,但每个图表的源数据(42个图表,每个图表中有6个系列)仍然包含完整的文件名路径。源工作表和单元格是相同的,所以我只想找到路径字符串并将其替换为“”。但是,我找不到获取sourcedata名称的方法(如refedit框中所示)。从那里,我可以替换我需要的东西 我们得到的是:Vba 以编程方式访问图表源数据名称,vba,excel,charts,Vba,Excel,Charts,我从同一个工作簿复制了一些图表,但每个图表的源数据(42个图表,每个图表中有6个系列)仍然包含完整的文件名路径。源工作表和单元格是相同的,所以我只想找到路径字符串并将其替换为“”。但是,我找不到获取sourcedata名称的方法(如refedit框中所示)。从那里,我可以替换我需要的东西 我们得到的是: ActiveChart.SeriesCollection(1).Values=“='C:\[oldfile.xls]Charts.Data'!R1C17:R1C28” 我只想将“”中的部分作为字
ActiveChart.SeriesCollection(1).Values=“='C:\[oldfile.xls]Charts.Data'!R1C17:R1C28”
我只想将“”中的部分作为字符串获取,然后执行我的函数来删除文件路径。如果我尝试从中获取字符串,即:
sourcestring=ActiveChart.SeriesCollection(1).值
我犯了一个错误;VBA从中读取时似乎将其视为数组,但在分配给它时可以使用字符串。有什么想法吗?你是对的,你不能真正得到与“参照编辑”框中显示的相同的公式……你必须在正在处理的序列上操作.formula或.FormulaR1C1属性,然后重新生成公式并将其设置为“值”和/或“xvalues”属性 这段代码应该可以工作,有几个函数可以提取公式的不同部分…我认为它应该适合您,或者至少希望能帮助您找出最好的方法
Sub ChangeActiveChartData()
ChangeChartData ActiveChart
End Sub
Sub ChangeChartData(TheChart As Chart)
If TheChart Is Nothing Then Exit Sub
Dim TheSeries As Series
Set TheSeries = TheChart.SeriesCollection(1)
Dim TheForm As String
TheForm = TheSeries.FormulaR1C1
Dim XValsForm As String
XValsForm = GetXValuesFromFormula(TheForm)
Debug.Print XValsForm
XValsForm = GetRangeFormulaFromFormula(XValsForm)
Debug.Print XValsForm
Dim ValsForm As String
ValsForm = GetValuesFromFormula(TheForm)
Debug.Print ValsForm
ValsForm = GetRangeFormulaFromFormula(ValsForm)
Debug.Print ValsForm
XValsForm = "=" & TheChart.Parent.Parent.Name & "!" & XValsForm ' TheChart's parents parent is the worksheet; we're assuming the chart is embedded in a worksheet
ValsForm = "=" & TheChart.Parent.Parent.Name & "!" & ValsForm
TheSeries.XValues = XValsForm
TheSeries.Values = ValsForm
End Sub
Function GetXValuesFromFormula(SeriesFormula As String) As String
' Find string between first and second commas
Dim FormulaParts() As String
FormulaParts = Split(SeriesFormula, ",")
GetXValuesFromFormula = FormulaParts(1)
End Function
Function GetValuesFromFormula(SeriesFormula As String) As String
' Find string between second and third commas
Dim FormulaParts() As String
FormulaParts = Split(SeriesFormula, ",")
GetValuesFromFormula = FormulaParts(2)
End Function
Function GetRangeFormulaFromFormula(TheFormula As String) As String
' return to the right of the ! character in theformula
Dim ExclamPos As Integer
ExclamPos = InStrRev(TheFormula, "!")
If ExclamPos > 0 Then
GetRangeFormulaFromFormula = Right(TheFormula, Len(TheFormula) - ExclamPos)
Else
GetRangeFormulaFromFormula = TheFormula
End If
End Function