【问题标题】:VBA for loop using the counter integer to retrieve content from cellsVBA for循环使用计数器整数从单元格中检索内容
【发布时间】:2018-09-10 09:36:16
【问题描述】:

我真的是 VBA 宏及其语法的初学者,所以请多多包涵。 我一直在尝试将特定单元格中的内容分配给散点图中的标签。首先记录我自己的手动分配并“清理”该代码。适用于我现在使用的样本集。

Sub Rename_scatter()
'
' Rename_scatter Macro
'
'
    ActiveSheet.ChartObjects("Risikomatrix").Activate
    ActiveChart.FullSeriesCollection(1).DataLabels.Select

    ActiveChart.FullSeriesCollection(1).Points(1).DataLabel.Select
      ActiveChart.SeriesCollection(1).DataLabels(1).Format.TextFrame2.TextRange. _
        Characters.Text = ""
      ActiveChart.SeriesCollection(1).DataLabels(1).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "='Risiko-Log'!$B$2", 1

    ActiveChart.FullSeriesCollection(1).Points(2).DataLabel.Select
      ActiveChart.SeriesCollection(1).DataLabels(2).Format.TextFrame2.TextRange. _
        Characters.Text = ""
      ActiveChart.SeriesCollection(1).DataLabels(2).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "='Risiko-Log'!$B$3", 1

    ActiveChart.FullSeriesCollection(1).Points(3).DataLabel.Select
      ActiveChart.SeriesCollection(1).DataLabels(3).Format.TextFrame2.TextRange. _
        Characters.Text = ""
      ActiveChart.SeriesCollection(1).DataLabels(3).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "='Risiko-Log'!$B$4", 1

    ActiveChart.FullSeriesCollection(1).Points(4).DataLabel.Select
      ActiveChart.SeriesCollection(1).DataLabels(4).Format.TextFrame2.TextRange. _
        Characters.Text = ""
      ActiveChart.SeriesCollection(1).DataLabels(4).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "='Risiko-Log'!$B$5", 1

    ActiveChart.FullSeriesCollection(1).Points(5).DataLabel.Select
      ActiveChart.SeriesCollection(1).DataLabels(5).Format.TextFrame2.TextRange. _
        Characters.Text = ""
      ActiveChart.SeriesCollection(1).DataLabels(5).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "='Risiko-Log'!$B$6", 1

End Sub

显然,这不是很有效,所以我想在 for 循环中重新创建该方法,使用 i 计数器选择每个引用的单元格(点和 DataLabels 将使用 i 并且索引或单元格规范将使用 i +1)。

一段时间以来,我一直在尝试几种不同的方法,但似乎无法正确使用语法。有没有人有想法可以帮助我度过难关并重新获得动力?任何帮助表示赞赏! 这是我现在所处的位置:

    Sub Rename_scat()
'
' Rename_scat Macro
'
'
    Dim i As Integer

    Dim LastRow As Integer
    LastRow = Range("'Risiko-Log'!A" & Rows.Count).End(xlUp).Row


    For i = 1 To LastRow
    ActiveSheet.ChartObjects("Risikomatrix").Activate
    ActiveChart.FullSeriesCollection(1).DataLabels.Select
    ActiveChart.FullSeriesCollection(1).Points(i).DataLabel.Select
      ActiveChart.SeriesCollection(1).DataLabels(i).Format.TextFrame2.TextRange. _
        Characters.Text = ""
      ActiveChart.SeriesCollection(1).DataLabels(i).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "'Risiko-Log'!.Cells(i + 1, 2)", 1
    Next i

End Sub

【问题讨论】:

    标签: vba excel for-loop syntax scatter-plot


    【解决方案1】:

     ActiveChart.SeriesCollection(1).DataLabels(i).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "'Risiko-Log'!.Cells(i + 1, 2)", 1
    

    您将 i+1 括在语音标记中,因此它被视为字符串。你需要它是一个计算,所以它需要在语音标记之外。使用

    ActiveChart.SeriesCollection(1).DataLabels(i).Format.TextFrame2.TextRange. _
        InsertChartField msoChartFieldFormula, "'Risiko-Log'!.Cells(" & i + 1 & ", 2)", 1
    

    【讨论】:

    • 你好!谢谢你看。这对我来说很有意义......我替换了代码 sn-p 但不幸的是仍然得到“指定的参数具有无效值”。相同行的错误消息。知道我哪里出错了吗?
    • DataLabels(i) - 在 VBA 中,大多数索引从 0 开始,但行号从 1 开始,所以我认为您需要 DataLabels(i-1) - 在循环结束时,您尝试访问非-存在的索引号
    【解决方案2】:

    继续与 For-Loop 作斗争,但只是设法使用“While”解决了所有问题。

    Sub Rename_scat()
    '
    ' Rename_scat Macro
    '
    '
        Dim i As Integer
        i = 2
        While IsEmpty("'Risiko-Log'!.Cells(" & i & ",1).Value")
            ActiveSheet.ChartObjects("Risikomatrix").Activate
            ActiveChart.FullSeriesCollection(1).DataLabels.Select
            ActiveChart.FullSeriesCollection(1).Points(i - 1).DataLabel.Select
            ActiveChart.SeriesCollection(1).DataLabels(i - 1).Format.TextFrame2.TextRange. _
                Characters.Text = ""
            ActiveChart.SeriesCollection(1).DataLabels(i - 1).Format.TextFrame2.TextRange. _
                InsertChartField msoChartFieldFormula, "'Risiko-Log'!.Cells(" & i & ", 2)", 1
            i = i + 1
        Wend
    
    End Sub
    

    虽然仍然跳过了风险日志的第一个条目(不仅仅是标题行),但即使我更改了 i 的起始值,它也无法正常工作。隐藏那个麻烦行最终必须做到这一点:D

    感谢您的帮助和输入@Harassed Dad!

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 2018-03-01
      相关资源
      最近更新 更多