PasteSpecial(xlPasteValues)给出#VALUE

时间:2013-08-27 06:45:49

标签: excel vba excel-vba

我有一个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个字符


修改

深入研究这个问题,我偶然发现了一些有趣的事情。当在另一个电子表格中进行浏览时,在导出一个im导出时,会导致值发生变化。

这些单元格的值是文档的位置以及一些细节。我想也许这会导致#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); "")

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

With current.Sheets("Input").UsedRange
    wb.Worksheets(1).Range("A1").Resize(.Rows.Count, .Columns.Count).Value=.Value
End With