ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ggsmart

菜鸟谈VBA最最基础入门《原创》

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-8-16 00:27 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
利害利害,,

TA的精华主题

TA的得分主题

发表于 2009-8-16 00:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
根据我肤浅的认识,帖子第5楼的图片4,貌似应该用workbook的sheetactivate事件更加符合题目要求。

TA的精华主题

TA的得分主题

发表于 2009-8-16 08:54 | 显示全部楼层
一直想学习VBA
现在终于有机会了。
感谢楼主

TA的精华主题

TA的得分主题

发表于 2009-8-16 09:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-16 10:15 | 显示全部楼层
正用得上,得好好学习!
内容写得生动活泼,很容易看懂,赞一个!
谢谢楼主分享。。。

TA的精华主题

TA的得分主题

发表于 2009-8-16 10:56 | 显示全部楼层
再不说声谢谢对不起自己的良心

TA的精华主题

TA的得分主题

发表于 2009-8-16 12:46 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-16 14:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 moon2778 于 2009-8-16 00:29 发表
根据我肤浅的认识,帖子第5楼的图片4,貌似应该用workbook的sheetactivate事件更加符合题目要求。


肤浅的认识?呵......moon2778好谦虚!严重不习惯!。
非常感谢你提出讨论的问题。
在五楼里我的原话是: “我们需要当激活某工作表的时候,自动弹出一个对话框,告诉我们激活的工作表的名称。”
我的原意是当激活某个工作表的时候,告诉我们激的工作表的名称,而不是激活所有工作表的时候都需要提醒。所以我就用了工作表的active事件。因为我没有叙述清楚的原因,让moon2778把我的目的理解成激活工作薄里的任意一个工作表都会告诉我们它的名称,所以就用workbook的sheetactivete事件。

但是没关系,这里我们只是举个例,让大家熟悉怎样通过响应一个对象的事件来执行某项操作。目的达到就OK。

[ 本帖最后由 ggsmart 于 2009-8-16 14:41 编辑 ]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-16 14:40 | 显示全部楼层
用户窗体
-----------------------
  用户窗体(UserForm对象)是VBA的另一类对象。它表现出来是一个窗口或对话框,如前面我们说的MsgBox与InputBox语句弹出来的都属于窗体。使用窗体可以提供一个形象的用户界面。同我们可以在工作表(WorkSheet)上在添加不同的控件一样,在这个界面上,我们可以添加命令按钮、标签、图像、列表框等控件,用户可以通过修改控件的属性、编写不同的事件过程在程序运行过程中与程序进行交互。
  
  1、添加窗体
  如果你还没有忘记怎么插入模块?那请用同样的方法插入一个用户窗体。
  Alt+F11快捷键打开VBE编辑窗口,在工程资源管理器窗口中单击右键,选择“插入——用户窗体”命令。

  
1-1.jpg

  Excel为用户窗体取名,同为工作表、按钮等取名一样,采用“老大,老二,老三……”的取名方式。所以新插入的用户窗体默认名称为“UserForm1”,如果再继续插入窗体,就是“UserForm2”,接着是“UserForm3”……
  当然,你可以为它重新取一个你喜欢的名字,新名字叫大花二花,或者是大狗二狗,随你了,为了方便学习,这里我们统一为其更名为“我的窗体”,方法为:在工程资源管理器中双击窗体对象,在属性窗口中重新修改“(名称)”(对象的name属性)为“我的窗体”即可。修改完成后,可以在工程资源管理器窗口中看到相应的名称已经改变了。
  
1-2.jpg

  这时,窗体的“名称”已经修改好了,再看看窗体,左上角还显示着“UserForm1”,这就相当于贴在一个按钮表面的标签,想要修改它,只需要修改对象的“Caption”属性即可。用改“名称”的方法,我们把这个窗体的“Caption”属性修改为“我的第一个VBA窗体”。
  就像你家里贴的地板一样,新建的窗体的大小样子都一样。但是我们根据自己的需要对其进行美化或修改。如大小,背景颜色,背景图片等等,我们可以手动在属性窗口里对其进行修改,也可以程序中用代码进行修改。如修改该窗体的宽度,代码设置为:
  

  1.   我的窗体.Width = 500         '500是你需要修改后的宽度,以磅(Point)为单位
  2.   
