根据列数调整公式

时间:2017-01-12 11:26:19

标签: excel vba excel-vba

我在excel VBA上有一个可用的宏。在其中一个单元格中,我有一个公式,其公式为查找该列的总数。然而,一旦我运行宏,它删除了所有空/空列,所以我需要找出一个可以放入宏的代码,可以根据我有多少列来重新排列公式?

Sub CommandButton1_Click()

ActiveSheet.Unprotect Password:="OperationHUMP"
ActiveSheet.Select

If (Range("C3") = "Change") Then
    MsgBox "Client Cost (excluding VAT) cannot exceed total budget for the campaign. Please check and insert correct prices.", vbOK, "Client Cost too High"
    Exit Sub
    End If

With ActiveSheet.Range("B18:B74")
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Dim cel As Range
For Each cel In ActiveSheet.SpecialCells(xlCellTypeFormulas)
cel.Formula = Replace(cel.Formula, "#REF!", "")
Next

 Application.DisplayAlerts = False
End With


Dim SaveName As String
SaveName = ActiveSheet.Range("C5").Text

ActiveSheet.Protect Password:="OperationHUMP"


With ActiveWorkbook

Dim sht As Object

For Each sht In Sheets
If sht.Name <> "Media Plan" Then
sht.Visible = xlSheetHidden
End If
Next sht


     ActiveSheet.Protect Password:="OperationHUMP"
    .Worksheets("Media Plan").CommandButton2.Visible = False
    .Worksheets("Media Plan").CommandButton1.Visible = False

    .SaveAs "S\" & SaveName & ".xls"
End With

Workbooks.Open ("S\" & SaveName & ".xls")
Workbooks("Media Plan Template Most Recent in Access.xlsb").Close False

End Sub

有什么建议吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以在删除操作后尝试对公式进行修复。这样的事情应该做

Dim cel as Range
For Each cel In Activesheet.UsedRange.SpecialCells(xlCellTypeFormulas)
    cel.Formula = Replace(cel.Formula, "#REF!", "")
Next

您可能需要多次更换,因为您可能会删除许多行(或列),因此可能会在同一公式中出现多次$REF!。如果有必要告诉我。

ps:最初问题仅出现在包含多区域范围的公式中,即=SUM(E:G,P:Q,S:S),然后您的代码会完全删除其中一个区域,例如列S 上例中的P和Q列。发生这种情况时,区域的地址将在公式中被#REF替换。除此之外,Excel会自动调整那些未完全删除的区域的公式。