这是我第一次尝试在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有太多期待?
答案 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