我正在使用以下VBA脚本复制单元格。它将值粘贴到所有单元格(A到J)中,但是将值粘贴到 K 中时抛出运行时错误438。 我不确定为什么它适用于前几行时在最后一行上失败了。
Sub Programs()
Dim sh As Worksheet, N As Long
Dim i As Long, M As Long
N = Sheets.Count - 4
M = 2
For i = 6 To N
'copy Form number + Edition date
Sheets(i).Range("$D$4").Copy
Sheets("Programs1").Range("A" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("A" & M).PasteSpecial (xlFormats)
'copy Program
Sheets(i).Range("$C$180").Copy
Sheets("Programs1").Range("B" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("B" & M).PasteSpecial (xlFormats)
'copy ProgramStatus
Sheets(i).Range("$E$180").Copy
Sheets("Programs1").Range("C" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("C" & M).PasteSpecial (xlFormats)
'copy Program
Sheets(i).Range("$C$181").Copy
Sheets("Programs1").Range("D" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("D" & M).PasteSpecial (xlFormats)
'copy ProgramStatus
Sheets(i).Range("$E$181").Copy
Sheets("Programs1").Range("E" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("E" & M).PasteSpecial (xlFormats)
'copy Program
Sheets(i).Range("$C$182").Copy
Sheets("Programs1").Range("F" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("F" & M).PasteSpecial (xlFormats)
'copy ProgramStatus
Sheets(i).Range("$E$182").Copy
Sheets("Programs1").Range("G" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("G" & M).PasteSpecial (xlFormats)
'copy Program
Sheets(i).Range("$C$183").Copy
Sheets("Programs1").Range("H" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("H" & M).PasteSpecial (xlFormats)
'copy ProgramStatus
Sheets(i).Range("$E$183").Copy
Sheets("Programs1").Range("I" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("I" & M).PasteSpecial (xlFormats)
'copy Program
Sheets(i).Range("$C$184").Copy
Sheets("Programs1").Range("J" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("J" & M).PasteSpecial (xlFormats)
'copy ProgramStatus
Sheets(i).Range("$E$184").Copy
Sheets("Programs1").Range("K" & M).PasteSpecial (xlValues)
Sheets("Programs1").Range("K" & M).PasteSpecial (xlFormats)
M = M + 1
Next i
结束子
答案 0 :(得分:0)
我也不知道为什么也会出现错误,但是您当然可以缩短代码,也许可以找出错误发生的原因。当您拥有高度冗余的代码时,将该部分分成一个单独的方法将“功能上隔离”该逻辑。这很重要,因为如果发生错误,可以通过仅在一个位置更改逻辑来解决它。否则,您将必须更改生成的所有复制粘贴行以制作上述示例。这样的例程:
Private Sub CopyMe(ByVal sheetIndex As Long, _
ByVal from As String, _
ByVal to As String)
Sheets(sheetIndex).Range(from).Copy
With Sheets("Programs1").Range(to)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
End Sub
所以现在您的主要逻辑将如下所示:
Sub Programs()
Dim sh As Worksheet, N As Long
Dim i As Long, M As Long
N = Sheets.Count - 4
M = 2
For i = 6 To N
CopyMe i, "D4", "A2" 'copy Form number + Edition date
CopyMe i, "C180", "B2" 'copy Program
CopyMe i, "E180", "C2" 'copy ProgramStatus
' ...
Next i
End Sub
因此,如果在像这样构造代码时,所有CopyMe
行都有效,但列K
除外,那么您将知道该列存在问题,而不是相同的副本-粘贴线。 (但我认为这会起作用...)