运行时错误“7”:内存不足

我正在尝试在Word文档中编辑embedded的图表。 我的源代码如下。 它工作了很长时间,但最近两天没有。 我得到这个错误:

运行时错误“7”:内存不足

我搜查了很多,但我不明白这个问题。 当我关机后,打开它,然后它工作正常,但我得到错误后。

它在这部分给出错误:

'create range with Cell Set oChart = oInShapes.Chart oChart.ChartData.Activate ' ***Note: It gives error here*** 'Set oWorkbook = oChart.ChartData.Workbook Set oWorksheet = oChart.ChartData.Workbook.Worksheets("Tabelle1") Set oRange = oWorksheet.Range(Cell) 

 Public Sub updatechart(Doc As word.Application, ChartName As String, ChartTitle As String, Cell As String, data As String)` Dim oInShapes As word.InlineShape Dim oChart As word.Chart Dim oWorksheet As Excel.Worksheet 'Dim oWorkbook As Excel.Workbook Dim columnArray() As String Dim rowArray() As String Dim oRange As Range Dim i As Integer Dim j As Integer For Each oInShapes In Doc.ActiveDocument.InlineShapes ' Check Shape type and Chart Title If oInShapes.HasChart Then 'create range with Cell Set oChart = oInShapes.Chart oChart.ChartData.Activate ' ***Note: It gives error here*** 'Set oWorkbook = oChart.ChartData.Workbook Set oWorksheet = oChart.ChartData.Workbook.Worksheets("Tabelle1") Set oRange = oWorksheet.Range(Cell) ' Commet for debug 'oWorksheet.Range("B33") = (ChartTitle & 33) ' Split text columnArray = Split(data, SeperateChar) For i = LBound(columnArray) To UBound(columnArray) rowArray = Split(Trim(columnArray(i)), " ") ' Set Title. For example; ChartTitle = "XY" ----- Table Titles ----> | XY1 | XY2 | XY2 | .... ' After Set Value | 0,33| 0,1 | 0,46| .... oRange.Cells(1, i + 1) = ChartTitle & (i + 1) For j = LBound(rowArray) To UBound(rowArray) ' Set Values oRange.Cells(j + 2, i + 1) = CDbl(rowArray(j)) Next j Next i 'oWorkbook.Close oChart.Refresh End If Next Set oInShapes = Nothing Set oChart = Nothing Set oWorksheet = Nothing 'Set oWorkbook = Nothing Erase rowArray, columnArray End Sub 

这发生在我以前。 我有同样的解决办法,退出excel,释放一些内存,然后再试一次 – 它的工作。 使用此function时,您可能不得不closures其他程序。 它的字面意思就是它缺less可用的内存。

请记住,如果你已经运行了其他的macros来将信息复制到剪贴板,那么你将拥有更less的RAM来运行macros。

另外,你使用的是32位还是64位的Excel – 64可以让你使用更多的RAM。

我注意到在清理子文件时,你没有把oRange设置为空,这个对象是否使用了很多内存,而子内存不会被释放呢?

我有一个类似的错误,并最终追溯到“For Each”声明。 我认为这与你的例子中的Collection,Doc.ActiveDocument.InlineShapes的内存分配有关。

我的不好的代码(PowerPoint到Excel):

 For Each sh In InputBook.Sheets("Exec Sum").Shapes sh.Visible = False Next Set sh = Nothing 

我的固定代码:

 For i = 1 To InputBook.Sheets("Exec Sum").Shapes.Count InputBook.Sheets("Exec Sum").Shapes(i).Visible = False Next 

避免引用一个集合解决了我的问题。

频繁访问工作表可能会导致资源使用问题。 要做到这一点的方法是获取单个访问点的数据,如

 Dim V as Variant V = InputRange ' Now V becomes amxn array of the cell values in InputRange ' you may manipulate and work with this data and fill all your results in ' OutputV(m,n) variant array Dim OutputV() as Variant ReDim OutputV(m,n) oRange = OutputV 

通常根据范围的大小将代码加速数百倍,并且使用的资源也less得多。