Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
VBA代码不稳定_Vba_Excel - Fatal编程技术网

VBA代码不稳定

VBA代码不稳定,vba,excel,Vba,Excel,它开始于本周一,当我完成代码时,代码的目的是从特定文件夹中的特定工作表中从该文件夹中的所有电子表格中提取数据 但就在昨天晚上,每当我按下“运行”按钮时,他就开始破坏excel电子表格 知道为什么吗 Option Explicit Sub ImportSheet() Dim i As Integer Dim SourceFolder As String Dim FileList As Variant Dim GrabSheet As String Dim

它开始于本周一,当我完成代码时,代码的目的是从特定文件夹中的特定工作表中从该文件夹中的所有电子表格中提取数据

但就在昨天晚上,每当我按下“运行”按钮时,他就开始破坏excel电子表格

知道为什么吗

Option Explicit

Sub ImportSheet()
    Dim i As Integer
    Dim SourceFolder As String
    Dim FileList As Variant
    Dim GrabSheet As String
    Dim FileType As String
    Dim ActWorkBk As String
    Dim ImpWorkBk As String
    Dim NoImport As Boolean
Application.EnableEvents = False
    SourceFolder = "C:\Users\Jarryd.Ward\Desktop\Test\"
    FileType = "*.xlsx"
    GrabSheet = "Summary"
    FileList = ListFiles(SourceFolder & "/" & FileType)

    Application.ScreenUpdating = False
    ActWorkBk = ActiveWorkbook.Name
    NoImport = False

    For i = 1 To UBound(FileList)
        Workbooks.Open (SourceFolder & "\" & FileList(i))
        ImpWorkBk = ActiveWorkbook.Name
        On Error Resume Next
            ActiveWorkbook.Sheets(GrabSheet).Select
            If Err > 0 Then
                NoImport = True
                GoTo nxt
            End If
            Err.Clear
        On Error GoTo 0

        ActiveWorkbook.Sheets(GrabSheet).Copy After:=Workbooks(ActWorkBk).Sheets(Workbooks(ActWorkBk).Sheets.Count)
           ActiveSheet.Name = ImpWorkBk

        On Error Resume Next
            ActiveSheet.Name = FileList(i) & " - " & GrabSheet
            Err.Clear
        On Error GoTo 0
nxt:
        Workbooks(ImpWorkBk).Activate
        Application.DisplayAlerts = False
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close SaveChanges:=False
        Application.DisplayAlerts = True
        Workbooks(ActWorkBk).Activate
    Next i
    Application.ScreenUpdating = True
End Sub

尝试以这种方式打开和关闭文件,看看是否有帮助。它应该尽量减少激活这个或那个的调用。通过变量而不是activesheet关闭将确保您的代码不会意外地试图关闭主工作簿

Sub testOpen()
Dim manyWBs As Workbook
Dim myWB As Workbook


Set myWB = ThisWorkbook


For Each file In folder
    Set manyWBs = Workbooks.Open("C:\temp\filename")


'   do events.......
manyWBs.Worksheets("Sheet1").Range("A1:B13").Copy _
       Destination:=myWB.Worksheets("Sheet1").Range("A1:b13")




    manyWBs.Close
    Set manyWBs = Nothing
Next file




Set myWB = Nothing
End Sub

依赖Active工作簿/工作表并不理想,您是否尝试过创建工作簿/工作表对象并显式设置它们?发生了什么错误?完全崩溃?运行宏时出现VB错误?您是否尝试过使用F8单步执行代码,以至少查看什么在工作?而且,这一点有点模糊。您能更具体地说明正在发生的事情吗?如果您在发布之前对代码进行了广泛的编辑,您可能需要考虑使用RibbonCommand之类的工具来清理您的项目。由于VBA本身不会清理,因此可能会遇到代码损坏的实例。坦白地说,我不知道为什么或者如何发生这种情况,但是我在多个大型VBA项目中遇到了这个问题,自从我开始用RC清理它们以来,这个问题已经得到了解决。这里有一个链接:。但这并不是不删除ActiveWorkbook和Activesheet引用的借口。嗨,伙计们,首先,谢谢你们的回复。我将详细说明。我必须创建一个宏,指向每天保存大量电子表格的文件夹,我希望复制每个电子表格中的第一张表格并将其粘贴到主工作簿中,我希望这些表格在主工作簿中滚动,也就是说,我希望第一份表格副本粘贴到主工作簿中的第一张表格上,第二张要粘贴在第二张纸上,依此类推,这就是我所说的卷。我遇到的问题是,每当我运行程序时,我的excel就会崩溃并停止工作。由于我所在的公司和他们的网站限制,我无法下载ribbon commander,可以请某人以正确的权限为我尝试下载。