gpt4 book ai didi

vba - vba 代码中的运行时错误

转载 作者:行者123 更新时间:2023-12-04 04:51:37 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





using VBA for a pie bubble chart in excel

(1 个回答)


8年前关闭。




我的代码是

    Sub PieMarkers()

Dim chtMarker As Chart
Dim chtMain As Chart
Dim intPoint As Integer
Dim rngRow As Range
Dim lngPointIndex As Long
Dim thmColor As Long
Dim myTheme As String


Application.ScreenUpdating = False
Set chtMarker = ActiveSheet.ChartObjects("chtMarker").Chart
Set chtMain = ActiveSheet.ChartObjects("chtMain").Chart

Set chtMain = ActiveSheet.ChartObjects("chtMain").Chart
Set rngRow = Range(ThisWorkbook.Names("PieChartValues").RefersTo)

For Each rngRow In Range("PieChartValues").Rows
chtMarker.SeriesCollection(1).Values = rngRow
ThisWorkbook.Theme.ThemeColorScheme.Load GetColorScheme(thmColor)
chtMarker.Parent.CopyPicture xlScreen, xlPicture
lngPointIndex = lngPointIndex + 1
chtMain.SeriesCollection(1).Points(lngPointIndex).Paste
thmColor = thmColor + 1
Next

lngPointIndex = 0

Application.ScreenUpdating = True
End Sub

Function GetColorScheme(i As Long) As String
Const thmColor1 As String = "C:\Program Files\Microsoft Office\Document Themes 15\Theme Colors\Blue Green.xml"
Const thmColor2 As String = "C:\Program Files\Microsoft Office\Document Themes 15\Theme Colors\Orange Red.xml"
Select Case i
Case 0
GetColorScheme = thmColor1
Case 1
GetColorScheme = thmColor2
End Select
End Function

该代码旨在更改用作气泡图中气泡的连续饼图的颜色主题。所以该函数只是为了选择一个我之前保存为字符串的配色方案,然后根据脚本的运行进行更改,以便第一个饼图的颜色不同于下一个饼图......
在该行调试代码时,我确实收到一条错误消息
 ThisWorkbook.Theme.ThemeColorScheme.Load GetColorScheme(thmColor)

错误消息是运行时错误 2147024809 说指示的值超出范围..有人可以帮助我这里似乎是什么问题吗?

最佳答案

正如我在原始线程的评论中提到的......

using VBA for a pie bubble chart in excel

此运行时错误的原因

有两个明显的事情可能会导致此错误:

  • 宏和函数当前设置为仅使用两种配色方案,因此如果您尝试第三次或更多次调用此函数,则会出现此错误。如果您通过任何 thmColor不是 0 的索引值或 1 ,函数将返回 False而不是有效的字符串。
  • 在返回的字符串值为 的任何情况下,宏也将失败。不是 用户计算机上已安装主题的有效路径和文件名。仔细检查您是否为 thmColor1 提供了有效的文件路径和 thmColor2函数内部的变量。

  • 原始答案已更新,以允许在两个指定的配色方案之间旋转。使用 MOD Select Case 中的函数声明,因此:
    Function GetColorScheme(i as Long) as String  '## Returns the path of a color scheme to load
    '## Currently set up to ROTATE between only two color schemes.
    ' You can add more, but you will also need to change the
    ' Select Case i Mod 2, to i Mod n; where n = the number
    ' of schemes you will rotate through.
    Const thmColor1 as String = "C:\Program Files (x86)\Microsoft Office\Document Themes 14\Theme Colors\Apex.xml"
    Const thmColor2 as String = "C:\Program Files (x86)\Microsoft Office\Document Themes 14\Theme Colors\Essential.xml"


    Select Case i Mod 2 '## i Mod n; where n = the number of Color Schemes.
    case 0
    GetColorScheme = thmColor1
    case 1
    GetColorScheme = thmColor2
    'Case n '## You should have an additional case for each 1 to n.
    '
    End Select
    End Function

    对于其他颜色,您需要初始化代表其他主题文件的其他变量,并修改 Select Case相应地阻止。

    你可以做得比这更复杂,但在不知道你需要应用多少这些的情况下,我提供了一个可行的、可扩展的解决方案。如果您有非常多的图表并且想要遍历可用的主题,也可以这样做。更改的复杂程度取决于您想要多少差异,但您可以想象声明一个数组并捕获 所有 在 themes 文件夹中安装了主题,然后按顺序迭代这些主题。

    关于vba - vba 代码中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354071/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com