【发布时间】:2018-09-16 17:37:45
【问题描述】:
哦!
我是来寻求帮助的,我认为这是一个简单的问题。
在工作表中,我指的是工作表中名为“Consolidado”的一些单元格,但是,由于某些代码,工作表(“Consolidado”)被删除并使用新数据再次创建,因此每次运行代码时,我都会在另一个工作表上的公式中出现“#REF”错误。有没有办法“修复”,在公式的参考中强制它是“Consolidado”?
这是公式。
#REF 应该是 "Consolidado"。
PROC(2;1/--(#REF!$J$2:$J$30<>"");#REF!$J$2:$J$30)
欢迎任何帮助,再次感谢您!
=========编辑==========
我用来“刷新”工作表“Consolidado”的宏如下:
每次点击“Consolidar”按钮时,此宏都会创建一个新摘要。但是,在创建新表之前,它会破坏旧表以确保数据是新的。
Sub Consolidar_Abas()
Dim Sh As Worksheet
Dim Newsh As Worksheet
Dim myCell As Range
Dim ColNum As Integer
Dim RwNum As Long
Dim Basebook As Workbook
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Delete the sheet "Consolidado" if it exist
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Worksheets("Consolidado").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'Add a worksheet with the name "Consolidado"
Set Basebook = ThisWorkbook
Set Newsh = Basebook.Worksheets.Add
Newsh.Name = "Consolidado"
'Add headers
Newsh.Range("A1:AH1").Value = Array("Consolidado", "Carteira", "Segmento", "QTD Estagiário", "QTD CLT", "QTD Coordenador", "QTD Supervisor", "QTD BKO", "Prêmio & Comissões", "Receita Bruta Prevista", "Imposto", "Receita Líquida (-Imposto)", "Pessoal (OPs Carteira)", "Holding Carteira (Sup+Coord+BKO)", "Postagem & Impressos", "SMS", "Telefonia", "Internet Dedicada", "Softwares Dedicados", "Custo Extra", "Internet", "Softwares & Ferramentas", "Custo Total de Produção", "Lucro / Perda Prod. - Líquido", "Margem com Rec. Líquida", "Adm Holding", "Desp. Terceiros / Produção", "Tecnologia", "Manutenção", "Admistração", "Custo Empresarial Total", "Custo Total Real Final", "Lucro / Perda Final", "Margem com Rec. Líquida")
'The links to the first sheet will start in row 2
RwNum = 1
For Each Sh In Basebook.Worksheets
If Sh.Name <> Newsh.Name And Sh.Visible And Sh.Name <> "Menu" And Sh.Name <> "Infos" And Sh.Name <> "Master" Then
ColNum = 1
RwNum = RwNum + 1
'Copy the sheet name in the A column
Newsh.Cells(RwNum, 1).Value = Sh.Name
For Each myCell In Sh.Range("A2:H2,J2:L2,A7:M7,A12:F12,H12,J12:K12") '<--Change the range
ColNum = ColNum + 1
Newsh.Cells(RwNum, ColNum).Formula = _
"='" & Sh.Name & "'!" & myCell.Address(False, False)
Next myCell
End If
Next Sh
Newsh.UsedRange.Columns.AutoFit
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
在另一个名为“菜单”的工作表中,我展示了工作簿,那里有规则和其他关于如何操作工作簿和类似内容的文本,在“信息”中也是如此,只是一堆其他工具。
在用户可以创建一个新表单的“菜单”上,在他填写后,将填充工作表“Consolidado”,每次他点击“Criar Nova Aba”按钮时,都会创建一个新表单(我只需从要填写的工作表“Master”中创建一个副本。
在他根据需要完成多个工作表的创建后,他按下“Consolidar”按钮,删除旧的并创建一个新的“Consolidar”工作表。
我想通过这个我涵盖了工作簿的功能。我会尝试制作一个空白版本,不幸的是,它来自工作并且包含敏感数据。
编辑 2
我现在需要的是,在单元格上,相应的公式:
工作表:“菜单”;单元格:AY4
=PROC(2;1/--(Consolidado!$J$2:$J$30<>"");Consolidado!$J$2:$J$30)
工作表:“菜单”;单元格:AY5
=PROC(2;1/--(Consolidado!$AF$2:$AF$30<>"");Consolidado!$AF$2:$AF$30)
工作表:“菜单”;单元格:AY6
=(PROC(2;1/--(Consolidado!$X$2:$X$30<>"");Consolidado!$X$2:$X$30))/(PROC(2;1/--(Consolidado!$L$2:$L$30<>"");Consolidado!$L$2:$L$30))
工作表:“菜单”;单元格:AY7
=(PROC(2;1/--(Consolidado!$AG$2:$AG$30<>"");Consolidado!$AG$2:$AG$30))/(PROC(2;1/--(Consolidado!$J$2:$J$30<>"");Consolidado!$J$2:$J$30))
还有什么,问吧。再次感谢大家的帮助!
【问题讨论】:
-
停止删除“Consolidado”工作表,只需更改其中的数据即可。
-
试过了,可惜没用。我想是因为,就像我说的,WS 被删除了。我可以再试一次。
-
@mooseman 能完成这项工作真是个奇迹。如果您有类似的解决方案,我想听听。
-
在 VBA 中为引用工作表制作公式,因此当您打开工作簿时,它会运行代码并填充公式以引用工作表(“Consolidado”)。您可以有要引用的公式,也可以只有引用表中的值。在任何一种情况下,都需要执行宏来获取更新,因为源工作表已被删除。
-
@Cyril,谢谢你的想法。我正在尝试这样的事情。我可以做两件事:1,使用以下代码在摘要中“插入”公式:'Sub Worksheets("Menu").Range("Ay4").Formula = "" = "" "PROC(2;1/--(Consolidado!$J$2:$J$30"""");Consolidado!$J$2:$J$30)""" End Sub' "打印" 公式和 2 创建了一个函数 'Function EVal(Ref As String) Application.Volatile EVal = Evaluate(Ref) End Function' 将此文本转换为函数,但没有工作,你还有其他想法吗=/?再次感谢!
标签: vba excel excel-formula formulas