Excel VBA:部分代码仅在单步执行时运行。如果从其他子例程调用或继续,则不运行
我正在为我的办公室编写图表格式Excel加载项。 为了处理嵌入式图表和图表表,我在第一个子例程中编写了两个循环。每次激活图表时,都会调用第二个子例程来处理Excel VBA:部分代码仅在单步执行时运行。如果从其他子例程调用或继续,则不运行,excel,vba,Excel,Vba,我正在为我的办公室编写图表格式Excel加载项。 为了处理嵌入式图表和图表表,我在第一个子例程中编写了两个循环。每次激活图表时,都会调用第二个子例程来处理ActiveChart格式设置 我的部分目标是将数据标签应用于折线图,但是,即使设置了DataLabel.ShowSeriesName=True,我的代码也会生成如图所示的空白数据标签。有两种情况下正确添加标签,如下所述 Option Explicit Sub CESAR_style () Dim a as application Dim w
ActiveChart
格式设置
我的部分目标是将数据标签应用于折线图,但是,即使设置了DataLabel.ShowSeriesName=True
,我的代码也会生成如图所示的空白数据标签。有两种情况下正确添加标签,如下所述
Option Explicit
Sub CESAR_style ()
Dim a as application
Dim wb As Workbook
Dim ws As Worksheet
Dim chtO As ChartObject
Dim cht As Chart
Set twb = ThisWorkbook
Set a = Application
' Turn off events
a.EnableEvents = False
' Loop through all chart sheets
For Each cht In a.Charts
cht.Activate
Call Format
Next
' Loop through all chart objects
For Each ws In ActiveWorkbook.Worksheets
For Each chtO In ws.ChartObjects
chtO.Activate
Call Format
Next
Next
a.EnableEvents = True
End Sub
代码在这一点上运行正常,但是当运行
.ApplyDataLabels
时,它会创建空白数据标签,如图[blank data labels]所示
我在.ApplyDataLabels
添加了一个断点。如果我用F5或“播放”按钮继续代码,它会继续给我空白标签。然而,如果我使用F8或单步执行代码,代码将成功执行,并获得我想要的标签,如图所示。
第二个令人困惑的特性是,当我将.ApplyDataLabels
段移动到CESAR_风格的子例程时,代码成功运行
我曾尝试使用睡眠延迟代码,但没有成功
在设置这两个子例程的过程中,是否有什么地方我做错了
非常感谢您的任何帮助或见解。让我知道是否需要其他信息来让问题更清楚。一般来说,使用VBA时,我发现如果某个东西在执行时有效,但在运行时无效,则这是一个选择/聚焦问题。当您单步执行代码时,您可能会选择图表所在的工作表,以便查看代码正在执行的操作,这实际上是为宏执行步骤。在激活图表之前,请尝试激活图表所在的工作表。如果不起作用,请尝试在工作表上选择一个单元格。通常使用VBA时,我发现如果某个单元格在单步执行时有效,但在运行时无效,则这是一个选择/焦点问题。当您单步执行代码时,您可能会选择图表所在的工作表,以便查看代码正在执行的操作,这实际上是为宏执行步骤。在激活图表之前,请尝试激活图表所在的工作表。如果不起作用,请尝试在工作表上选择一个单元格
Private Sub Format()
Dim i As Integer
Dim j As Integer
With ActiveChart
' Count the series in the chart
i = .SeriesCollection.Count
' Code here to add a new series used to make a 'Today' _
reference line dividing history and future
' Add series data labels, excluding the new series added above
' For each data series
For j = 1 To i
With .FullSeriesCollection(j)
' For Line charts
If .ChartType = xlLine Then
' Turn off leader lines for full series
.HasLeaderLines = False
' Add series data label to right of last point in series
With .Points(.Points.Count)
' If a label already exists remove it
If .HasDataLabel = True Then
.HasDataLabel = False
Else
End If
' Add a series data label
.ApplyDataLabels ShowSeriesName:=True, _
ShowValue:=False, _
HasLeaderLines:=False
End With
Else
' Code here to handle stacked area charts; working properly
End If
End With
Next
End With
End Sub