带你入门VBA第四讲如何控制关于工作薄与工作表Word下载.docx
- 文档编号:17376227
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:29
- 大小:186.86KB
带你入门VBA第四讲如何控制关于工作薄与工作表Word下载.docx
《带你入门VBA第四讲如何控制关于工作薄与工作表Word下载.docx》由会员分享,可在线阅读,更多相关《带你入门VBA第四讲如何控制关于工作薄与工作表Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
workbooks.openfilename:
="
c:
\2.xls"
59:
我想设为只应用于本工作薄,在哪设(不在程序中设),因为我同时要打开别的工作薄工作
详细些.
指定工作薄:
Workbooks("
工作薄名称"
)
以下是引用先锋在2004-10-1411:
01:
运行结果COUNT的属性使用无效,要不要赋一个变量,变量=对象.属性
改成下面的:
Sub按钮1_单击()MsgBoxWorkbooks.CountEndSub注:
Workbooks中的"
S"
别少了
把打开的某个工作设为当前工作薄
2.XLS"
).Activate
以下是引用求奇在2004-10-1411:
08:
输入WORKBOOKS.COUNT后运行出现错误。
MsgBoxWorkbooks.Count
一次新建多个工作薄:
Fori=10To13Workbooks.AddActiveWorkbook.SaveAsFilename:
\"
&
i&
"
.xls"
Next
以下是引用一杯清茶在2004-10-1411:
25:
是表示什么意思呀?
MsgBox是VBA中的一个函数.可以以对话框形式显示或返回信息,如:
当你在关闭工作薄时的提示
当你在删除工作表时出现的提示
Workbooks.close是关闭所有打开的工作薄
123,XLS"
).close是关闭指定的工作薄
以上讨论了工作薄的新建,保存和统计,做个练习
要求:
1、设置一个按纽,执行程序后会在D盘新建三个EXCEL文件,文件名分别为1、2、3
2、设置一个按纽,执行程序后会关闭工作薄"
然后再统计打开工作薄的数量
可以了.新建四个工作表名字分别为(10-13).XLS.SaveAs什么意思?
对工作簿的修订保存到另一个不同的文件。
41:
1)
Sub按钮1_单击()Fori=1To3Workbooks.AddActiveWorkbook.SaveAsFilename:
D:
NextEndSub
正确
用程序为一个文件加个密码:
Workbooks.Open"
\12.xls"
Workbooks("
12.xls"
).SaveAsFilename:
C:
Password:
123"
).Close
Sub按钮1_单击()Workbooks("
).CloseMsgBoxWorkbooks.Count
EndSub
不行,下标越界,是怎么回事
程序运行前工作薄2是否存在并已打开?
以下是引用先锋在2004-10-1412:
05:
刚才建的我把它关掉后,才看到题目,后来我单独新建了一个2.XLS,是不是这样不行呀?
该吃饭了,老师!
谢谢你!
如果你的电脑中文件是隐藏后辍,命名时输入2就可以了,如果输入2.XLS,文件名就成了2.XLS.XLS
13:
怎么知道文件是隐藏后缀?
我目前有两打开的文件,一个直接显示BOOK6没有扩展名,一个是BOOK2.XLS是怎么回事?
先看看下面的例子(用这例子说说工作薄的事件及工作表的控制方法)
打开后你无法插入新工作表:
活动工作表Thisworkbook
PrivateSubWorkbook_NewSheet(ByValShAsObject)
Application.DisplayAlerts=False
Sh.Delete
Application.DisplayAlerts=True
和工作薄类似,工作表集合为Sheets,
Sheets("
sheet100"
)即为工作表100
Sheets
(1)第一个工作表Workbooks
(1)第1个工作薄
在程序中输入Sheets.后会出现Sheets集合对象的所有属性和方法
在程序中输入Sheets("
工作表名"
).后会出现Sheets对象的所有属性和方法
ByVal是通常用来表示某个自变量将以传值(一种以传递自变量值给程序的方式,让程序取得变量的值,注:
变量的值将不会被程序所更改)的方式传值
上例中:
PrivateSubWorkbook_NewSheet(ByValShAsObject)Application.DisplayAlerts=FalseSh.DeleteApplication.DisplayAlerts=TrueEndSub
把新增加的工作表作为变量传给程序(ByValShAsObject),程序中Sh.Delete才能运行,Sh即为新插入的工作表,(ByValShAsObject)是系统自动提供的,不能更改
以下是引用happy91在2004-10-1413:
29:
点击浏览该文件不是要的结果
程序放错地方了,应该在Thisworkbook中,不应在模块中
在代码框中上方有两个组合框,一个是显示对象名称,如:
workbook,worksheet,以及你插入的控件名称,另一个就是事件名称,比如:
open、close等,在利用工作薄或工作表事件程序时,在对象框中选取对象(本例选Workbook),在事件下拉框中选取事件名称,本例是(Newsheet),即当新增工作表时运行什么什么程序
以下是引用先锋在2004-10-1413:
42:
Private在这里是什么意思?
我把去掉,也正常运行.
Private中文意思是私有的,所在在前面加个它后,表示程序只能在本内部运行,别的程序不能调用这个程序。
如下面的就是调用的例子
SUBAA()
语句
ENDSUB
SUBBB()
AA
其他语句
ENDSUB
怎么没人问这句?
是不是地球人都知道?
?
以下是引用黑色幽默在2004-10-1414:
10:
d:
NextEndSubSub按钮2_单击()Workbooks("
).CloseMsgBoxWorkbooks.CountEndSub我依样画葫芦的。
这样对么?
可是第二个按钮的运行结果是“4”,我当前只有3个工作簿。
怎么回事?
再试试,
Fori=1To3Workbooks.AddActiveWorkbook.SaveAsFilename:
NextWorkbooks("
我运行的是3
以下是引用happy91在2004-10-1414:
17:
楼主讲一下,还没来得及问
DisplayAlerts是Application的一个属性。
它的作用是如果不想在宏运行时被无穷无尽的提示和警告消息所困扰,就将本属性设置为False;
这样每次出现需用户应答的消息时,MicrosoftExcel将选择默认应答。
如果将本属性设置为False,那么宏运行结束后,MicrosoftExcel并不自动将其设置回True。
故当宏运行结束后,都应将本属性设置回True值。
本例中如果直接用Sh.delete,运行时会出现
32:
我再运行一次就提示是否覆盖已经存在的1.2.3文件,点确认了之后还是显示4个。
还有一问:
把MsgBoxWorkbooks.Count的弹出窗口显示为
MsgBox"
你一共打开了"
Workbooks.Count,"
个工作簿"
怎么提示语法错误?
Workbooks.Count&
工作表SHEETS的属性和方法很多,介绍几个常用的
Sheets.Count工作薄中工作表的数量
Sheets
(1).name返回第一个工作表的名子
sheets("
sheet1"
).activate设置sheet1为活动工作薄
).Delete删除sheet1
SHEET1"
).MoveAFTER:
=Sheets(Sheets.Count)把Sheet1移到最后
).ProtectPASSWORD:
=123保护工作表
).unProtectPASSWORD:
=123解除工作表保护
).usedrange工作表中已使用的单元格区域
).visible=true(false)工作表是否隐藏
).ScrollArea="
$A$1:
$A$10"
工作表的控制区域为A1:
A10
以下是引用happy91在2004-10-1415:
33:
运行就出错:
对象不支持属性或方法
可能是对文件命名时用数字的原因
用ActiveWorkbook.SaveAsFilename:
Str(i)&
后
再:
2.xls"
).Close注:
2前有个空格,如果在命名时:
就不用加空格了MsgBoxWorkbooks.Count
就可以了
有兴趣的请做个练习(这些问题都是经常有人问):
1、如何一次性给所有工作表改名为A1、A2、A3....?
2、如何一次保护(或解除保护)所有工作表?
3、在闭工作薄前隐藏N-1个工作表(N是工作薄内工作表的总数),只留一个工作表?
以下是引用shangyu在2004-10-1510:
路过,看着挺好!
兰色幻想辛苦了!
补充一下:
有两个方法,是在对工作簿open、saveas操作时非常有用的:
getopenfilename、getsaveasfilename。
这两个方法是用于打开“打开”、“另存为”对话框,获取要open、saveas的工作簿路径名称。
前面兰色幻想老师说的打开、另存为的方法都是在代码中直接指定路径和文件名,对自己用可以了,但一旦文件名或路径有了变化,就要修改代码,因此与用户的交互性不是很好。
使用这两个方法,可以在需要打开或另存的时候跳出对话框,由用户直接选取打开文件或另存文件的路径、文件名。
fileToOpen=Application.GetOpenFilename("
ExcelFiles(*.xls),*.xls"
)IffileToOpen<
>
FalseThenMsgBox"
Open"
fileToOpenEndIf
这是帮助中的一段代码,可以将它放入sub中测试一下,注意运行后并不真正打开选取的文件,只是取得该文件的路径、文件名,真正打开还要使用workbooks.open方法。
版主补充的好,SHANGYU版主是一位难得的全能型人才,在基础应用、函数、VBA都有很高的造诣,令我望尘莫及,也十分的佩服!
以下是引用lpdcd在2004-10-159:
50:
请问:
程序放错地方了,什么程序应该在Thisworkbook中,什么程序应在模块中。
如果你想让EXCEL自动为你服务(如打开、关闭文件、单击单元格、更换工作表就自动执行你设置的程序,而不需要去点击按纽或宏--执行宏来触发宏的运行)就考虑用事件程序,也就是放到MIRCROSOFTEXCEL对象中,如果程序要用手工控制,如点击某个按纽或通过宏选项执行宏才让程序运行,这种情况下用宏按纽方便。
举个例子:
填充非空单元格颜色
PrivateSubWorkbook_SheetChange(ByValShAsObject,ByValTargetAsRange)IfTarget.Value<
"
ThenTarget.Interior.ColorIndex=3EndIfEndSub
上面是一个事件程序,当工作表内容改变时就运行Target.Interior.ColorIndex=3
如果这用宏来完成则很不方便,如果这样则,在单元格中每填入一个数字都要点一下按纽运行下面的宏Sub矩形1_单击()IfActiveCell.Value<
ThenActiveCell.Interior.ColorIndex=3EndIfEndSub
以下是引用yigepure在2004-10-1513:
Sub按钮1_单击()DimaAsInteger,bAsIntegerd=Application.Worksheets.CountIfd<
0ThenFora=1TodSheets(a).Name="
A"
aSheets(a).Protectpassword:
=123NextaEndIfEndSub
先交一题
好!
可以再简化一些
Sub按钮1_单击()DimaAsInteger,bAsInteger应该是d吧d=Application.Worksheets.Count这一句可简化为d=sheets.countIfd<
0Then这一句可不要,因为工作薄中至少会有一个工作表Fora=1TodSheets(a).Name="
=123NextaEndIf这一句可不要,因为工作薄中至少会有一个工作表EndSub
以下是引用yigepure在2004-10-1514:
PrivateSubworkbooks_beforeclose(ByValshAsObject,aAsInteger)DimbAsIntegerb=Application.Worksheets.CountIfb>
1ThenFora=2TobSheets(a).Visible=falseNextaEndIfEndSub
兰老师,我将这段代码放在THISBOOK中为什么关闭时,还是不能运用呢,哪里出错了呢.请指教
可能是你的工作表的保护还未解除,程序中加入解除保护的语句可能就行了
呵呵!
原来是你多了个S
workbooks
PrivateSubworkbook_beforeclose(ByValshAsObject,aAsInteger)DimbAsIntegerb=Worksheets.CountFora=2TobSheets(a).Visible=FalseNextaEndSub
我要是没有这个S就会出现以下提示
编辑错误:
过程声明和事件描述不匹配,或声明重复.我将它们改为
PrivateSubworkbook_beforeclose(ByValshAsObject,cAsInteger)DimbAsIntegerb=Worksheets.CountForc=2TobSheets(a).Visible=FalseNextcEndSub
还是老样子,如果加了S,又是不执行呀
Forc=2TobSheets(a).Visible=False应该是SHEETS(C)
以下是引用yigepure在2004-10-1519:
从今天中午到现在一直困惑的问题.
还有兰老师你什么时候能讲讲你的经典之作.伪正规软件的权限设置和密码登陆
PrivateSubworkbook_beforeclose(ByValshAsObject,cAsInteger)DimbAsIntegerb=Worksheets.CountForc=2TobSheets(a).Visible=FalseNextcEndSub
1、这里的错误是绿色部分,去掉就可以了,因为事件程序中的变量是系统自带的不能修改和添加,还有你用C循环,却用Sheets(a).Visible=False应该是Sheets(C).Visible=False
正确的程序应该是
PrivateSubworkbook_beforeclose(ByValshAsObject)DimbAsIntegerb=Worksheets.CountForc=2TobSheets(C).Visible=FalseNextcEndSub
活动工作表thisworkbook
PrivateSubWorkbook_BeforeClose(CancelAsBoolean)
DimbAsInteger
b=Worksheets.Count
Forc=2Tob
Sheets(c).Visible=False
Nextc
PrivateSubWorkbook_BeforeClose(CancelAsBoolean)DimbAsIntegerb=Worksheets.CountForc=2TobSheets(c).Visible=FalseNextc
以下是引用yigepure在2004-10-1521:
53:
请问兰老师为什么是这样的呢.先前一个为什么不能通过呢.
为什么定义CANCEL为布尔数据呢
事件程序的(CancelAsBoolean)是系统自动加上的不能修改,选取方法在我上传文件的SHEET3里(SHEET3是隐藏状态,取消隐藏)。
以下是引用yigepure在2004-10-1522:
23:
但是什么时候用cancelasboolean(这里是不是前面省略了byref)
什么时候用byvalshasobject呢
这是由事件本身参加的对象决定的,比如
下面是受新增工作表影响
PrivateSubWorkbook_NewSheet(ByValShAsObject)
EndSub
下面是该事件受单元格改变影响
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
本例中除工作薄本身外无工作表或单元格参与,所以无自变量,Cancel起到的作用是是否中止此事件继续发生,如设置为TRUE,则中止该事件
PrivateSubWorkbook_BeforeClose(CancelAsBoolean)Cancel=TrueEndSub
上面程序可使EXCEL无法关闭
PrivateSubWorksheet_BeforeRightClick(ByValTargetAsRange,CancelAsBoolean)Cancel=TrueEndSub
这个程序可以右键单击失效,(这也是屏蔽单元格右键的一个方法)
以下是引用兰色幻想在2004-10-1513:
再把d去掉怎么样
PrivateSubCommandButton1_Click()DimaAsIntege
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 入门 VBA 第四 如何 控制 关于 工作