PowerPoint VBA“Out of Memory”

时间:2015-12-04 14:50:22

标签: vba out-of-memory powerpoint-vba

这是我第一次尝试在PowerPoint中使用VBA,所以我希望它只是糟糕的代码设计,并且可以轻松修复。

每个月我都会制作一个演示文稿,基本上是一个包含3列的值表,代表过去3个月。当我在下个月更新它时,我希望中间列成为左列,右列成为中间列。然后右栏将获得新数据。

目前我所要做的就是按照描述在列上“移动”文本。像这样:

Sub MoveData()

    Dim Infra1Array(270, 267, 211, 213, 50, 51, 145, 185) As Integer

    For i = 1 To UBound(Infr1Array)
        ActivePresentation.Slides(5).Shapes("" & Infr1Array(i) & "_1").TextFrame.TextRange.Text = ActivePresentation.Slides(5).Shapes("" & Infr1Array(i) & "_2").TextFrame.TextRange.Text
        ActivePresentation.Slides(5).Shapes("" & Infr1Array(i) & "_2").TextFrame.TextRange.Text = ActivePresentation.Slides(5).Shapes("" & Infr1Array(i) & "_3").TextFrame.TextRange.Text
    Next i
End Sub

如果您愿意,可以在我的数组中看到“行”。然后每行有3个文本框,然后形状是带有_1,_2和_3的行号。

然而,当我运行这个循环时,我得到“内存不足”。我做错了什么,或者我对PowerPoint有太多期待?

1 个答案:

答案 0 :(得分:1)

问题是您使用以下方法创建的多维数组:

Dim Infra1Array(270, 267, 211, 213, 50, 51, 145, 185) As Integer

最终以270 x 267 x 211 x 213 x 50 x 51 x 145 x 185整数变量...这真的很多:)>系统内存可以处理200,000,000,000,000,000和更多一点

我猜你想要一个包含这8个值的数组。在这种情况下:

Dim Infra1Array(7) As Integer
Infra1Array(0) = 270
Infra1Array(1) = 267
.
.
.
Infra1Array(7) = 185

当您仅将数组用于构建新字符串时,您还可以使用String数组和Split()函数。

总体:

Sub MoveData()
    Dim Infra1Array() As String
    Dim i As Integer

    Infra1Array = Split("270, 267, 211, 213, 50, 51, 145, 185")

    For i = LBound(Infra1Array) To UBound(Infra1Array)
        ActivePresentation.Slides(5).Shapes("" & Infra1Array(i) & "_1").TextFrame.TextRange.Text = ActivePresentation.Slides(5).Shapes("" & Infra1Array(i) & "_2").TextFrame.TextRange.Text
        ActivePresentation.Slides(5).Shapes("" & Infra1Array(i) & "_2").TextFrame.TextRange.Text = ActivePresentation.Slides(5).Shapes("" & Infra1Array(i) & "_3").TextFrame.TextRange.Text
    Next i
End Sub