【问题标题】:Using worksheet name as variable, but with refresh ability使用工作表名称作为变量,但具有刷新能力
【发布时间】: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


【解决方案1】:

我刚刚尝试了一些似乎有效的方法......

Sheets("").Columns("A").Replace What:="#REF!", Replacement:="Consolidado!", SearchOrder:=xlByColumns, MatchCase:=True

确保更改列并添加工作表引用。

【讨论】:

  • 它几乎可以工作了!就像,在第一次运行宏时,它流畅清晰。但是,在运行它时再次关闭和打开它并不起作用=/你能帮助编写一个代码来在 4 个特定的 cels 上插入公式吗?在单元格 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))'。再次非常感谢您的快速回复!
  • @PauloAraújo 这里有很多缺失的信息。如果您可以更新您的帖子以包含公式(在评论中很难阅读),那将有所帮助。我还建议尝试自己构建公式,使用 Sheets("").Range("AY2:AY" & lastRow).Formula = "=CALCULATION"。这将有助于人们更轻松地进行审查。为了帮助使用公式,对于公式中的每个 ",您需要列出 "",这会打开和关闭 VBA 模块中的公式。
  • @PauloAraújo 具体到我发布的答案,应该每次都有效。我从我的一些工作代码中复制了它并输入了您的工作表名称。您是否确保在关闭和重新打开时使用了您对代码所做的修改(您的工作表名称和相应的列/范围)?
  • 我会再次检查第一个公式。但是保存文件并再次打开后,它不起作用。我更新了问题,请检查它是否有帮助。是否有文章/网站解释了如何生成 tose 计算?我真的很想知道我怎样才能做到这一点。再次感谢您的帮助!
【解决方案2】:

您要查找的工作表是否有一组独特的列标题? 打开要处理的电子表格后,您可以遍历工作表以查找 Consolidado

    'Find if sheet exists
    vFound = "N"
    For ix = 1 To Sheets.Count
        If "Consolidado" = ActiveWorkbook.Sheets(ix).Name Then
            vFound = "Y"
        End If
    Next

如果该表不存在,您可以使用相同的方法来查找识别列标题,这足以确保您拥有正确的表:

    'Check column names of sheets to find desired sheet (note vFound is still "N")
    For ix = 1 To Sheets.Count
        ActiveWorkbook.Sheets(ix).Activate
        If "Name" = Range("A1:A1").Value And "URL" = Range("B1:B1").Value And "Date" = Range("C1:C1").Value And "Logon" = Range("D1:D1").Value Then
            vTotFound = "Y"
            vSheetName = ActiveWorkbook.Sheets(ix).Name
            Exit For
        End If
    Next

您可以使用 vSheetName 代替 Consolidado。

【讨论】:

  • 谢谢!我会尝试并尽快反馈给您。再次感谢”
  • 你好一月。我更新了上面的帖子,我用 Cyril 提供的解决方案解决了我的问题。我非常感谢您的支持。我会为未来的项目保存这个选项(当然还有问题:))!非常感谢您的时间和帮助!
  • 感谢您的回复 - 很高兴能够让您深思。
猜你喜欢
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
相关资源
最近更新 更多