2015-12-04 37 views
0

這是我第一次在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

問題是你與創建多維數組:

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

在270×267 X 211 X 213×50×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 

當您使用數組只有建立新的字符串,那麼你也可以使用一個字符串數組和斯普利特()函數。

總評:

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 
+0

哦哈哈,輝煌!你可能就在那裏......我會按照你的建議做很長的一段路。如果有其他人碰到同樣的事情,我會留下來的。 – Chris

+1

如果您還可以使用String數組生活,則可以使用Split()函數使您的生活更輕鬆一些。從上面的代碼我只看到你使用該值來加入另一個字符串....所以這可能就足夠了 – cboden

+0

它只是整數的數組,現在爲一組數字重複相同的代碼。我現在正努力讓循環運行,輸入不匹配。我認爲我的陣列仍然沒有正確設置,所以我會繼續工作。 – Chris