包装合并的单元格,删除单元格的行Excel Excel VBA

问题描述:

我有两个表格。第一个填写需要的信息,另一个基本上是Sheet(1)中信息的模板。 (2)充满了类似= IF(Sheet(1)!A1 =“”;“”; Sheet(1)!A1)的公式。
所以在表(2)上有很多值“”,基本上都是空白的。如果在这一行中没有文本,我想删除整行。包装合并的单元格,删除单元格的行Excel Excel VBA

因此,如果该行的样子:

A33(“”),B33(“”),C33(“”)D33(“”)E33(“”),F33(“”),G33(一些文本) H33(“”)I33(“”) - 它应该停留

A34(“”)B34(“”)C34(“”)D34(“”)E34 “”)H34(“”)I34(“”) - 应该被删除

同样在表(2)上,我已经合并单元格和来自Sheet(1)中相应单元格的文本不适合那里。我想将这些单元格放在范围表(2)!B31:D68(B31:D31和B32:D32等)中进行合并。

这是我的代码,但例如Wrap for merged cells does not work。代码隐藏了我需要删除的行。代码也是将Sheet(2)中的文本隐藏在来自Sheet(1)的结果中。

Sub AutofitRows() 
    Dim CL As Range 

    For Each CL In ActiveWorkbook.Sheets(2).Range("A30:I68") 
     If CL.WrapText Then CL.rows.AutoFit 
    Next 
End Sub 
Sub removecellswithemptycells() 
    ActiveWorkbook.Sheets(2).Select 
    Set rr = Range("A30:J66") 
    For Each cell In rr 
    cell.Select 
     If cell.HasFormula = True And cell.Value = "" And cell.EntireRow.Hidden = False Then rows(cell.Row).EntireRow.Hidden = True 
    Next cell 
End Sub 
Sub removecellswithemptycells_pos2() 
    ActiveWorkbook.Sheets(2).Select 
    Set rr = Range("A21:J22") 
    For Each cell In rr 
    cell.Select 
     If cell.HasFormula = True And cell.Value = "" And cell.EntireRow.Hidden = False Then rows(cell.Row).EntireRow.Hidden = True 
    Next cell 
End Sub 
Sub dothefiles() 
    Dim NewPath As String 
    Dim iFileName$, iRow& 
    NewPath = Application.ThisWorkbook.Path & "\" & "Order" 
    If Dir(NewPath, 63) = "" Then MkDir NewPath 

     ActiveWorkbook.Sheets(2).Select 
     ActiveSheet.ExportAsFixedFormat _ 
     Type:=xlTypePDF, _ 
     Filename:=NewPath & "\" & [Sheet(1)!C17] & "-" & [Sheet(1)!C6] & " " & "Order" & " " & [Sheet(1)!C10] & " " & Date & ".pdf", _ 
     Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=No, _ 
     OpenAfterPublish:=False 

    iFileName = NewPath & "\" & [Sheet(1)!C17] & "-" & [Sheet(1)!C6] & " " & "Order" & " " & [Sheet(1)!C10] & " " & Date & ".xls" 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    Application.Calculation = xlManual 

    ThisWorkbook.Sheets(2).Copy 
    With ActiveWorkbook.ActiveSheet 
     .Buttons.Delete '.Shapes("Button 1").Delete 
     .UsedRange.Value = .UsedRange.Value 
     For iRow = .Cells(.rows.Count, 2).End(xlUp).Row To 5 Step -1 
      If Application.CountA(.rows(iRow)) = 1 Then .rows(iRow).Delete 
     Next 
     .SaveAs iFileName, xlExcel8: .Parent.Close 
    End With 

    Application.Calculation = xlAutomatic 
    Application.DisplayAlerts = True 
    Application.ScreenUpdating = True 

End Sub 
Sub doitallplease() 
    Call AutofitRows 
    Call removecellswithemptycells 
    Call removecellswithemptycells_pos2 
    Call dothefiles 
End Sub 
+0

我认为'wrap'标签在这里放错了地方。除此之外,'Autofit'不适用于合并的单元格,这是一个已知的问题,不幸的是。 –

+0

如果无法为合并单元格换行,我可以'unmerge'它们,但是我需要''修改'然后通过我的Range并检查单元格高度是否需要增加。 – mrwd

+0

这是'自动调整',不工作,不'包裹'。无论如何是你面临的唯一问题?如果不是,首先尝试使用未合并的东西,并在最后进行合并/包装。 –

