ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA入门指南——献给在这里得到帮助但看不懂代码的朋友(已建电梯)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-30 17:29 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
原帖由 yagi2008 于 2009-1-29 22:46 发表
  今天一天都在带儿子,因为昨天老婆的腰闪了。哎,好在明天可以回自己家了,真是“归心似箭”啊~
  今天是关键字的最后一讲,按照惯例,还是先将该类关键字列举如下:
  【程序结构类】
  IF...ELSE...E ...



看您的讲解,就明白您是编程的专家了!
看到您过年也没有休息,在认真地进行一步一步的讲解,真的很感动!同时我也把我的快乐与您分享!
趁过年回老家无法上网时,我已经开始起步学“VBA”了。而且我感觉:学VBA已经有一丁点儿“入门”的感觉了!我感觉很高兴很快乐!由于以前自学过一些VISUAL BASIC,甚至一些“C语言”的知识(不过,全是皮毛!),所以我相信,只要我坚持下来,我一定能象前阶段学习函数一样,成功地解决、攻克VBA的。我有信心,尤其在论坛上能见到象您一样的专家级别的高手,我更有信心了。
再次感谢您的“专业级别”的知识及讲解!
愿您的讲解与我在VBA方面的成长同步吧!

[ 本帖最后由 fdd 于 2009-1-30 17:32 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-1-30 21:20 | 显示全部楼层
感谢楼主,祝牛年快乐,万事顺意!辛苦了~~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-30 23:31 | 显示全部楼层

【2009.1.30】代码起步——我的程序

  今夜鞭炮依旧,浓睡不消残酒。坐在自己的床上,那感觉真是舒服啊~~
  从今天开始,我们将开始讨论一个新的话题,前一个话题让我们认识了许多VBA代码,而这个话题我们将用这些代码写出我们自己的程序来。在开始写代码前,我想先用今天的时间给大家介绍下如何培养良好的代码书写习惯以及VBA编辑环境提供的代码书写辅助功能。
  先讲第一个问题,我们都听说过这么一句话,“外行看热闹,内行看门道”,说的是内行只要一看便知某一个事物或某一个人是不是专业的水平。请看下面两段代码,请你先看看哪段是由专业程序员写出来的?
(1)
Public a(10) as Integer
......
Sub abs()
For i = 1 to 10
If a(i)<0 then
a(i)= - a(i)
End If
Next
End Sub

(2)
Public a(10) as Integer
......
Sub abs()
'求绝对值
Dim i as Integer
  For i = 1 to 10
    If a(i)<0 then
      a(i)= - a(i)
    End If
  Next
End Sub
  看出来了吗?为什么是第二段呢?其实这里至少有3个地方可以体现一种专业程序员良好的编程习惯和素养。第一,代码采用缩进格式书写。为什么要这样写呢?因为这样不但可以清楚的表达各种程序结构之间的关系和层次,而且能清晰地体现出语句之间的配对关系,并为他人阅读和今后维护提供方便。第二,变量先声明后使用,这样可以保证内存正确分配和使用变量所占空间,保证系统的正常稳定运行。第三,给代码加上必要的附注或注释,以方便他人阅读和今后维护。以上三点希望大家在开始写代码之初就养成这样的习惯,将对今后的代码之路有所裨益。
  第二个问题比较简单,请看下图就应该明白了。
   1.jpg  (编辑工具栏)
   2.jpg   (调试工具栏)
  这样的两个工具栏,均可以通过VBA代码编辑窗口的视图菜单的工具栏菜单项下列出的“编辑”和“调试”两项来打开。编辑工具栏,左起按钮依次为:属性方法列表、常数列表、快速信息、参数信息和自动完成关键字;缩进、突出;设置断点、设置注释块、解除注释块;切换书签,下一个书签、上一个书签和清除所有书签。这里要着重提出的是缩进和突出功能,可以通过这两个按钮对选中的代码(可以一行或多行)进行缩进和突出功能,对修改代码结构和层次很有帮助。还有,设置注释块和解除注释块分别可以对选中的代码进行转化为注释和解除注释的作用,这为调试程序中需要暂时屏蔽但不想删除的代码提供了很好的方法。调试工具栏,左起按钮依次为:运行、中断、重新设置;切换断点、逐语句、逐过程、跳出、本地窗口、立即窗口、监视窗口、快速监视和调用堆栈。这里主要用到的是调出本地窗口和立即窗口,并通过运行宏、暂停和中断来实现调试和测试程序的目的。大家不妨试试。

[ 本帖最后由 yagi2008 于 2009-3-5 23:30 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-1-31 01:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好贴,看完,收藏,再睡觉

TA的精华主题

TA的得分主题

发表于 2009-1-31 10:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-1-31 17:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习中,谢谢!!!期待

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-31 22:17 | 显示全部楼层

【2009.1.31】代码起步——我的程序(续)

  今天是新年长假的最后一天,趁着冬日暖阳自然带着家人出门走走,毕竟明天就要开始新一年的工作了。
  接着昨天的话题,我们来看一个小程序。一方面熟悉下如何写代码,一方面也可以提高点学习兴趣。
  程序如下: 例1.rar (5.98 KB, 下载次数: 4532)
  其中的代码如下:
  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If (Target.Column <> 1) Then
       Cells(Target.Row, 1).Select
   End If
  End Sub
  程序的目的是这样的,在这样的表格中,往往由于列数众多,在选择某一个学生的成绩的时候,会发生错行的情况,而这个程序可以使您在选择某一个成绩时,自动选中该成绩所在行的第一列的单元格。这里用到了我们之前所讲解的很多知识。大家还记得我们之前讲过的吗?请大家回忆一下。
  首先,我们讲到了VBA的代码在哪里?请大家打开EXCEL文件后,按【ALT】+【F11】键,就能打开代码编辑窗口;
  其次,我们看到代码窗口上方有两个下拉列表框,左边的是“Worksheet”,右边的是“SelectionChange”,这表示当前的代码写在Worksheet工作簿的Sheet1工作表的SelectionChange事件中;这个事件的触发条件是当前选中的单元格发生变化,也就是说如果之前你选中了A1单元格,那么现在如果你又左键单击选择了B1单元格,这个事件就会被触发,里面的代码就会被执行。这个事件还带了一个参数,名字叫“Target”,这个参数的类型是Range,即单元格区域类型,所以这个参数表示的是对当前最新被选中的单元格的引用。
  那么我们是怎么实现上述程序的目的的呢?让我们继续看一看程序的代码,其中是一个分支判断选择结构的IF语句,判断的条件是:当前被选中的单元格所对应的列序号如果不是1(也就是说当前被选中的不是A列的单元格),如果条件成立那么就执行其中的代码,“Cells”是对工作表所有单元格集合的引用,有两个参数,第一个是表示行序号,第二个表示列序号,如果给定了这两个参数,那么也就是指定了在SHEET1工作表的所有单元格集合中符合当前给定行序号和列序号的唯一单元格的引用;看下这里指定的两个参数是什么呢?行序号被指定为当前被选中单元格所在行的行序号,列序号被指定为1,即A列单元格,那么现在就通过“Select”方法使由行序号和列序号两个参数指定的单元格集合中的这个单元格成为当前被选中的单元格。这样就实现了我们之前定义的这个程序的目的。大家明白了吗?
  现在大家可以尝试一下选中非A列单元格的操作,看看是否自动变为选中了同行的行首第一个单元格。
  细心的朋友可能还记得,我们之前还讲过调试程序,那么我们现在通过单步执行的方式来跟踪一下程序的执行,以便于我们加深理解。方法是:先将光标移到代码编辑窗口左侧灰色纵条区域,使鼠标变成从右下向左上的空心箭头现状,如图:
1.jpg
单击左键,使该行背景色变为暗红色,表示定义了一个断点。如图:
2.jpg
断点的意思是当程序执行到这里就停下来,以便于我们单步跟踪执行并查看各个参数的值。接下来我们就可以通过不断按【F8】来单步执行该程序,并查看各个参数的值的变化情况了。可能通过这样的跟踪执行,大家发现,在程序按照我们上述思路执行到“Cells(Target.Row, 1).Select”语句执行完毕后,突然又从头开始执行了,这个其实是正常的,因为如果你选中的不是行首的单元格,则判断条件成立,判断分支选择结构中的语句就会被执行,而恰恰这条语句的作用是将当前选中的单元格由非行首单元格转变到同行行首的单元格了,那么这时也将再次触发这个事件,即事件发生了递归调用。那么这时由于此时选中的单元格已经是行首单元格了,所以判断条件不成立,该事件过程立即结束,从而递归收敛,程序也就执行完毕了。
  请大家对照上述讲解,反复执行和跟踪程序代码的执行过程,细心体会,也许通过这个简单的例子并不能让你完全明白VBA的代码如何写,但应该能让你被VBA所吸引,从而期待接下来更为精彩的深入讲解内容吧~

TA的精华主题

TA的得分主题

发表于 2009-1-31 23:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主,我对学习vba越来越有兴趣了哈,写得真好!\^0^/

TA的精华主题

TA的得分主题

发表于 2009-2-1 14:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
期待继续

TA的精华主题

TA的得分主题

发表于 2009-2-1 15:05 | 显示全部楼层
楼主春节期间仍如此热心,向楼主致到崇高敬意!!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-17 02:54 , Processed in 0.042709 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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