使用工作表名称作为变量,但具有刷新能力

Using worksheet name as variable, but with refresh ability

哦.!

我是来帮忙解决的,我想,这是一个简单的问题。

在作品sheet中,我指的是作品sheet中的一些单元格,它们被命名为"Consolidado",但是,由于一些代码,sheet("Consolidado") 被删除并用新数据重新创建,因此我在另一项工作sheet的公式中得到“#REF”错误,每次我 运行 代码。有没有办法 "fix",在公式的参考中强制它成为 "Consolidado"?

这是公式。

其中 #REF 应该是 "Consolidado"

PROC(2;1/--(#REF!$J:$J<>"");#REF!$J:$J)

欢迎任何帮助,再次感谢!

=========编辑==========

我用来 "refresh" sheet "Consolidado" 的宏如下:

每次点击按钮时,此宏都会创建一个新摘要 "Consolidar"。但是,在创建新数据之前,它会销毁旧数据 sheet 以确保数据是新数据。


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

在另一个名为 "Menu" 的 sheet 中,我展示了工作簿,那里有规则和其他关于如何操作工作簿和类似内容的文本,在 "Infos" 中也是如此,只是一堆其他工具。

在 "Menu" 上,用户可以创建一个新表单,在他填写之后,每次他点击按钮 [=75] 时,都会填充 sheet "Consolidado" =],将创建一个新的表格(我只是从 sheet "Master" 创建一个副本)来填写。

然后他根据需要创建了许多sheet后,他按下"Consolidar"按钮,删除旧的并创建一个新的"Consolidar" sheet .

我想我已经涵盖了工作簿的功能。我会尝试制作一个空白版本,不幸的是,它来自工作并且有敏感数据。

编辑 2

我现在需要的是,在单元格上,相应的公式:

Sheet: "Menu" ; Cell:AY4

=PROC(2;1/--(Consolidado!$J:$J<>"");Consolidado!$J:$J)

Sheet: "Menu" ; Cell:AY5

=PROC(2;1/--(Consolidado!$AF:$AF<>"");Consolidado!$AF:$AF)

Sheet: "Menu" ; Cell:AY6

=(PROC(2;1/--(Consolidado!$X:$X<>"");Consolidado!$X:$X))/(PROC(2;1/--(Consolidado!$L:$L<>"");Consolidado!$L:$L))

Sheet: "Menu" ; Cell:AY7

=(PROC(2;1/--(Consolidado!$AG:$AG<>"");Consolidado!$AG:$AG))/(PROC(2;1/--(Consolidado!$J:$J<>"");Consolidado!$J:$J))

还有什么,尽管问。再次感谢大家的帮助!

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

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

确保更改列并添加 sheet 引用。

您要查找的 sheet 是否有一组独特的列 headers? 一旦你打开 spreadsheet 进行处理,你就可以遍历 sheets 寻找 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

如果 sheet 不存在,您可以使用相同的方法来查找标识列 headers,只要足以确保您拥有正确的 sheet:

    '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。