,如果你取消合并单元格中的表(2)本应正常工作启动前:

Option Explicit 

Public tB As Workbook 
Public wS1 As Worksheet 
Public wS2 As Worksheet 
Public wSCopy As Worksheet 

Sub CreateCleanCopies() 
    Dim NewPath As String 
    Dim iFileName$, iRow& 

    With Application 
     .ScreenUpdating = False 
     .EnableEvents = False 
     .DisplayAlerts = False 
     .Calculation = xlManual 
    End With 'Application 

    Set tB = ThisWorkbook 
    Set wS1 = tB.Sheets(1) 
    Set wS2 = tB.Sheets(2) 

    NewPath = tB.Path & "\" & "Order" 
    iFileName = NewPath & "\" & wS1.Range("C17") & "-" & wS1.Range("C6") & " " & "Order" & " " & wS1.Range("C10") & " " & Date & ".pdf" 
    If Dir(NewPath, 63) = vbNullString Then MkDir NewPath 

    wS2.Copy 
    Set wSCopy = ActiveWorkbook.ActiveSheet 

    AutofitRowsAndMerge wSCopy, "A30:I68" 

    RemoveEmptyRows wSCopy, "A30:J66" 
    RemoveEmptyRows wSCopy, "A21:J22" 

    With wSCopy 
     .ExportAsFixedFormat _ 
      Type:=xlTypePDF, _ 
      FileName:=iFileName, _ 
      Quality:=xlQualityStandard, _ 
      IncludeDocProperties:=True, _ 
      IgnorePrintAreas:=False, _ 
      OpenAfterPublish:=False 

     iFileName = Replace(iFileName, ".pdf", ".xls") 

     .Buttons.Delete 
     .UsedRange.Value = .UsedRange.Value 


     .Parent.SaveAs iFileName, xlExcel8 
     .Parent.Close 
    End With 

    With Application 
     .DisplayAlerts = True 
     .Calculation = xlAutomatic 
     .EnableEvents = True 
     .ScreenUpdating = True 
    End With 'Application 
End Sub 

Sub AutofitRowsAndMerge(wS As Worksheet, RangeAddress As String) 
    Dim RgCL As Range 
    For Each RgCL In wS.Range(RangeAddress).Columns(1).Cells 
     With RgCL 
      If Not .WrapText Then .WrapText = True 
      .EntireRow.AutoFit 
      .Parent.Range(RgCL, .Offset(0, 2)).Merge 
     End With 'RgCL 
    Next RgCL 
End Sub 

Sub RemoveEmptyRows(wS As Worksheet, RangeAddress As String) 
    Dim RemoveRow As Boolean 
    Dim i As Double 
    Dim LastRgRow As Double 
    Dim FirstRgRow As Double 
    Dim RgCL As Range 

    With wS.Range(RangeAddress) 
     FirstRgRow = .Cells(1, 1).Row 
     LastRgRow = .Cells(.Rows.Count, 1).Row 
    End With 'wS.Range(RangeAddress) 

    For i = LastRgRow To FirstRgRow Step -1 
     RemoveRow = True 
     For Each RgCL In Application.Intersect(wS.Range(RangeAddress), wS.Rows(i)).Cells 
      If RgCL.Value <> vbNullString Then 
       RemoveRow = False 
       Exit For 
      Else 
      End If 
     Next RgCL 
     If RemoveRow Then wS.Rows(i).EntireRow.Delete 
    Next i 
End Sub 
+0

谢谢你的工作。我编辑过'IgnorePrintAreas:= False,_'有'IgnorePrintAreas:= No,_'。现在,当我取消合并单元格时,此宏不会删除空行,而是包装单元格,并且当我离开合并单元格时,它不包装单元格,但会删除空行。如何修复? – mrwd

+0

我忘了提及Wrap的作品,如果我删除'.Parent.Range(RgCL,.Offset(0,2))。Merge'为未合并版本。 – mrwd

+0

@mrwd:我不能设法重现这一事实,这可能不会删除空行...你检查你的Excel保存为行实际上是空的吗?使用'= LEN(A1)'来检查A1中是否有内容(如果不是则为0)。至于Wrap,ASH在评论中对它进行了解释,它不适用于Merge,因此您必须选择是否要合并且行数过高,或者不合并并排除列C和D。 ..但我不能为你回答... – R3uK