复制代码
  动手试一试,在属性窗口里设置“我的窗体”宽300 Point(Width属性),高200 Point(Height属性)。
  
  2、为窗体添加界面元素
  窗体就像一个舞台,舞台上得有演员才能和观众进行互动。同样,我们得为窗体这个舞台添加演员,演员可以是命令按钮、标签、文字框等等,你可以根据自己的剧本的需要安排不同的角色。
  向窗体添加控件,同在工作表中添加窗体控件一样。如果你现在的VBE编辑窗口中没有“工具箱”,请通过“视图——>工具箱”菜单命令,或单击“工具栏”上的“工具箱”按钮打开它。
  
1-3.jpg

  想知道“工具箱”里的控件是哪一种是“命令按钮”,哪一种是“标签”,哪一种是“文字框”,只需要把鼠标指针移到相应的控件上面,即会显示相应的说明。
  在工具箱里用鼠标点选相应的控件,在窗体上按下鼠标左键,拖动即可将控件添加到用户窗体。控件的大小、在窗体上的位置我们可以通过鼠标进行修改,当然,同修改其他属性一样,我们也可以在属性窗口或程序的过程中用代码进行修改。
  别闲着,动手试一试:
  (1)向窗体添加一个命令按钮
  改按钮名称为“确定”。设置显示在按钮上的文字(Caption属性)为“完成”,高25(Height属性),宽60(Width属性),距“我的窗体”左端220(Left属性),距“我的窗体”顶端80(Top属性)。
  
当然,上面只是教你怎样在属性窗口里对控件的属性进行修改。要求不是太完美的时候,我们可以在窗体上用鼠标拖动修改一下就可以了。

  (2)向窗体添加一个标签
  改标签的名称为“说明”。设置字体(Font属性)为“宋体,五号,斜体”,显示的内容(Caption属性)为“请输入内容”(慢速双击激活控件即可输入)。
  (3)向窗体添加一个文字框
  改文字框的名称为“内容”,设置字体(Font属性)为“楷体五号字”,字体颜色(ForeColor属性)为“红色”。
  回到窗体设计模式,按F5键(或者执行“运行——>运行子过程/窗体”菜单命令,或单击工具栏上的“运行子过程/窗体”命令按钮),完整的一个用户窗体就显示在桌面上了。
  
1-4.jpg

  当然,因为没有添加任何的VBA指令,此时,窗体里的控件是不会工作的。
  
  (4)为命令按钮添加事件过程
  上面的标签,文字框,命令按等控件(ActiveX控件,同我们刚开始说的窗体控件是有区别的)都属于对象,我们可以通过编写相应的代码设置其属性,调用其方法,响应其事件来达到我们需要实现的操作。
  比如在“我的窗体”中,如果需要在点击“完成”按钮(按钮名称为“确定”)后,用一个Msgbox告诉我们,文字框(名称为“内容”)里输入的是什么内容。
  有了这个思想,我们可以模拟把程序写为:
  Sub 确定_单击()
          Msgbox “文字框里输入的内容是:” & 内容.输入的内容
  End Sub

  有了这个模拟的程序,再来写就简单了。
  “单击”是“确定”的一个事件,即Click事件,“内容.输入的内容”是读取“内容”的Value属性。
  这样,我们的程序实际上是:
  

  1.   Sub 确定_Click()
  2.       MsgBox "文字框里输入的内容是:" & 内容.Value
  3.   End Sub
  4.   
复制代码
  回到窗体,双击按钮,切换到代码模式,在左面“对象列表”中选择对象“确定”,右面事件列表中选择事件“Click”,将Sub与End Sub之间输入代码MsgBox "文字框里输入的内容是:" & 内容.Value。回到设计模式下,按F5键,再次运行窗体,在文字框里输入内容,单击“完成”。
  也许你需要在文字框里什么也没有输时,单击按钮后,提示我们“文字框里没有输入任何内容”,并退出程序。可以的,加一个If—Then语句即可。如果需要将文字框里的内容换行显示,那么在提示内容与显示内容之间再连接一个“Chr(13)”,就个的作用相当工作表中的“Char(10)”,这里不再多说。
  我最后写的代码是:
  

  1.   Private Sub 确定_Click()
  2.       If 内容.Value = "" Then
  3.           MsgBox "文本框里没有输入任何内容!"
  4.           Exit Sub      '退出sub过程,不再执行下面的语句
  5.       End If
  6.       MsgBox "文字框里输入的内容是:" & Chr(13) & 内容.Value
  7.   End Sub
  8.   
复制代码
  
  3、显示窗体
  显示窗体就是把窗体显示给用户。
  显示窗体可以调用窗体的Show方法。
  窗体的显示模式有两种:
  (1)模式窗体:窗体显示后将停显示之后的代码直到退出或隐藏此窗体,并且必须退出或隐藏此窗体后,才可以操作非此窗体的其他界面元素。
  也就是说,当你使用模式窗体显示某窗体的时候,当程序执行完“显示窗体”这条命令后,将暂停执行程序里剩余的语句,真正这个窗体被隐藏或退出。关且当窗体显示出来以后,你不能激活该窗体以外的任何区域。
  (2)无模式窗体:窗体显示后会继续执行程序里余下的语句,而其他的窗体或界面也可以进行操作。
  
  显示窗体的语句:
  (1)模式窗体的显示代码:
  窗体名称.Show  vbModal
  也可以写成:窗体名称.Show 1
  (2)无模式窗体的显示代码:
  窗体名称.Show  vbModeless
  也可以写成:窗体名称.Show 0


  
悄悄告诉你:因为对于Show方法,如果不指定模式,则默认为模式窗体,又因为我很懒,所以我的习惯是:当我需要用模式窗体的时候,就直接“窗体.Show”,需要无模式的时候就“窗体.Show 0”,多个0少个0而已,懒得去记那有模式无模式的字母,我英文差,反正看了也不一定认识。

  
  4、关闭窗体
  当不再需要使用某个窗体后,我们需要把它关闭。当然,每一个窗体上都有“关闭”按钮。但这肯定不能满足我们在程序的设计过程中的需求。
  我们可以通过Hide来隐藏窗体。代码为:
  窗体名称.Hide

  也可以通过Unload来卸载窗体。代码为:
  Unload 窗体名称
  二者都可以关闭窗体,但是却是有区别的。Show一个Hide的窗体比Show一个Unload的窗体用的时间要短。所以,当你需要反复使用某个窗体的时候,建议你用Hide而不用Unload。
  
------------------------------------------------------------最后-----------------------------------------  
        上面讲的这些内容,打开VBE窗口,插入窗体,添加控件,修改属性,编写事件过程等等,这些,你都跟着做了吗?如果你已经做了,那最后我再留给你一点事情算是作业吧:
  (1)插入一个模块,编写两个Sub过程,分别以“模式窗口”和“无模式窗口”显示“我的窗体”(可在显示窗体命令的下一行再编写另外一条指令查看两者在程序执行过程中的区别);
  (2)在工作表上插入两个窗体控件的按钮(记住是窗体控件),分别改按钮上显示的字为“模式窗体”和“无模式窗体”,并把刚才编写的两个宏分别指定给它们;
  (3)再次进行入“我的窗体”的设计模式,添加两个按钮,分别改其“Caption”属性为“隐藏窗体”和“卸载窗体”。分别为两个按钮编写响应其相应事件的代码,使得当单击“隐藏窗体”按钮时,隐然“我的窗体”,单击“卸载窗体”时,卸载“我的窗体”。
  弄好后,你可以点击工作表上的铵钮,调出窗体,看看自己的第一件作品了。

       PS:这是我的作业,供参考! 用户窗体.rar (9.94 KB, 下载次数: 11924)
  

[ 本帖最后由 ggsmart 于 2009-8-16 15:05 编辑 ]

评分

12

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-8-16 15:33 | 显示全部楼层
为避免大家都不习惯,我还是不客气好了。。。。。11楼的代码 为什么前面要if呢?为什么不全部case?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case [a1].Value
    Case ""
    MsgBox "未输入任何字符"
    Case Is < 60
    MsgBox "不及格"
    Case Is < 85
    MsgBox "较好"
    Case Is < 100.0001
    MsgBox "优秀"
    Case Else
    MsgBox "不能识别"
End Select
End Sub

[ 本帖最后由 moon2778 于 2009-8-16 15:36 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 11:02 , Processed in 0.049750 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表