尝试在Excel VBA中合并单元格时出错

我试图在Excel中过滤工作表,将一列复制到“中间工作表”中,复制每个单元格并将其粘贴到第三个工作表中,在每个数据之间留下3个空白行,然后将该单元格与具有3之后的空白的。

该代码的作品,直到它试图合并单元格。 它“疯狂”并合并整个A列。 有没有人看到错误?

Sub Filtrar() Application.ScreenUpdating = False Dim Lugar As String Worksheets("Camiones_nacional").Activate Lugar = Cells(2, 1).Value Worksheets("Nacional_enero").Activate Sheets("Nacional_enero").Select Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=Lugar Range("A:A").Select Selection.Copy Worksheets("Calculos").Activate Range("E1").Select ActiveSheet.Paste Dim celda As Integer celda = 1 Dim c As Integer c = 2 Dim c1 As Integer c1 = 5 Dim c2 As Integer c2 = 8 Do While celda < 30 Worksheets("Calculos").Activate Cells(c, 5).Select Selection.Copy Worksheets("Camiones_nacional").Activate Cells(c1, 1).PasteSpecial xlPasteValues ActiveSheet.Range("A" & c1 & ":" & "A" & c2).Merge celda = celda + 1 c = c + 1 c1 = c1 + 4 c2 = c2 + 4 Loop Worksheets("Camiones_nacional").Activate End Sub 

首先,翻转select可以经常跳过VBA,所以最好是使用Destination属性在一行中编写复制和粘贴,或者只是重新分配值(因为您的粘贴方法只包含值)

此外,根据我的经验,最好在Range中使用Cell而不是Column concatnation

 Do While celda < 30 Worksheets("Camiones_nacional").Cells(c1, 1).Value = Worksheets("Calculos").Cells(c,5).Value Worksheets("Camiones_nacional").Range(Cells(c1,1),Cells(c2,1)).Merge celda = celda + 1 c = c + 1 c1 = c1 + 4 c2 = c2 + 4 Loop 

关于整个列的合并,我会通过确保你不是在一个已经合并的范围内select一个单元格来进行debugging,因为这会导致合并的范围合并