ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

快来参加 Excel VBA 秘笈接龙

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-7-26 03:47 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据类型和基本语句
本帖最后由 ExcelHome 于 2012-10-6 16:40 编辑

平常看到精妙的代码用记事本保存成文本文件,保存的文件名简单描述该模块的功能,使用时点VBE窗

插入---文件 选择要引用的文本文件,比打开记事本复制代码更方便快捷。

 

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-26 11:34 | 显示全部楼层
QUOTE:
以下是引用Long_III在2006-7-25 17:08:53的发言:

在VBE书写代码时,当你输入appl的时候,自动会出一个下列框,这时你按Ctrl+空格,就会自动写全application这个单词了

不过要用快捷键Ctal+空格,得先把输入法的快捷键改为其他的,我就设置为Ctrl+Shift+空格。

这样的好处是在工作表里操作时,ctrl+空格,选中整列,Shift+空格,选中整行。

是不是需要设置哪个选项啊?我这里输入appl不会出现快速提示框啊

TA的精华主题

TA的得分主题

发表于 2006-7-26 14:27 | 显示全部楼层
下面是前阶段在学习VBA过程中归纳积累的几个比较实用的技巧和方法,供分享。
1、在VBA代码中使用注释,可以简要描述所编写的每个过程的目的、对过程所做的任何修改、描述变量的目的、以及语句的作用等。但有时在调试程序代码时,可以暂时将某条或某些语句设置成注释。选择VBE编辑器中的菜单“视图——工具栏——编辑”,调出“编辑”工具条。通过使用该工具条中的“设置注释块/解除注释块”,可以将VBA语句暂时设置成注释块,以便于调试。
2、通过宏录制器录制的代码,一般是先选择后处理,但大多数情况并不需要这样。在VBA中,要处理单元格区域,在代码中不必先选择该单元格区域,例如,在Excel中,我们如果要使第一行变成粗体就必须先选项中它,然后再处理。但在VBA中(除在图表操作时需要选中图表对象外),很少需要这样做,即VBA可以在不选中第一行的情况下,将它变成粗体。
宏录制器的代码:
QUOTE:
Rows("1:1").Select
Selection.Font.Bold = True
改编后的代码为:
QUOTE:
Row(“1:1”).Font.Bold=True

这样做还可以使程序代码更简洁,并且程序可以运行得更快。
3、如果必须将大量的数据传递到某个工作表,应尽量避免使用循环的方法,而是采用数组进行传递,这样速度会更快。
4、运用Not运算符切换属性值。例如,当我们在工作表中选择单元格或单元格区域后,单击工具栏中的“加粗”按钮加粗,再次单击则取消加粗。语句
QUOTE:
Selection.Font.Bold=Not Selection.Font.Bold
即可摸仿这一功能,其中Bold属性的值为True或False,使用Not运算符会将值False改为True,将值True改为False,这样可用于切换所选单元格是否“加粗”。这也是VBA程序编写时的一个技巧,我们可以运用Not运算符模仿工具栏“加粗”、“斜体”等按钮的工作模式来处理其它的操作,例如,下面的代码切换工作表中的行和列的边框:
QUOTE:
ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings

下面的代码切换是否显示工作表中的网格线:
QUOTE:
ActiveWIndow.DisplayGridlines=Not ActiveWIndow.DisplayGridlines

5、在缺省情况下,在VBA中对文本进行比较等操作是区分大小写的,若将语句Option Compare Text添加到模块的顶部,则程序执行时不会区分大小写。
6、在编写VBA代码时,为获得VBA函数列表,可在VBE中键入“VBA”,则会显示出它的所有成员列表,其中前面有绿色图标的就是函数。
7、在代码中可以使用Me代替用户窗体名称,这样若修改用户窗体的名称,也不必修改代码中的引用名称。
8、每个用户窗体和控件都有一个Tag属性,默认情况下为空,可以使用Tag属性来检验控件或窗体标识,或者可用来存储个人信息以便于识别,还可以有来提示必须要进行操作的控件,例如:在一个用户窗体上有一系列文本框控件,用户可能必须要输入文本到某些文本框但不一定是全部的文本框,可以使用Tag属性识别哪些文本框是必须要填写的。如可以将必须输入文本的文本框的Tag属性设置为如Required字符串,以此在代码中进行验证用户输入的有效性。在用户窗体失去焦点或关闭前调用下面的子过程,检查用户窗体UserForm1上的所有文本框控件并返回空的但必需要填写的文本框控件的编号。

QUOTE:
Sub CheckEmptyTextbox()
  Dim ctl As Control, i As Long
  For Each ctl In UserForm1.Controls
    If TypeName(ctl) = "TextBox" Then
      If ctl.Tag = "Required" Then
        If ctl.Text = "" Then
          i = i + 1
          MsgBox "第" & i & "个文本框为空,请您在该文本框填入数据."
        End If
      End If
    End If
  Next ctl
End Sub

下面所附示例会提示您在应该输入内容的文本框中输入内容,您可以对程序进行适当修改,例如,用户在必须要输入内容的文本框中要有输入,否则程序会中止。 lxbXb71I.rar (9.62 KB, 下载次数: 58)

9、在工作表中编辑控件。例如,对按钮控件操作,在拖动控件的同时按Alt键,按钮将与工作表的网格线对齐;在拖动的同时按Shift键,按钮将成正方形。


