Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:部分代码仅在单步执行时运行。如果从其他子例程调用或继续,则不运行_Excel_Vba - Fatal编程技术网

Excel VBA:部分代码仅在单步执行时运行。如果从其他子例程调用或继续,则不运行

Excel VBA:部分代码仅在单步执行时运行。如果从其他子例程调用或继续,则不运行,excel,vba,Excel,Vba,我正在为我的办公室编写图表格式Excel加载项。 为了处理嵌入式图表和图表表,我在第一个子例程中编写了两个循环。每次激活图表时,都会调用第二个子例程来处理ActiveChart格式设置 我的部分目标是将数据标签应用于折线图,但是,即使设置了DataLabel.ShowSeriesName=True,我的代码也会生成如图所示的空白数据标签。有两种情况下正确添加标签,如下所述 Option Explicit Sub CESAR_style () Dim a as application Dim w

我正在为我的办公室编写图表格式Excel加载项。 为了处理嵌入式图表和图表表,我在第一个子例程中编写了两个循环。每次激活图表时,都会调用第二个子例程来处理
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