Archive for 6月 2008

《Excel VBA实战技巧精粹》终于登场了

经过近一年的苦熬,《Excel VBA实战技巧精粹》终于登场了,这是EH《精粹》系列的主要图书之一。
EHVBAjc04
这是我第一次正式参与编写关于计算机类的图书,也想尽力给大家带来最好的东西,希望大家能够多提提宝贵意见。此外,大家有什么问题,也可以在本站留言或者给我发邮件(xhdsxfjy@163.com),我会尽力回复。
内容简介:
  本书内容侧重于Excel VBA使用技巧,旨在帮助Excel VBA的初学者和有一定Excel VBA应用基础、希望进阶的读者。全书精选了279个技巧、近300个典型实例,并辅以深入浅出地剖析,力求让更多希望深入掌握Excel VBA技巧的读者取得更大的提高。本书分为八篇,第一篇主要介绍Excel VBA基础知识,第二篇介绍常用的Excel对象的应用技巧,第三篇介绍VBA内置函数、工作表函数、自定义函数和Excel加载宏的应用技巧,第四篇主要介绍Excel VBA开发过程中交互式设计的使用技巧,第五篇介绍如何使用VBA操作文件对话框、搜索文件、操作文件和文件夹等技巧,第六篇以一个名为“学生管理”的数据库为例介绍了ADO的应用,第七篇介绍如何使用Excel VBA访问Internet及进行相关操作、读写XML文档、操控其他的Office应用程序等高级编程技巧,第八篇介绍Excel VBA代码调试和错误处理的技巧,以及一些有效的代码优化技术。
详情请跟踪:http://club.excelhome.net/display.asp?tid=3&uid=13913&B=125&t=333501

标签: , , ,

再谈工作表代码名称

工作表代码名称是指代表工作表对象的名称,而不是我们常见的工作簿底部工作表标签名,如下图所示。
WSCodeName5VBAProject
当我们创建一个新工作簿时,一般情况下(当然是取决于您的Excel的设置)Excel会创建三个新工作表,其默认名称依次为Sheet1、Sheet2、Sheet3。工作表的代码名称与工作表标签名相同,也为Sheet1、Sheet2、Sheet3,如上图所示。
当然,我们可以修改这些名称,使之更具描述性。
使用CodeName属性可以获得工作表的代码名称,而使用Name属性则可获得工作表标签名称。
使用工作表代码名称有很多优点,例如不受用户更改工作表名称的影响、容易处理复制粘贴操作等。

标签: ,

自定义Excel菜单栏技术——表驱动命令栏

在Excel中采用表驱动(table-driven)的方式创建自定义命令栏是一种常用的技术。即在工作表中设置适当的数据,然后利用这些数据来创建菜单,这样既简单又方便。而且,不懂VBA编程的用户也能通过修改工作表中的数据来创建自已的命令栏。
这里介绍一个相对简单的例子,来自于《Mastering Excel 2003 Programming with VBA》。如下图所示的工作表中放置用来创建菜单的数据:
MenuBuilderpic1
现在,需要使用程序来运用MenuBuilder工作表来构建适当的菜单,除了ParentTag列(即A列)外,其他列为CommandBarControl对象的不同属性。ParentTag列用来指定是否创建一个新的菜单、菜单项或子菜单。代码如下:

Option Explicit

Const NA = "N/A"

'列偏移
Const TAG_OFFSET = 1
Const CAPTION_OFFSET = 2
Const TYPE_OFFSET = 3
Const ONACTION_OFFSET = 4
Const BEGINGROUP_OFFSET = 5
Const DESCRIPTION_OFFSET = 6

Sub BuildMenu()
  Dim ws As Worksheet
  Dim rg As Range
  On Error GoTo ErrHandler
  Set ws = ThisWorkbook.Worksheets("MenuBuilder")

'从第二行开始,因为第一行已经包含了列标题
  Set rg = ws.Cells(2, 1)
  Do Until IsEmpty(rg)
  If rg.Value = NA Then
  '新建顶级菜单项
  AddTopLevelItem rg
  Else
  '现有控件的子菜单
  AddSubItem rg
  End If
  '向下移一行
  Set rg = rg.Offset(1, 0)
  Loop

ExitPoint:
  Set rg = Nothing
  Set ws = Nothing
  Exit Sub
ErrHandler:
  Debug.Print Err.Description
  Resume ExitPoint
End Sub