[此贴子已经被作者于2006-7-27 9:17:42编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-26 18:15 | 显示全部楼层

在录制:设置页眉、页脚的日期时,得到的代码通常都很奇怪,比如页脚的左边设置日期:

    With ActiveSheet.PageSetup
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = "&D"
    End With

只要修改一下:

    With ActiveSheet.PageSetup
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = VBA.Date
    End With

这样就便于理解了。

TA的精华主题

TA的得分主题

发表于 2006-7-27 13:10 | 显示全部楼层

本想详细的写一个贴子来讨论“VBE使用和代码的调试”,总是没能完成,在这里凑凑热闹吧。

在“代码窗口”左边框代码对应处单击,可切换断点,即代码运行至此切换到中断模式,也就是所说的“下断”(与[调试|切换断点]同效)。


当处于中断模式时,可在监视窗口中查看各变量的当前值,以及分析了解代码运行时所到的分支,据此更正逻辑关系,这样对于长代码和事件的调试帮助还是很大的。

快来参加 Excel VBA 秘笈接龙

快来参加 Excel VBA 秘笈接龙

TA的精华主题

TA的得分主题

发表于 2006-7-27 13:36 | 显示全部楼层

在单元格中快速输入带秒的时间

一般,在Excel中快速输入日期和时间时,可使用快捷键,即按Ctrl+:组合键将快速在单元格中输入当前日期,按Ctrl+Shift+:组合键将快速在单元格中输入当前时间,但所显示的时间为小时:分钟格式,不会显示秒。如果您想显示小时:分钟:秒这样的格式的话,可以使用Onkey方法修改快捷键的缺省设置,如下所示,运行设置快捷键代码即可。

Sub 设置快捷键()

    Application.OnKey "+^:", "输入时间"

End Sub

Sub 恢复快捷键()

    Application.OnKey "+^:"

End Sub

 

Sub 输入时间()

    With ActiveCell

    .Value = Time()

       .NumberFormat = "hh:mm:ss"

    End With

End Sub

如果您想恢复快捷键的缺省设置,运行恢复快捷键过程。

 

QjtGFwe6.rar (6.86 KB, 下载次数: 69)

TA的精华主题

TA的得分主题

发表于 2006-7-27 15:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

在Excel中自定义函数
  Excel函数虽然丰富,但并不能满足我们的所有需要。我们可以自定义一个函数,来完成一些特定的
运算。下面,我们就来自定义一个计算梯形面积的函数:
  1.执行“工具→宏→Visual Basic编辑器”菜单命令(或按“Alt+F11”快捷键),打开Visual Basic
编辑窗口。
   2.在窗口中,执行“插入→模块”菜单命令,插入一个新的模块——模块1。
  3.在右边的“代码窗口”中输入以下代码:
    Function V(a,b,h)
    V = h*(a+b)/2 

    End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-28 09:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

VBE快速信息中显示对象隐藏成员

有些代码中的对象比如Application.MenuBars ,您可能不知道别人是如何知道存在MenuBars对象的.其实它是Application对象的隐藏成员.那么如何知道哪个对象存在着隐藏成员和哪些隐藏成员呢?

在VBE中按F2键可显示对象浏览器,在对象浏览器中任意地方右击,选中显示隐藏成员菜单项,可以看到对象浏览器中出现一些灰色显示的成员,这些就是对象的隐藏成员了.

选择了显示隐藏成员后,在VBE代码窗口中的快速信息也将显示这些成员了.

其中有些成员提供了一些特殊的功能,比如VBA库中的VarPtr函数,取得变量的指针,类似的还有StrPtr,ObjPtr,这些可能很少用到.

还有一些比如WorkBook对象的,Comments,Title,Subject等可直接获得WorkBook属性对话框中的各个属性.

其他的具体的成员和应用方法有待大家继续发掘,遗憾的是这些隐藏成员找不到具体的帮助信息.

TA的精华主题

TA的得分主题

发表于 2006-7-28 09:59 | 显示全部楼层

设置数据源可使ADO连接字符串简化,如在控制面板-ODBC数据源中设置一个ACCESS数据库的数据源为TEMP,在ADO连接字符串时可简化为"dsn=temp",对其他数据库也适用

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-29 10:41 | 显示全部楼层

使用动态数组代替常量数组作为参数的方法


当您用录制宏的方式同时选中几个符合条件的工作表时,您会发现录制的宏是使用了常量数组Array(sheetname1,sheetname2....sheetnamen)的方式来确定您所选中的工作表名称的, 这里要求的工作表名称是常量,如果您需要的工作表名称是固定话,使用这种方式就可达到目的;但是如果您希望在程序中根据您所指定的条件来选择的话,使用这种方式就无法达到了。.好在我们还可以使用变量数组来代替完成这个功能。

这里介绍一种使用动态数组的方法同时选择符合指定条件的工作表

Sub SelectSpecialSheets()

Dim Wks As Worksheet, shtCnt As Integer
Dim arr() As Variant, i As Integer
shtCnt = ThisWorkbook.Sheets.Count'取得工作表总数
ReDim arr(1 To shtCnt)'预定义数组

For Each Wks In ThisWorkbook.Sheets'在所有工作表中循环
    If Wks.Name Like "*Sheet*" Then'工作表名称中包含Sheet字样
        i = i + 1
        arr(i) = Wks.Name'将工作表名称存进数组
    End If
Next

If i > 0 Then'如果存在符合条件的工作表名称
    ReDim Preserve arr(1 To i)'重定义数组
    ThisWorkbook.Sheets(arr).Select'选中符合条件的所有工作表
End If

End Sub

此方法作用当然不局限于此 , 对于其他类似使用Array作为参数的问题也都是适应的, 比如需要同时选中工作表所有符合条件的Shape时, 希望能够举一反三。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 11:54 , Processed in 0.052386 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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