0

在执行邮件合并之前,我有一个导出到临时文件的 Excel 电子表格。
这是通过复制/粘贴来实现的,如下所示:

Dim current As Workbook
Set current = ActiveWorkbook

Dim wb As Workbook
Set wb = Workbooks.Add

current.Sheets("Input").UsedRange.Copy

' Only paste values, since posting formulas would give #REFERENCE errors
wb.Worksheets(1).name = "Input"
wb.Worksheets(1).Range("A1").PasteSpecial (xlPasteValues)

但是,在一列中我得到#VALUE!在所有单元格中(标题除外)。这些字符串比我复制的任何其他字符串都长,大约有 170-190 个字符


编辑

深入研究这个问题,我偶然发现了一些有趣的东西。当在另一个电子表格中四处寻找时,同时打开一个正在导出的电子表格,会导致值发生变化。

这些单元格的值是文档的位置,以及一些细节。我认为这可能导致#VALUE!错误 - 因为导出会打开一个没有位置的新工作簿。如果此时要计算公式,我认为它可能会给出#VALUE!错误。

这是公式:

=IF($A3<>"";CHAR(34) & SUBSTITUTE(LEFT(CELL("filnavn"); FIND("[";CELL("filnavn")) - 1) & "Images\" & INDIRECT("'" &VLOOKUP($G3;'Item Information'!$A$2:$C$249;3;FALSE) & "'!F2") & ".png"; "\"; "/") & CHAR(34); "")
4

2 回答 2

1

通过调试,我发现添加新工作簿时确实是导致问题的公式。

Application.Calculation = xlCalculationManual在代码运行之前和之后设置Application.Calculation = xlCalculationAutomatic,解决了这个问题。

于 2013-08-27T08:29:16.973 回答
0

在 VBA 中复制值的最佳方法是(而不是复制和粘贴):

With current.Sheets("Input").UsedRange
    wb.Worksheets(1).Range("A1").Resize(.Rows.Count, .Columns.Count).Value=.Value
End With
于 2013-08-27T08:33:11.263 回答