'向工作表菜单栏中添加新菜单项
Private Function AddTopLevelItem(rg As Range) As CommandBarControl
  Dim cbWSMenuBar As CommandBar
  Dim cbc As CommandBarControl
  On Error GoTo ErrHandler
  Set cbWSMenuBar = Application.CommandBars("Worksheet Menu Bar")
  '添加菜单项
  Set cbc = cbWSMenuBar.Controls.Add(msoControlPopup, , , , True)
  cbc.Tag = rg.Offset(0, TAG_OFFSET).Value
  cbc.DescriptionText = rg.Offset(0, DESCRIPTION_OFFSET).Value
  cbc.Caption = rg.Offset(0, CAPTION_OFFSET).Value
  '返回新添加的菜单项
  Set AddTopLevelItem = cbc
ExitPoint:
  Set cbc = Nothing
  Set cbWSMenuBar = Nothing
  Exit Function
ErrHandler:
  Set AddTopLevelItem = Nothing
  Resume ExitPoint
End Function

Private Function AddSubItem(rg As Range) As CommandBarControl
  Dim cbcParent As CommandBarControl
  Dim cbc As CommandBarControl
  On Error GoTo ErrHandler
  '基于父标记定位父菜单
  Set cbcParent = Application.CommandBars.FindControl(, , rg.Value)
  If Not cbcParent Is Nothing Then
  '添加菜单项
  Set cbc = cbcParent.Controls.Add(GetType(rg))
  '确保该菜单项具有一个OnAction值而不是N/A
  If rg.Offset(0, ONACTION_OFFSET).Value <> NA Then
  cbc.OnAction = rg.Offset(0, ONACTION_OFFSET).Value
  End If
  cbc.Tag = rg.Offset(0, TAG_OFFSET).Value
  cbc.DescriptionText = rg.Offset(0, DESCRIPTION_OFFSET).Value
  cbc.Caption = rg.Offset(0, CAPTION_OFFSET).Value
  cbc.BeginGroup = rg.Offset(0, BEGINGROUP_OFFSET).Value
  '返回新添加的控件
  Set AddSubItem = cbc
  Else
  '不能找到父控件-返回无
  Set AddSubItem = Nothing
  End If
ExitPoint:
  Set cbc = Nothing
  Set cbcParent = Nothing
  Exit Function
ErrHandler:
  Debug.Print Err.Description
  Set AddSubItem = Nothing
  Resume ExitPoint
End Function

'将所选的msoControlType枚举转换为值
Private Function GetType(rg As Range) As Long
  Dim sType As String
  sType = rg.Offset(0, TYPE_OFFSET).Value
  Select Case sType
  Case Is = "msoControlPopup"
  GetType = msoControlPopup
  Case Is = "msoControlButton"
  GetType = msoControlButton
  Case Is = "msoControlDropDown"
  GetType = msoControlDropdown
  Case Else '包括N/A
  '默认为msoControlPopup
  GetType = msoControlPopup
  End Select
End Function

'删除标记为"MyMenu2"的控件
Sub DeleteMyMenu2()
  DeleteMenu "MyMenu2"
End Sub

'删除标记为"MyMenu3"的控件
Sub DeleteMyMenu3()
  DeleteMenu "MyMenu3"
End Sub

Private Sub DeleteMenu(sTag As String)
  Dim cbc As CommandBarControl
  Set cbc = Application.CommandBars.FindControl(Tag:=sTag)
  If Not cbc Is Nothing Then
  cbc.Delete
  End If
  Set cbc = Nothing
End Sub

上述代码的主程序是BuildMenu过程,该过程遍历工作表MenuBuilder中A列的单元格,检查其值是否等于N/A,如果等于则调用AddTopLevelItem过程在工作表菜单栏中创建一个新菜单项,如果不等于则调用AddSubItem过程,根据标记查找已存在的菜单项并在其中添加子菜单项。
此外,AddTopLevelItem过程忽略了Type列和OnAction列,并自动添加msoControlPopup类型的控件。AddSubItem过程将检查OnAction列的值,确保其中不会包含值N/A,若包含则不会设置OnAction属性。
最后的三个过程用来删除已创建好的菜单项。
创建的菜单如下图。
MenuBuilderpic2
前面说过,这是一个简单的菜单构建器示例,其中只包括了构建菜单所需的常见的一些属性。您可以添加列并修改相应的代码,使其功能更加强大,例如添加控件的Visible和Enabled属性列。

恢复Excel菜单和工具栏

Technorati 标签: ,

如果您的Excel应用程序的菜单和工具栏无意中搞乱了,例如调整了菜单项的位置、禁用了一些菜单项而又未恢复、删除了一些菜单项等,您想要恢复为默认的状态,这里有一个简便的方法,即删除*.xlb文件。这个文件在下面的目录中:

