因此,我有一个excel文件,可以在其中输入要分析的不同项目以及文件的位置。然后是一个代码,用于获取文件并为输入的每个项目生成2张纸(从我创建的模板),并填充数据。这些项目可以更改名称和数量。
当我尝试做一个总桌时,我的问题出现了。我要去哪里,从不同工作表中的相同单元格得到值并将它们相加。工作表的数量可以更改,因此我没有设法使用sheets.count,但是与此操作相关的工作表的名称均以“ Total_”开头。
所以到目前为止,我的代码开头是:
`Sub refresh()
Parametre
Dim nbOnglet As Integer
Dim nbProjet As Integer
Dim name As String
Dim nametot As String
Dim A As String
Dim B As String
Dim idx As Integer
Dim iDebut As Integer
Dim values As Variant
Dim rng As Range
Dim xRng As Range
Dim x As Long
Dim vArray As Variant
Dim dSum As Double
Initialisation
iDebut = 9
Déterminer le nombre d'onglets du Classeur
nbOnglet = Sheets.Count
Déterminer le nombre de projet à traiter
folderpath = Range("C3").Value
Sheets("Sommaire").Select
nbLigne = Cells(10, "A").Value
x = 0
For idx = 1 To nbLigne
activate Récapitulatif
Sheets("Récapitulatif").Select
Define the variable name - tab name
A = "Total_"
B = Sheets("Sommaire").Cells(iDebut + idx, "D").Value
name = B
nametot = A & B`
然后对于太阳,我尝试了不同的选择,但是似乎没有一个适合整个桌子。通过使用以下命令,我设法获得了一个单元的良好结果:
x = x + sheets(nametot).range("F7").Value2
但是不能在所有范围内都使用它(F7:CI31)。
我尝试过的其他公式是:
Set xRng = ThisWorkbook.Sheets(nbLigne).Range("K7:CI31")
xRng.FormulaR1C1 = "=SUM('" & ThisWorkbook.Sheets(nametot).name & "'!RC+'" & ThisWorkbook.Sheets(nametot).name & "'!RC)"
尽管这给出了我想要的方程式,因为它正在循环中运行,但它为每张图纸计算相同的结果,并在最后确定的那张图纸上停止...因此,我没有做我想做的事情:将相同的单元格相加不同的工作表名为“ Total_XXXX”,并在“Récapitulatif”工作表中显示值。
我一直在浏览互联网,但我真的想不出办法。 你有什么想法? 提前谢谢你
答案 0 :(得分:0)
链接(Microsoft文档)
说明
ThisWorkbook
)的工作簿中,以下内容将合并(在本例中为(xlSum
))所有工作表中所有相同范围(srcRange
),其中从指定单元格(srcLead
开始的另一个工作表(tgtName
)中以指定字符串(tgtFirst
开头的名称)。代码
Option Explicit
Sub consolidateWorksheets()
' Define constants.
Const srcRange As String = "K7:CI31"
Const srcLead As String = "Total_"
Const tgtName As String = "Récapitulatif"
Const tgtFirst As String = "A1"
' Define workbook.
Dim wb As Workbook
Set wb = ThisWorkbook
' Define Target Worksheet.
Dim tgt As Worksheet
Set tgt = wb.Worksheets(tgtName)
' Define R1C1-Style Source Ranges Address.
Dim rcRng As String
rcRng = tgt.Range(srcRange).Address(ReferenceStyle:=xlR1C1)
' Define Consolidation Array.
Dim Data As Variant
ReDim Data(1 To wb.Worksheets.Count)
' Declare variables.
Dim ws As Worksheet ' Current Source Worksheet
Dim CurrentName As String ' Current Source Worksheet Name
Dim n As Long ' Current Element in Consolidation Array
' Write full paths of Source Worksheets to Consolidation Array.
For Each ws In wb.Worksheets
CurrentName = ws.Name
If InStr(1, CurrentName, srcLead, vbTextCompare) = 1 Then
n = n + 1
Data(n) = "'" & ws.Name & "'!" & rcRng
End If
Next ws
' Validate and resize Consolidation Array.
If n = 0 Then
MsgBox "No worksheets to consolidate.", vbCritical, "Fail"
Exit Sub
End If
ReDim Preserve Data(1 To n)
' Consolidate.
tgt.Range(tgtFirst).Consolidate Sources:=Data, _
Function:=xlSum
' Inform user.
MsgBox "Data consolidated.", vbInformation, "Success"
End Sub