Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:内存不足错误_Excel_Vba - Fatal编程技术网

Excel VBA:内存不足错误

Excel VBA:内存不足错误,excel,vba,Excel,Vba,我有两本.xlsm工作簿。只有工作簿B在另一个工作簿上运行宏 Workbook A: Job Closeout Status.xlsm Workbook B: Weekly Payment Sheet.xlsm 工作簿B有一个数据源为工作簿a的数据透视表。 wkbk B上的宏在打开时刷新透视表 我收到一个内存不足错误。我已经研究过应该将对象设置为零。但是,我无法编辑宏。每次我尝试添加一行代码时,都会出现“内存不足”错误。有谁能帮我优化性能,解决这个“内存不足”的问题吗?谢谢 我还注意到,在Vi

我有两本.xlsm工作簿。只有工作簿B在另一个工作簿上运行宏

Workbook A: Job Closeout Status.xlsm
Workbook B: Weekly Payment Sheet.xlsm
工作簿B有一个数据源为工作簿a的数据透视表。 wkbk B上的宏在打开时刷新透视表

我收到一个内存不足错误。我已经研究过应该将对象设置为零。但是,我无法编辑宏。每次我尝试添加一行代码时,都会出现“内存不足”错误。有谁能帮我优化性能,解决这个“内存不足”的问题吗?谢谢

我还注意到,在VisualBasics应用程序中,当我只打开wkbk B时,wkbk A会出现在我的项目浏览器中,工作表图标以蓝色突出显示。通常我只看到在project explorer中打开的工作簿

以下是我在工作簿B中的代码:

在此工作簿模块中:

Option Explicit

Private Sub Workbook_Open()
ThisWorkbook.Worksheets("RETENTION").Unprotect
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim wkb As Workbook
On Error Resume Next
If IsFileOpen("S:\ACCOUNTING\Subcontracts\Job Closeout Tracking\Job Closeout Status.xlsm") Then
    GoTo Protect
Else
On Error Resume Next
Set wkb = Workbooks.Open(filename:="S:\ACCOUNTING\Subcontracts\Job Closeout Tracking\Job Closeout Status.xlsm")
ThisWorkbook.RefreshAll
wkb.Close SaveChanges:=False
End If

Protect:
ThisWorkbook.Worksheets("RETENTION").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
在单独的模块中:

Function IsFileOpen(filename As String)
    Dim filenum As Integer, errnum As Integer

    On Error Resume Next   ' Turn error checking off.
    filenum = FreeFile()   ' Get a free file number.
    ' Attempt to open the file and lock it.
    Open filename For Input Lock Read As #filenum
    Close filenum          ' Close the file.
    errnum = Err           ' Save the error number that occurred.
    On Error GoTo 0        ' Turn error checking back on.

    ' Check to see which error occurred.
    Select Case errnum

        ' No error occurred.
        ' File is NOT already open by another user.
        Case 0
         IsFileOpen = False

        ' Error number for "Permission Denied."
        ' File is already opened by another user.
        Case 70
            IsFileOpen = True

        ' Another error occurred.
        Case Else
            Error errnum
    End Select

End Function

我不知道你的代码出了什么问题,但下一步错误恢复中的所有
行都是危险信号。我正在运行32位Excel 2013。代码一直在运行。我认为只需要优化性能/代码。我应该从哪里开始尝试解决这个问题?如果它正在工作,但不再工作,那么您的工作簿和/或项目可能已经损坏。如果您甚至不能编辑宏,则可能会出现这种情况。您可以做一些事情,例如(为了安全起见,复制了所有内容)导出VBA模块并将其重新导入全新的工作簿,然后开始移动数据。也许其他人有另一个想法,但如果没有,谷歌类似“从腐败的VBA项目中恢复”的东西,看看你读到的任何建议是否奏效。@John Coleman我复制了源代码,重命名了它,删除了宏并保存了它。将宏放回原处,并在原处复制到原处。政府似乎已经解决了问题。然后,我从所有内容中删除了下一步的错误恢复。现在我得到运行时错误91,对象变量或未设置块。需要防止这种情况再次发生。有什么想法吗?谢谢。我不知道你的代码出了什么问题,但下一步错误恢复中的所有
行都是红色标志。我正在运行32位Excel 2013。代码一直在运行。我认为只需要优化性能/代码。我应该从哪里开始尝试解决这个问题?如果它正在工作,但不再工作,那么您的工作簿和/或项目可能已经损坏。如果您甚至不能编辑宏,则可能会出现这种情况。您可以做一些事情,例如(为了安全起见,复制了所有内容)导出VBA模块并将其重新导入全新的工作簿,然后开始移动数据。也许其他人有另一个想法,但如果没有,谷歌类似“从腐败的VBA项目中恢复”的东西,看看你读到的任何建议是否奏效。@John Coleman我复制了源代码,重命名了它,删除了宏并保存了它。将宏放回原处,并在原处复制到原处。政府似乎已经解决了问题。然后,我从所有内容中删除了下一步的错误恢复。现在我得到运行时错误91,对象变量或未设置块。需要防止这种情况再次发生。有什么想法吗?非常感谢。