C:\Documents and Settings\<用户名>\Application Data\Microsoft\Excel

其中,<用户名>代表您计算机上的登录名。对于Excel 2003来说,该文件名为Excel11.xlb。

此时,您不必担心。当您重新开启Excel时,Excel会为您自动重新生成新的.xlb文件。这里的秘密是:Excel将工具栏和菜单栏的配置存储在xlb文件中,当您改变工具栏和菜单栏并退出Excel时,当前的配置将会被保存到xlb文件。如果xlb文件被破坏,那么在Excel启动时可能导致Excel崩溃。此时可以删除xlb文件或者重新命名xlb文件,Excel将创建新的xlb文件。

注:通常情况下,该文件夹是隐藏的,需要更改“文件夹选项”以显示所有的文件和文件夹。

标签: 没有标签

30个优秀Wordpress技巧

Technorati 标签:

Wordpress是强大的,尤其是你用插件将其武装起来。Hongkiat在博客上写了40个Wordpress里的技巧,相信大多数使用wordpress的Blogger都不会满足于默认模板、默认的设置。应用这些技巧,你能将WP改装得更漂亮,更个性化。

1、类别下拉菜单

分类太多,但又想展示全部展示出来,不妨考虑用下拉菜单的方式展示,和可能吧菜单栏上的“更多”有点类似。
2、显示作者Gravatar头像

有些博客是多作者的,如果你觉得单是一个名字不能明显地区分作者,不妨考虑将头像也加上。
3、自定义首页

用一个自定义的页面替换默认的/index.php首页。
4、显示文章作者信息

还是多作者博客可能需要使用的技巧,在每篇文章中都显示该篇文章作者的信息。
5、显示某一类别的最新评论
只显示某类别的评论,而不是全部。
6、高亮作者评论

在评论里,用特别的颜色将文章作者的评论高亮起来。
7、文章缩略图

为每篇文章创建一个缩略图,让你的文章看起来更有趣。
8、分类图片
用图片替代分类的文字。
9、阅读器图片格式优化

有时在阅读器里文字和图片会出现下面的情况:
如果出现了,你需要学学怎样去解决。
10、日期按钮:

制作一个小巧的日记按钮。
11、某篇文章隐藏广告
某些文章或许你不想显示广告,比如写关于腾讯的,会出现大量所谓的“6位QQ号”广告
12、文章置顶
给某篇、或某些文章设置置顶。
13、自定义404错误网页
或许你看了15个很有创意的404页面后很想自己做一个刚有创意的,试试吧!
14、将Wordpress打造成成员目录
如下图:

15、加速Wordpress的4个基本方法
觉得你的博客加载速度很慢而导致博客冷清?尝试用精简代码等方法加速WP吧。
16、创建博客手机版

为WP博客创建一个手机版本
17、新窗口打开链接
大多数默认情况下WP文章里的链接是在原窗口打开的,你可以尝试更改为在新窗口打开。
18、将WP打造成CMS

将WP打造成一个杂志型网站。
19、制作翻页效果

在博客右上角(或其它地方)制作翻页效果,然后放点即时小时也不错。
20、将评论与引用分开

这个很有必要,有些博客评论区域里评论和引用混乱在一起,看起来不是很友好。
21、Wordpress增强编辑器
默认的WP编辑器非常简陋,不妨考虑换一个,比如FCKeditor。
22、侧栏登录

将登录框搬到侧栏中去。
23、图片防盗链

文章被转载时很多情况下图片都会被复制粘贴去,如果你是将图片上传到自己的空间,而你的服务器又没有安装防盗链软件,你可能需要使用这个防盗链插件。
24、在第一篇文章放置广告
有调查表明,浏览者看第一篇文章时点广告的几率最大。你可以设置广告只出现在第一篇文章,后面的文章就不出现,如果你放置了太多广告影响浏览体验的话。
25、自定义登录界面

登录页面虽然只是自己看的,但你也可以将其弄得漂亮点,登录后或许能有个好心情,写篇好文章。
26、将优秀的文章秀出来
酒香也怕巷子深,好的文章不妨拿出来给别人看。
27、展示Twitter消息

在博客里展示Twitter消息。(不是简单的嵌入twitter提供的代码)
28、字数统计
你应该需要知道一篇文章有多长的。
29、某些内容只在Feed提供

你可以用这个插件,在Feed里提供一些特别的内容,以鼓励订阅。
30、某一分类不出现在Feed里(中文)
有时我们不希望所有的分类都输出到Feed里。

摘自cnBeta.

标签: 没有标签