我在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
有什么建议吗?
提前致谢!
答案 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会自动调整那些未完全删除的区域的公式。