2017-07-07 92 views
0

所以我有一列通过不同模块列出,一些重复5行,一些20。我试图通过VBA合并这些,但是我的代码有些问题。这里是我使用这个,我已经评论了错误发生后,我逐行调试它。希望对此错误有任何意见!VBA EXCEL在一列中合并行

谢谢你们!

注:

  • 我开始在7,因为这是在模块记录从开始的行。

    Sub ReMergeECURowsMPNT() 
    
    Dim wsMPNT As Worksheet 
    Set wsMPNT = Worksheets("Module Part Number Tracker") 
    
    Dim lrowMPNT As Long 
    lrowMPNT = CRC.LastRowInMPNT 
    
    Dim i As Long 
    Dim j As Long 
    
    Dim sameRows As Boolean 
    sameRows = True 
    
    For i = 7 To lrowMPNT 
        If StrComp(Cells(i, 3), Cells(i + 1, 3), vbTextCompare) Then 
    
         sameRows = False 
    
        End If 
    
        If sameRows = False Then 
         With wsMPNT 
          .Range(Cells(i, 3), Cells(i + 1, 3)).Merge  '''Application defined error on this line 
         End With 
        End If 
    
        sameRows = True 
    Next i 
    

    末次

+3

尝试用点出线'Cells':'.Range(.Cells(I,3) .Cells(i + 1,3))。合并' –

+1

另外,我会考虑是否真的需要合并单元格。只是说,因为在合并单元格中,如果您稍后尝试在其上运行任何类型的数学/分析/ vba,它可能会有点棘手。见[本页](http://www.excel-user.com/2012/01/avoid-merged-cells-in-excel.html)或[this one](https://accessanalytic.com.au/停止合并单元格/)为什么有些例子。 – BruceWayne

回答

0

除非DisplayAlerts设置为False,你通常应该得到像提示“选择包含多个数据值。合并到一个单元格将保留左上角最仅数据“。,如果点击“取消”而不是“Ok”,VBA将抛出“应用程序定义或对象定义的错误”

此外,检查行lrowMPNT = CRC.LastRowInMPNT。如果您正在寻找合并“列C”,您可以尝试这样简单的东西:

Sub ReMergeECURowsMPNT() 
    Application.DisplayAlerts = False 
    Dim wsMPNT As Worksheet, lrowMPNT As Long, i As Long, j As Long 
    Set wsMPNT = Worksheets("Module Part Number Tracker") 
    wsMPNT.Select 
    lrowMPNT = wsMPNT.UsedRange.Row - 1 + wsMPNT.UsedRange.Rows.Count 
    For i = 7 To lrowMPNT 
     If Cells(i, 3) = Cells(i + 1, 3) Then 
      j = j + 1 
     ElseIf j > 0 Then 
      Range(Cells(i - j, 3), Cells(i, 3)).Merge 
      j = 0 
     End If 
    Next i 
    Application.DisplayAlerts = True 
End Sub