Excel VBA检查迷你图中的数据点数量
我有一个VBA宏,它在两个文件之间运行比较,并创建一个验证文件,其中列出两个文件之间的数字是否匹配。 我想知道VBA是否可以计算出一个迷你图中的数据点数量? 我的迷你图应该总是有12个数据点,它们存在于另一个选项卡上 我没有任何代码示例,因为我甚至不知道从哪里开始。Excel VBA检查迷你图中的数据点数量,excel,vba,Excel,Vba,我有一个VBA宏,它在两个文件之间运行比较,并创建一个验证文件,其中列出两个文件之间的数字是否匹配。 我想知道VBA是否可以计算出一个迷你图中的数据点数量? 我的迷你图应该总是有12个数据点,它们存在于另一个选项卡上 我没有任何代码示例,因为我甚至不知道从哪里开始。 如果需要的话,我可以提供更多的细节。现在我明白你所说的Sparkine是什么意思了。我误解了,因为我需要把它翻译成德语,我不是英语母语,所以我以为你说的是一个普通的图表对象 现在来看看真正的火花 不可能直接计算数据点。您唯一能做的就
如果需要的话,我可以提供更多的细节。现在我明白你所说的Sparkine是什么意思了。我误解了,因为我需要把它翻译成德语,我不是英语母语,所以我以为你说的是一个普通的图表对象 现在来看看真正的火花 不可能直接计算数据点。您唯一能做的就是验证数据源,看看它有多大,有多少个单元格:
Public Sub CountSparklineDataPoints()
Dim oSparkGroup As SparklineGroup
With Worksheets("Sheet1")
For Each oSparkGroup In ActiveSheet.Columns("A").SparklineGroups 'all sparklines in column A are processed
.Range(oSparkGroup.Item(1).Location.Address).Offset(0, 4) = .Range(oSparkGroup.Item(1).SourceData).Cells.Count
'write 4 columns right of the sparkline = the count of the cells in sourcedata
Next oSparkGroup
End With
End Sub
注意,这也会对SourceData中包含的空单元格进行计数。因此,这是SourceData大小是否正确的证明
对于外部地址,这将更加广泛:
Public Sub CountSparklineDataPoints()
Dim oSparkGroup As SparklineGroup
With Worksheets("Sheet1")
For Each oSparkGroup In ActiveSheet.Columns("E").SparklineGroups 'all sparklines in column A are processed
.Range(oSparkGroup.Item(1).Location.Address).Offset(0, 4) = RangeFromAddress(oSparkGroup.Item(1).SourceData).Cells.Count
'write 4 columns right of the sparkline = the count of the cells in sourcedata
Next oSparkGroup
End With
End Sub
'================================
' VBA Get Range from address string
'
' http://www.exceltoolset.com
'================================
Function RangeFromAddress( _
ByRef Address As String, _
Optional obj As Object) As Range
Dim Wb As Workbook, FallbackWb As Workbook
Dim sh As Worksheet, FallbackSh As Worksheet
Dim w, s, a As String
Dim i As Long, j As Long
Dim n As Name
On Error Resume Next
Set n = Names(Address)
If Not (n Is Nothing) Then
Set RangeFromAddress = n.RefersToRange
Exit Function
End If
If Not (obj Is Nothing) Then
Set FallbackWb = GetObjectParentWorkbook(obj)
Set FallbackSh = GetObjectParentSheet(obj)
Else
Set FallbackWb = ActiveWorkbook
Set FallbackSh = ActiveSheet
End If
i = InStr(Address, "!")
If i = 0 Then
Set RangeFromAddress = FallbackSh.Range(Address)
Else
s = Left$(Address, i - 1)
a = Mid$(Address, i + 1)
If InStr(s, "'") = 1 Then
s = Mid$(s, 2, Len(s) - 2)
End If
i = 1
Do Until i > Len(s)
If Mid$(s, i, 2) = "''" Then
s = Left$(s, i - 1) & Mid$(s, i + 1)
End If
i = i + 1
Loop
i = InStr(s, "]")
If i = 0 Then
Set sh = FallbackWb.Sheets(s)
Else
w = Left$(s, i - 1)
j = InStr(w, "[")
If j <> 0 Then w = Left$(w, j - 1) & Mid$(w, j + 1)
s = Mid$(s, i + 1)
Set Wb = Workbooks(w)
If Wb Is Nothing Then
Application.DisplayAlerts = False
Set Wb = Workbooks.Open(Filename:=w, Notify:=True)
Application.DisplayAlerts = True
End If
Set sh = Wb.Sheets(s)
End If
Set RangeFromAddress = sh.Range(a)
End If
End Function
Function GetObjectParentWorkbook(aObject As Object) As Workbook
Dim o As Object
On Error GoTo ErrorHandle
If aObject Is Nothing Then GoTo ErrorExit
Set o = aObject.Parent
If TypeOf aObject Is Workbook Then
Set GetObjectParentWorkbook = aObject
GoTo ErrorExit
End If
Do Until (TypeOf o Is Workbook) Or (TypeOf o Is Application)
Set o = o.Parent
Loop
If TypeOf o Is Workbook Then Set GetObjectParentWorkbook = o
ErrorExit:
Exit Function
ErrorHandle:
Resume ErrorExit
End Function
Function GetObjectParentSheet(aObject As Object) As Object
Dim op As Object
On Error Resume Next
If aObject Is Nothing Then GoTo ErrorExit
Set op = aObject.Parent
If op Is Nothing Then GoTo ErrorExit
If TypeOf op Is Workbook Then
Set GetObjectParentSheet = aObject
GoTo ErrorExit
End If
Do Until (TypeOf op Is Worksheet) Or (TypeOf op Is Application)
Set op = op.Parent
Loop
If TypeOf op Is Worksheet Then Set GetObjectParentSheet = op
ErrorExit:
Exit Function
End Function
你只需要在一张纸上数一数这个范围的数据点,而这张纸就是这个闪光点的来源,不是吗?我不太清楚你要的是什么。不,有几次数据范围是正确的,但小火花没有正确更新。我想特别计算一下sparkline中显示的点的数量如果为sparkline设置数据源范围,例如A1:B12一次,如果更改该范围内的值,它应该始终正确更新。如果没有,你应该在你的过程中找到你的错误并修复它。即使有可能,计算任何点数的变通方法也将是一种糟糕的做法。它有时不起作用,取决于数据源的更新方式。例如,剪切对删除一行有不同的效果。这不是工作,这是安全检查。目前,有人实际上手动查看了12个不同的闪屏,以确保它们已从上周正确更新。如果我可以让我的宏检查其中是否有12个数据点,那么这对我们将是有益的。我的方法是确保,例如,在源范围内,没有人可以删除/移动/插入行,而只能编辑值。或者是一个脚本,它只是为你的闪影设置了正确的源代码范围,不管它们以前是对的还是错的。这样,您不需要执行任何花哨的测试,但要确保一切都是正确的。谢谢您的帮助,我发现您的代码有一个错误。应用程序定义或对象定义错误。我的数据点位于不同的选项卡上。我需要把它写进代码吗?对于外部地址来说,获取它们的范围是相当麻烦的。请参阅更新的答案。谢谢,但我仍然无法运行。我不确定我是否正确运行了它,我是否应该将所有这些代码存储在一个模块中,然后只运行宏?当然,您需要将ActiveSheet.ColumnsE更改为闪线所在的列,或者更改为工作表中每个单元格的ActiveSheet.Cells。这段代码已经过测试并为我工作。正如您可以想象的那样,“未工作”不是有效的错误描述。这就像当你说我的车坏了,问题可能是从空汽油到坏马达或被盗车轮。因此,如果你希望得到帮助,你必须在描述中尽可能详细。至少错误信息和发生位置是必要的,越多越好。努力一点!