簡體   English   中英

使用工作表名稱作為變量,但具有刷新功能

[英]Using worksheet name as variable, but with refresh ability

哦!

我在這里尋求幫助,以解決我的想法,這是一個簡單的問題。

在工作表中,我指的是工作表中一些名為“ Consolidado”的單元格,但是由於某些代碼,工作表(“ Consolidado”)被刪除並使用新數據再次創建,並且每次我運行代碼時,都會在另一個工作表的公式中收到“ #REF”錯誤。 有沒有一種方法可以“修復”,在公式的引用中強制其為“ Consolidado”?

這是公式。

其中#REF應該為"Consolidado"

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

再次感謝您的幫助!

=========編輯==========

下面是我用來“刷新”工作表“ Consolidado”的宏:

每次單擊“合並”按鈕時,此宏都會創建一個新的摘要。 但是,在創建新表之前,它將銷毀舊表以確保數據是新的。


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

在另一張名為“菜單”的工作表中,我介紹了工作簿,其中有一些規則以及有關如何操作工作簿的其他文字以及類似內容的信息,與“信息”中的相同,只是一堆其他工具。

在“菜單”上,用戶可以創建一個新表單,填寫該表單后,將在每次單擊“ Criar Nova Aba”按鈕時填充“ Consolidado”工作表,將創建一個新表單(我只是創建了一個從表格“ 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))

還有什么,問一下。 再次感謝您提供的所有幫助!

我只是嘗試了一些似乎可行的方法...

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

確保更改列並添加圖紙參考。

您要查找的工作表是否具有一組唯一的列標題? 打開電子表格進行處理后,您就可以遍歷工作表以查找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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM