【问题标题】:VBA freezes trying to .Close but only on second runVBA 冻结尝试 .Close 但仅在第二次运行时
【发布时间】:2016-05-20 23:44:01
【问题描述】:

因此,当我运行 VBA 时,开始出现意外错误。它涉及打开几个 excel 文件并将它们的值插入到一个主 Excel 文件中,然后它会在其中做很多事情。

它工作正常,直到我意识到只要用户在文件打开时多次导入数据就会崩溃。 (所以如果它第一次运行它就可以完美运行,或者如果你退出然后只运行一次,但如果你多次运行它而不先退出,它会冻结)

使用 step 方法后,我发现代码在哪里冻结,并且是在它试图关闭一个特定的 Excel 工作簿时。由于某种原因,它不会冻结其他任何一个,并且如果您在每个会话中多次运行导入代码,它只会冻结这个。任何想法为什么它可能会这样做?

这是一个可以正常工作的导入示例,然后在它下面是它冻结的那个。我只能假设它与复制粘贴方法有关,但是对于第二个文件的格式化方式,这是我知道如何在不进行复杂导入的情况下获取值的唯一方法。


If CbxImport108.Value = True Then

    108.Rows("2:100000").Delete
    'open and transfer 108---------------------------
    Workbooks.Open 108Combination
    ActiveSheet.Unprotect
    Set CurrentBook = Workbooks(ActiveWorkbook.Name)

    If tbx108T.Value = "" Then
        Set CurrentPage = CurrentBook.Sheets(ActiveSheet.Name)
    Else
        Set CurrentPage = CurrentBook.Sheets(tbx108T.Value)
    End If


    'transfer the data
    TranCounter = 1
    Do While TranCounter < 100 Or CurrentPage.Range("A" + TranCounter).Value <> ""

        TranCounter = TranCounter + 1
    Loop
    Finalcounter = TranCounter

    108.Range("A1:AZ" + Finalcounter).Value = CurrentPage.Range("A1:AZ" + Finalcounter).Value

    CurrentBook.Close
End If


If cbxHS.Value = True Then

    HS.Rows("1:100000").Delete
    'open and transfer HS--------------------------------------
    Workbooks.Open HSCombination
    ActiveSheet.Unprotect
    Set CurrentBook = Workbooks(ActiveWorkbook.Name)

    If tbxHST.Value = "" Then
        Set CurrentPage = CurrentBook.Sheets(ActiveSheet.Name)
    Else
        Set CurrentPage = CurrentBook.Sheets(tbxHST.Value)
    End If


    'transfer the data
    TranCounter = 1
    Do While TranCounter < 100 Or CurrentPage.Range("A" + TranCounter).Value <> ""

        TranCounter = TranCounter + 1
    Loop
    Finalcounter = TranCounter

    CurrentPage.Range("A1:Z" + Finalcounter).NumberFormat = "@"

    Application.CutCopyMode = False
   CurrentPage.Range("A1:AA" + Finalcounter).Copy
    HS.Range("A1:AA" + Finalcounter).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False

    CurrentBook.Close

End If

编辑:我不打算让人们直接运行这段代码,唯一的一点是看它比较一个从不冻结的文件和一个确实冻结的文件的导入示例。声明不包括在内。如有任何混淆,我们深表歉意。

【问题讨论】:

  • 你能发布一个实际的工作示例吗?您提供的 sn-p 存在语法错误,并且超出了特定过程的上下文。 108.[something] 不是一个有效的变量名,我不确定你是如何让它运行的,因为它是我的语法错误。

标签: vba excel freeze


【解决方案1】:

可能是使用当前页面和单元格引用导致它在您第二次运行时重定向不同的 excel 文件

【讨论】:

    【解决方案2】:

    所以我想出了如何修复故障,即使我仍然不明白/为什么/它会这样做,也不明白为什么会这样:在它完成复制和粘贴之后,但在它被告知关闭这本书之前,我添加在“Application.CutCopyMode = True”中,冻结停止。我现在已经能够连续运行 5 次以上的导入代码而没有问题。这就解释了为什么它一直在这个工作簿上崩溃,而在其他工作簿上都没有。

    感谢大家的帮助!


        Application.CutCopyMode = False
        CurrentPage.Range("A1:AA" + Finalcounter).Copy
        Haystack.Range("A1:AA" + Finalcounter).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = True
        CurrentBook.Close
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多