【发布时间】:2017-12-07 11:42:26
【问题描述】:
我需要能够识别 Excel 图表(在工作表上)从中获取数据的工作表。我只需要系列 1 引用的数据表。我已经开始尝试从 .SeriesCollection(1).Formula 中提取工作表名称,但它变得非常复杂。这是我到目前为止所得到的:
Sub GetChartDataSheet()
Dim DataSheetName As String
Dim DataSheet As Worksheet
DataSheetName = ActiveChart.SeriesCollection(1).Formula
DataSheetName = Left(DataSheetName, InStr(1, DataSheetName, "!$") - 1)
DataSheetName = WorksheetFunction.Replace(DataSheetName, 1, Len("=series("), "")
If Left(DataSheetName, 1) = "'" And Right(DataSheetName, 1) = "'" Then DataSheetName = Mid(DataSheetName, 2, Len(DataSheetName) - 2)
DataSheetName = Replace(DataSheetName, "''", "'")
Set DataSheet = Sheets(DataSheetName)
End Sub
这在很多情况下都有效,但如果我的用户有一个奇怪的工作表名称(例如 Sh'e$,,t!3!$),它就会失败。如果系列 1 已命名(例如 .SeriesCollection(1).Formula = "=SERIES(**"Hell,o !"**,'Sh''e e$,,t!3!$'!$B$2:$B$18,'Sh''e e$,,t!3!$'!$C$2:$C$18,1)"。
有没有简单的方法来解决这个问题?
【问题讨论】:
-
告诉用户停止使用愚蠢的工作表名称
-
干杯!我一次又一次地告诉他们,但总有人不听我的警告!
-
在执行代码之前验证工作表名称并弹出警告。或者只是重命名工作表...用下划线替换任何不是 [a-zA-Z0-9] 的内容