使用工作表名称作为变量,但具有刷新能力
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。
哦.!
我是来帮忙解决的,我想,这是一个简单的问题。
在作品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。