【发布时间】: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] 不是一个有效的变量名,我不确定你是如何让它运行的,因为它是我的语法错误。