我有一份工作手册,每周报告一次 . 到本周末,它将包含8个工作表,一个用于一周中的每一天,第八个工作表用于报告整周的值 . 工作表:周一,周二,周三,周四,周五,周六,周日,周
每个工作表的格式完全相同,并从模板表中复制 .
为了保持简单,我把它煮成一个单元格B12 .
工作中的B12“周”需要等于:=星期一!B12星期二!B12星期三!B12星期四!B12星期五!B12星期六!B12太阳!B12
我打算用VBA将上面的公式插入到工作表“Week”的Cell B12中,但是我有几个问题:
1)并非所有日常工作表都存在,例如,如果我在星期三运行报告,则仅存在“星期一”和“星期二” . 如果我在星期六运行报告,将会出现“星期一”,“星期二”,“星期三”,“星期四”和“星期五” . 这意味着我不能只将上面的公式插入到“周”的单元格B12中,因为我得到了#REF!由于不存在的工作表导致的错误 .
因此,我需要一些代码来添加7张日常工作表中的任何一张的所有B12值,但仅限于该工作表存在时 .
因此,如果我在星期三运行报告它等于:=星期一!B12星期二!B12
如果我在星期六运行报告它等于:=星期一!B12星期二!B12星期三!B12星期四!B12星期五!B12
2)我的第二个问题是,这不仅适用于单元格B12,也不适用于另外100个单元格,它们不是全部在一个范围内,它们是分散的,有些是合并的单元格等等 . 所以虽然我是谈到B12试图简化这篇文章,我希望能够轻松地将解决方案应用于许多其他单元格而无需写出数百个if语句等 .
希望这是有道理的 .
这是我到目前为止所处的地方,但它不起作用:
Sub test()
Dim ws As Worksheet
Dim testVar As Double
Dim wsName As String
wsName = ws.Name
For Each ws In ActiveWorkbook.Worksheets
Select Case wsName
Case "Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"
testVar = testVar + Worksheets(wsName).Range("B12").Value
End Select
Next ws
Worksheets("Week").Range("B12").Value = testVar
End Sub
干杯
4 回答
试一试 .
您应该能够在“周”工作表中选择任何范围或单个单元格,然后点击宏以获取日常工作表中匹配单元格的总和 .
如果我理解正确,您每天都会有一个包含一定数量的工作表的文件,另外还有报告表作为最后一页 .
然后你可以使用n = ThisWorkbook.Sheets.Count,这将是总页数并获得表(1)到表(n-1)的总和 .
像这样的东西:
好吧,我让它工作,但我决定将它用作函数,而不是最小化我需要编写的代码量 .
我写了以下作为例子:
但当我打电话给“测试”时,我得到了一个对象!错误?
以下是适当函数的代码:
然后会像这样调用它: