ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] Vba新手入门的实例课程十五讲

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-16 23:56 | 显示全部楼层
第五讲 VBA语句(一)

一.With   End With可以对代码进行精减
精简前的如下
  1. 1#  Sub Macro1()
  2. 2#  ' Macro1 Macro
  3. 3#  ' 宏由 999宝藏网 录制,时间: 2011-2-8
  4. 4#      Selection.Font.Bold = True
  5. 5#      With Selection.Font
  6. 6#          .Name = "宋体"
  7. 7#          .Size = 18
  8. 8#          .Strikethrough = False
  9. 9#          .Superscript = False
  10. 10#         .Subscript = False
  11. 11#         .OutlineFont = False
  12. 12#          .Shadow = False
  13. 13#        .Underline = xlUnderlineStyleNone
  14. 14#        .ColorIndex = xlAutomatic
  15. 15#    End With
  16. 16#    Selection.Font.ColorIndex = 3
  17. 17#  End Sub
复制代码
代码解析:第4行代码选中字体加粗;第五行到15中间用了一个With  End With语句;第6行字体为宋体;第7行字体大小为18磅,Size是大小的意思;第8行Strikethrough是删除线的意思;第9行代码Superscript是上标的意思;第10行代码Subscript是下标的意思; 第11行OutlineFont字体空心的意思;第12行代码Shadow是阴影的意思;第13行代码是下划线类型为无;14行字体的颜色为自动
精简后的如下
  1. 1#  Sub Macro1()
  2. 2#    With Selection.Font
  3. 3#          .Name = "宋体"
  4. 4#          .Size = 18
  5. 5#          .Bold = True
  6. 6#          .ColorIndex = 3
  7. 7#    End With
  8. 8#  End Sub
复制代码
代码解析:第2行选中的单元格字体进行设置;第3行代码字体为宋体;第4行代码字体大小为18磅;第5行代码字体加粗;第6行代码字体颜色为红色

二.If       Then   判断语句(单行结构)
  1. 1#  Sub 按钮1_单击()
  2. 2#    If Range("a1").Value >= 60 Then
  3. 3#      Range("b1") = "及格"
  4. 4#    End If
  5. 5#  End Sub
复制代码
代码解析:第2行代码判断,如果A1单元格的值大于等于60,那么;第3代码在单元格B1输入及格

三. If       Then  Else(简单的多行分支结构)
  1. 1#  Sub 按钮1_单击()
  2. 2#     If Range("A1").Value < 60 Then
  3. 3#       Range("B1").Value = "不及格"
  4. 4#   Else
  5. 5#       Range("B1").Value = "及格"
  6. 6#  End If
  7. 7#   End Sub
复制代码
代码解析:
第2行代码判断,如果A1单元格的值小于60,那么;第3行代码给单元格B1赋值为”不及格”;第4行代码是否则;第5行代码给单元格B1赋值为”及格”
四. If       Then   ElseIf  Then (ElseIf  Then … )Else复杂的多行分支结构
  1. 1#  Sub 加循环的复杂的多行分支结构()
  2. 2#   Dim I As Integer
  3. 3#      For I = 2 To 11
  4. 4#          If Range("A" & I) < 60 Then
  5. 5#                Range("B" & I) = "不及格"
  6. 6#          ElseIf Range("A" & I) < 70 Then
  7. 7#                Range("B" & I) = "及格"
  8. 8#        ElseIf Range("A" & I) < 80 Then
  9. 9#                 Range("B" & I) = "良好"
  10. 10#        Else
  11. 11#                Range("B" & I) = "优秀"
  12. 12#       End If
  13. 13#     Next I
  14. 14#   End Sub
复制代码
代码解析:
第2行定义变量I为整型;第3行代码到13行代码用了一个循环语句For  Next;第4行代码判断A列从A2开始到A11的值是否小于60;第5代码如果第4代码小于60,那么对应的B列从B2开始到B11单元格显示不及格,同理第6行,第7行,第8行,第9行代码。
五.Inputbox 和Msgbox函数
  1. 1#          Sub 按钮1_单击()
  2. 2#            On Error Resume Next
  3. 3#            Application.DisplayAlerts = 0
  4. 4#              Sheet1.Delete
  5. 5#            Application.DisplayAlerts = 1
  6. 6#            ANS = MsgBox("只剩下最后一张工作表了,不能删除", 48, "佛山小老鼠提醒你")
  7. 7#          End Sub
复制代码
代码解析:
第2行过程中有错语就忽掉;第3行阻止弹出保存提示对话框;第4行代码工作表1删除;第5行代码还原第3行代码,这两个是一对一对的用;第6行代码用输出函数MsgBox弹出提示
  1. 1#          Sub 按钮1_单击()
  2. 2#             S = InputBox("请输入姓名", "输入提醒")
  3. 3#             Range("A1") = S
  4. 4#          End Sub
复制代码
代码解析:
:第2行用输入函数InPutbox提醒输入姓名且把其输入的值赋给S;第3行代码把S赋给单元格A1

附件代码解析
  1. Sub 按钮1_单击()
  2. If Range("a1").Value >= 60 Then   '单元格A1的值大等于60那么
  3. Range("b1") = "及格" '单元格B1的值为及格
  4. End If
  5. End Sub
复制代码
  1. Sub 按钮1_单击()
  2.    If Range("A1").Value < 60 Then '单元格A1的值小于60 那么
  3.       Range("B1").Value = "不及格" '单元格B1显示为不及格
  4.    Else '否则
  5.       Range("B1").Value = "及格" '单元格B1显示为及格
  6.    End If
  7. End Sub
复制代码
  1. Sub 加循环的复杂的多行分支结构()
  2.      Dim I As Integer     '定义变量I为整型
  3.      For I = 2 To 11 '给变量I赋值从2到11
  4.           If Range("A" & I) < 60 Then  '从A2到A11单元格值小于60的那么
  5.                Range("B" & I) = "不及格" '与其对应的B2到B11单元格显示不及格
  6.           ElseIf Range("A" & I) < 70 Then '从A2到A11单元格值小于70的那么
  7.                Range("B" & I) = "及格" '与其对应的B2到B11单元格显示及格
  8.           ElseIf Range("A" & I) < 80 Then '从A2到A11单元格值小于80的那么
  9.                Range("B" & I) = "良好" '与其对应的B2到B11单元格显示良好
  10.           Else '否则
  11.                Range("B" & I) = "优秀" '与其对应的B2到B11单元格显示优秀
  12.           End If
  13.      Next I '下一个I
  14. End Sub
复制代码
  1. Sub 清除()
  2. Range("B2:B11") = ""  '清除B2:B11数据
  3. End Sub
复制代码
  1. Sub 按钮1_单击()
  2. S = InputBox("请输入姓名", "输入提醒") '输入函数INPUTBOX
  3. Range("A1") = S '把输入的值赋给单元格A1
  4. End Sub
复制代码
  1. Sub 按钮1_单击()
  2.   MsgBox "我在学VBA" '输出函数,把值用对话框显示出来
  3. End Sub
复制代码
  1. Sub 按钮1_单击()
  2.      On Error Resume Next  '有错误忽略掉
  3.      Application.DisplayAlerts = 0     '关闭屏幕刷新,加快程序运行
  4.      Sheet1.Delete     '工作表删除
  5.      Application.DisplayAlerts = 0     '打开屏幕刷新
  6.      ANS = MsgBox("只剩下最后一张工作表了,不能删除", 48, "佛山小老鼠提醒你")     '输出函数,弹出一警告,第二个参数的值是48

  7. End Sub
复制代码
第六讲 VBA语句(二)   122楼  http://club.excelhome.net/thread-691838-13-1.html

[ 本帖最后由 佛山小老鼠 于 2011-3-17 23:48 编辑 ]

IF语句1.rar

5.71 KB, 下载次数: 344

IF语句2.rar

5.84 KB, 下载次数: 275

IF语句3.rar

6.87 KB, 下载次数: 290

INPUTBOX.rar

5.87 KB, 下载次数: 295

MSGBOX函数(输出)1.rar

5.59 KB, 下载次数: 388

MSGBOX函数(输出)2.rar

6.14 KB, 下载次数: 294

TA的精华主题

TA的得分主题

发表于 2011-3-17 12:53 | 显示全部楼层
这么好的东西应该再次顶起!向老鼠老师学习。

TA的精华主题

TA的得分主题

发表于 2011-3-17 13:47 | 显示全部楼层
8) Cells(数字),一个单元格有一个数字代表,因为一行有256个单元格,257就是第二行的第一个单元格如
复制内容到剪贴板代码:
Sub AA()
Cells(257) = "小老鼠"
End Sub

老师,这个解释有问题,不同的EXCEL版本出现的结果不一样,在2007版中,Cells(257)不是第二行的第一个单元格,而是第一行的第257列(即第IW列),请老师予以验证。

还有下面的解释也好像有误:
Sheet1.Range("A1:A10").Offset(1, 1) = 2 'Offset是偏移的意思,在区域B1:B10输入2
结果应该是在区域B2:B11中输入2

[ 本帖最后由 江南民谣 于 2011-3-17 13:52 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-17 13:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-17 18:48 | 显示全部楼层

回复 117楼 江南民谣 的帖子

这位朋友说的很对,赞一个,那个错误改过来了,谢谢你了,呵呵,我们的2007版里一个工作表有16384列,.你试哈CELLS(16385)看是不是B2单元格

[ 本帖最后由 佛山小老鼠 于 2011-3-17 18:59 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-17 19:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-3-17 21:53 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-17 23:13 | 显示全部楼层
第六讲 VBA语句(二)

一.For    Next语句
  1. 1#          Sub 按钮1_单击()
  2. 2#            Dim I As Byte, C As Integer
  3. 3#            For I = 1 To 100
  4. 4#                C = C + I
  5. 5#            Next I
  6. 6#            MsgBox C
  7. 7#          End Sub
复制代码
代码解析:
:第2行定义变量I为字节型,C为整型;第3行代码到第5行用了一个循环语句For  Next ,给I赋值,赋值范围从1到100;第4行代码累加;第6行代码用输出函数MsgBox显示最后累加的C
二. For   Each   Next语句
  1. 1#          Sub 按钮1_单击()
  2. 2#             Dim RG As Range
  3. 3#                For Each RG In Range("A1:A10,D1:D10")
  4. 4#                   C = C + RG
  5. 5#                Next RG
  6. 6#             MsgBox C
  7. 7#             End Sub
复制代码
代码解析:
:第2行代码定义变量RG为对象型,单元格对象型;第3代码到第5行代码用了一个循环语然For Each  Next语句,以RG在单元格区域A1:A10,D1:D10中循环一次;第4行代码,把单元格RG的值累加;第6行代码用输出函数MsgBox显示最后累加的C

三.Select  Case 语句
  1. 1#          Sub aa()
  2. 2#              Dim I As Integer
  3. 3#              For I = 2 To 7
  4. 4#                  m = Sheet1.Range("a" & I)
  5. 5#                  Select Case m
  6. 6#                      Case Is >= 80
  7. 7#                          Sheet1.Range("b" & I) = "优秀"
  8. 8#                      Case Is >= 70
  9. 9#                           Sheet1.Range("b" & I) = "良好"
  10. 10#                       Case Is >= 60
  11. 11#                             Sheet1.Range("b" & I) = "及格"
  12. 12#                      Case Else
  13. 13#                             Sheet1.Range("b" & I) = "不及格"
  14. 14#                     End Select
  15. 15#                  Next I
  16. 16#              End Sub
复制代码
代码解析:
:第2行定义变量I为整型;从第3行到15行用了一个循环语句For  Next,给I赋值从2到7;第4行代码把工作表1从A2开始到A7的值赋给m;从第5行代码到14行代码用了Select Case  End Select语句

[ 本帖最后由 佛山小老鼠 于 2011-3-17 23:53 编辑 ]

FOR EACH NEXT.rar

6.21 KB, 下载次数: 167

FOR NEXT.rar

5.83 KB, 下载次数: 176

FOR NEXT语句1.rar

12.58 KB, 下载次数: 175

SELECT CASE语句.rar

7.19 KB, 下载次数: 171

数据出现的次数.rar

7.92 KB, 下载次数: 199

TA的精华主题

TA的得分主题

发表于 2011-3-18 09:06 | 显示全部楼层
数据出现的次数.rar 附件中,为何多定义一个变量I?定义它有何作用?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-18 13:34 | 显示全部楼层
Sub 查找()
  1. On Error Resume Next
  2.    Dim C As Integer, F As Range, I As Integer
  3.   Set F = Application.InputBox("请用鼠标点击要查找出现次数的数据", "查找值", , , , , , 8)
  4.       For Each RG In Range("A1:F18")
  5.          If RG = F Then
  6.             C = C + 1
  7.          End If
  8.       Next RG
  9.    MsgBox F.Value & "出现" & C & "次"
  10. End Sub
复制代码
回复123楼的朋友,上面是附件里的代码,你说的"多个变量"指的是那一个?

[ 本帖最后由 佛山小老鼠 于 2011-3-18 13:35 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 18:36 , Processed in 0.041975 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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