VBA for 循环使用计数器整数从单元格中检索内容
VBA for loop using the counter integer to retrieve content from cells
我真的是 VBA 宏及其语法的初学者,所以请多多包涵。
我一直在尝试将特定单元格的内容分配给散点图中的标签。首先记录我自己的手动作业和 "cleaning" 该代码。适用于我现在使用的样本集。
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", 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", 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", 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", 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", 1
End Sub
显然,这不是很有效,所以我想在 for 循环中重新创建该方法,使用 i 计数器选择每个引用的单元格(点和数据标签将使用 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
在
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
继续与 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
仍然会跳过风险日志的第一个条目(不仅仅是 header 行),但即使我更改了 i 的起始值,它也无法正常工作。隐藏 trouble-row 最后不得不做这个把戏 :D
感谢您的帮助和输入@Harassed 爸爸!
我真的是 VBA 宏及其语法的初学者,所以请多多包涵。 我一直在尝试将特定单元格的内容分配给散点图中的标签。首先记录我自己的手动作业和 "cleaning" 该代码。适用于我现在使用的样本集。
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", 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", 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", 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", 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", 1
End Sub
显然,这不是很有效,所以我想在 for 循环中重新创建该方法,使用 i 计数器选择每个引用的单元格(点和数据标签将使用 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
在
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
继续与 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
仍然会跳过风险日志的第一个条目(不仅仅是 header 行),但即使我更改了 i 的起始值,它也无法正常工作。隐藏 trouble-row 最后不得不做这个把戏 :D
感谢您的帮助和输入@Harassed 爸爸!