因此,当我运行VBA时,已经开始出现意外错误。它涉及打开几个excel文件并将它们的值插入到一个主Excel文件中,然后它会执行一些操作。
它工作正常,直到我意识到只要用户在文件打开时多次导入数据,它就会崩溃。 (所以如果它第一次运行它会完美运行,或者如果你退出然后再运行一次,但是如果你不先运行它而不先退出它就冻结了)
使用步骤方法后,我发现代码冻结的地方,以及它何时尝试关闭一个特定的Excel工作簿。由于某种原因,它不会冻结任何其他任何一个,如果你每个会话多次运行导入代码,它只会冻结这个。有什么想法可能会这样做吗?
以下是导入工作正常的示例,然后在它下面冻结它。我只能假设它与copy-paste方法有关,但是第二个文件格式化的方式是我知道如何在没有复杂导入的情况下获取值的唯一方法。
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
编辑:我没有打算让人们直接运行这个代码,唯一的一点是看它比较一个永不冻结的文件和冻结的文件的一个输入的例子。声明不包括在内。对不起任何混淆。
答案 0 :(得分:0)
可能正在使用带有单元格引用的currentpage导致它在第二次运行时重定向不同的excel文件
答案 1 :(得分:0)
所以我想出了如何修复故障,即使我仍然不明白/为什么/它正在做这个也不是为什么这样做:完成复制和粘贴之后,但在它被告知要关闭本书之前,我在“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