为什么这个VBA代码复制范围会间歇性地失败?

时间:2018-02-06 15:34:23

标签: excel-vba vba excel

我写了下面的程序,将输入表格中的单元格范围复制到输出表格。输出表是主模板的一部分。复制后,我在主工作簿上调用SaveAs函数,以使用其他名称将主工作簿保存在文件系统上。

Private Sub copyRange(inputRange As Range, outputRange As Range)

inputRange.NumberFormat = "0.00000000"
inputRange.Copy
outputRange.PasteSpecial xlPasteValuesAndNumberFormats

End Sub

我正在为我要复制的每个范围从另一个过程多次调用此函数。调用代码如下所示:

Dim InputSheet As Worksheet
Dim OutputSheet As Worksheet

Set InputSheet = Application.Workbooks.Open("C:/inputFile.xlsx", False, vbReadOnly).Worksheets("Sheet1")
Set OutputSheet = OutputSheet 'this is a sheet of master template

copyRange InputSheet.Range("E15:G28"), OutputSheet.Range("B12:D25")
copyRange InputSheet.Range("E33:G37"), OutputSheet.Range("B30:D34")

copyRange InputSheet.Range("I15:K28"), OutputSheet.Range("E12:G25")
copyRange InputSheet.Range("I33:K37"), OutputSheet.Range("E30:G34")

copyRange InputSheet.Range("M15:O28"), OutputSheet.Range("H12:J24")
copyRange InputSheet.Range("M33:O37"), OutputSheet.Range("H30:J34")

上面的代码在5次中失败大约1次,错误“粘贴范围类的特殊方法”。大多数情况下它运行正常,输出文件按预期生成。有什么办法可以防止这个错误吗?

1 个答案:

答案 0 :(得分:1)

在尝试了很多事情之后,我终于删除了对pastespecial方法的调用。

Private Sub copyRange(inputRange As Range, outputRange As Range)

inputRange.NumberFormat = "0.00000000"
inputRange.value2 = outputRange.value2

End Sub

这种方法可以在复制范围时解决间歇性问题。