在excel中,打开一个工作薄,里面有三个工作表,怎么才能使三个工作表一起运行宏呢?

我有一个工作薄,里面有三个工作表,分别是“日期一”、“日期二”、“日期三”。假设每个工作表a列都有十个日期(2010-1-1),如何编写宏,使到每次打开工作簿,三个工作表的B列都自动生成一个日期,这个日期是A的15天,即(2010-1-15)?
是三个工作表一起运行,不要分开运行,请问可以吗?

用工作薄Open打开事件,能实现你的要求,不过你所说的三个工作同时运行宏那是不可能的.宏在3个工作表运行时终有个先后顺序吧.由于并不清楚你的工作薄中的工作表数目,如果只有3个,下面代码能够实现你的要求.按ALT+F11进入VBE窗口,在"工程资源管理器"窗口中双击"ThisWorkbook",在出现的代码编辑区复制粘贴以下代码.
Private Sub Workbook_Open()
Dim Sht As Worksheet, rng As Range
For Each Sht In Worksheets
For Each rng In Sht.Range("a1", Sht.[a65536].End(3))
rng(1, 2) = rng + 14
Next
Next
End Sub

如果工作薄中工作表数目为4 用以下代码:
Private Sub Workbook_Open()
Dim Sht As Worksheet, rng As Range
For Each Sht In Worksheets
If Sht.Name <> "工作表1" Then '此处工作表名称"工作表1"自己更改
For Each rng In Sht.Range("a1", Sht.[a65536].End(3))
rng(1, 2) = rng + 14
Next
End If
Next
End Sub

下面代码无论你有多少个工作表都能实现你的要求:
Private Sub Workbook_Open()
Dim Sht As Worksheet, rng As Range, Arr, i%
Arr = Array("日期一", "日期二", "日期三")
For i = 0 To UBound(Arr)
For Each Sht In Worksheets
If Sht.Name = Arr(i) Then
For Each rng In Sht.Range("a1", Sht.[a65536].End(3))
rng(1, 2) = rng + 14
Next
End If
Next
Next i
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-22
给你个简单的:
Private Sub Workbook_Open()
for i =2 to 11
sheets(1).cells(i,2)=sheets(1).cells(i,1)+14
sheets(2).cells(i,2)=sheets(2).cells(i,1)+14
sheets(3).cells(i,2)=sheets(3).cells(i,1)+14
next
end sub
程序注解:
打开工作簿执行代码
定义变量i为1到10循环
集合工作表1的第2列i单元格(2到11单元格)等于第一列的2到11单元格加14天
集合工作表2的第2列i单元格(2到11单元格)等于第一列的2到11单元格加14天
集合工作表3的第2列i单元格(2到11单元格)等于第一列的2到11单元格加14天
退出循环
结束程序
注:2010-1-1加14即等于2010-1-15
二楼用了数组。我感觉没有必要,因为程序非常简单不应复杂化,也没有必要用if
直接了当解决完事,就三个表 直接集合工作表1、2、3就得了本回答被提问者采纳
第2个回答  2010-08-21
2楼的方法过复杂,不利于初学者,
观笔者之问题,笔者应为中下级学者.可能不能尽用二楼的大做.

看我的简单办法.
新建表,名为"数据表",输入你要用的数据.比如.2010-01-01
在其它三表中.分别引用此表之数据,只要数据表中的日期一更新,其它三表中的日期也会更新.
此为在编程中自制函数或引用,用来节省代码的妙法.
二楼以为如何.
第3个回答  2010-08-21
需要宏吗?
相似回答