【发布时间】:2023-03-30 14:20:01
【问题描述】:
我正在尝试使用 VBA 创建使用动态范围的图表。具体来说,我有一个Excel table 如下
根据这些数据,我想创建一个图表,根据要求更改日期范围。例如,有一次,我需要为 7 月 1 日至 7 月 6 日制作一张图表,而在另一种情况下,我需要制作一张从 7 月 10 日至 7 月 14 日的图表。
以下是我生成这种图表的尝试,但我觉得除了我的方法之外还有更好的方法。因此,我的问题是,还有其他更好的方法吗?
1- 我首先在要查找图表的“辅助单元格”中输入日期值。在本例中,单元格 M24 的值为 7 月 10 日,而单元格 M26 的值为 7 月 14 日。
2- 然后,我使用match() 函数从表的日期列中查找位置。函数是=MATCH(M24,Table1[Dates],0)和=MATCH(M26,Table1[Dates],0)。
3- 鉴于我有日期的相对位置,然后我使用以下 VBA 代码生成图表:
Private Sub CommandButton1_Click()
Dim mySheet As Worksheet
Dim myShape As Shape
Dim myChart As Chart
Dim myVal1 As String
Dim myVal2 As String
Set mySheet = ActiveWorkbook.Worksheets("dataSheet")
If myShape Is Nothing Then
Set myShape = mySheet.Shapes.AddChart(XlChartType:=xlColumnClustered, _
Left:=CommandButton1.Left + CommandButton1.Width + 2, _
Width:=370, Height:=200)
End If
'In the following, I am offsetting from the first cell
'of my Table, which contains the `value 1-Jul.
'My objective is to use the range 10-Jul to 14th Jul,
'so I also add a column offset
'Cells O24 and O26 contain the results of the match functions
myVal1 = Range("B4").Offset(Range("O24").Value, 0).Address
myVal2 = Range("B4").Offset(Range("O26").Value, 4).Address
Set myChart = myShape.Chart
myChart.ChartType = xlLine
myChart.SetSourceData Source:=Sheets("dataSheet") _
.Range(CStr(myVal1 & ":" & myVal2))
End Sub
所以,现在希望我的问题很清楚,有人可以教我一个比这个更好的方法吗?对我来说,这似乎更像是一种黑客方法,而不是正确的编码......
非常感谢!
【问题讨论】:
-
我认为您设置它的方式非常可靠。为什么您认为可能有更好的方法?
-
@Dave.Gugg 感谢您的回复。有两个原因: 1. 我是 VBA 的业余爱好者,所以我觉得我的尝试仅此而已 - 业余尝试。 2. 以字符串形式检索单元格地址,然后将它们连接起来以创建范围值 (B4:D10) 似乎是一种不正确的工作方式,不是吗?
-
为什么不简单地过滤日期列以显示两个日期之间的记录?默认情况下,图表仅在未隐藏的单元格中绘制数据。
标签: vba excel excel-2007