Archive for 04月 2008

在Excel 2007的功能区中添加中文选项卡和控件

下面是Qu朋友在本站中的留言:
谢谢你这么专业地工作。能否做一个EXCEL2007下的中文菜单样板?我按您和网上其它人介绍的方法(无论是ZIP方式、还是用UI编辑器),总是无法正常。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
我想,他的意思是在Excel 2007的功能区中添加中文选项卡或者控件,例如自定义的组、按钮等,不过,选项卡或这些控件的标签都应该是中文的。下面我来演示具体的步骤。
在开始之前,先声明Office 2007 CustomUI Editor并不支持中文,因此不能使用这个方便的工具来定制Ribbon,只能使用修改Office 2007文件格式的方法来解决了。
步骤1 在桌面上创建一个名为customUI的文件夹。
步骤2 打开记事本,并在其中输入下面的XML代码:
<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui“>
  <ribbon>
    <tabs>
      <tab id=”rxtabCustom”
           label=”我自已的选项卡”
           insertBeforeMso=”TabHome”>
          <group idMso=”GroupFont”/>
          <group idMso=”GroupZoom”/>
          <group id=”myGroup” label=”我的组”>
              <button id=”b1″
                      imageMso=”HyperlinkInsert”
                      size=”large”
                      label=”启动网站”
                      onAction=”surf”/>
              <button id=”b2″
                      imageMso=”HappyFace”
                      label=”微笑图标”
                      onAction=”smile”/>
              <button id=”b3″
                      imageMso=”FormatPainter”
                      label=”格式刷图标”
                      onAction=”paint”/>
              <button id=”b4″
                      imageMso=”AutoFilterClassic”
                      label=”筛选图标”
                      onAction=”filter”/>
           </group>
     </tab>
   </tabs>
  </ribbon>
</customUI>
该XML文件在Excel的“开始”选项卡前创建了一个名为“我自已的选项卡”的选项卡,并添加了三个组,前两个为Excel内置的组“字体”和“显示比例”,第三个为名为“我的组”的自定义组,其中包括四个自定义的按钮“启动网站”、“微笑图标”、“格式刷图标”和“筛选图标”,并分别定义了onAction属性。
步骤3 将该文件命名为customUI并以.xml为扩展名保存在customUI文件夹中,并关闭该文件。在保存时注意选择“编码”下拉框中的编码为UTF-8,如下图所示。
SaveAsUTF8Format
步骤4 在桌面上新建一个启用宏的Excel文件,并命名为MyCustomUI.xlsm。因为在自定义的XML中,包含了产生回调的onAction属性,所以创建的Excel文件需要启用宏。
步骤5 在MyCustomUI.xlsm中,按Alt+F11组合键打开VBE,并插入一个标准模块,添加下面的代码供回调使用:
Option Explicit‘Callback for b1 onAction
Sub surf(control As IRibbonControl)
    ActiveWorkbook.FollowHyperlink _
      Address:=”http://www.excelperfect.com”, _
      NewWindow:=True
End Sub
‘Callback for b2 onAction
Sub smile(control As IRibbonControl)
    MsgBox “您单击了微笑图标!呵呵…”
End Sub
‘Callback for b3 onAction
Sub paint(control As IRibbonControl)
    MsgBox “您单击了格式刷图标!”
End Sub
‘Callback for b4 onAction
Sub filter(control As IRibbonControl)
    MsgBox “您单击了筛选图标!”
End Sub

步骤6 关闭工作簿MyCustomUI.xlsm。
步骤7 在MyCustomUI.xlsm图标上单击右键,选择“重命名”,在文件名后添加“.zip”扩展名,使其变为一个压缩文件。如下图所示。
changeextendnameforzip
步骤8 双击该压缩文件,打开压缩包,将customUI文件夹拖到该压缩包中,如下图所示。
customuitozip
步骤9 将压缩包中的_rels文件夹拖至桌面。
步骤10 打开桌面中的_rels文件夹,然后用记事本打开其中的.rels文件,如下图所示。
relsfile
步骤11 在.rels文件的最后</Relationships>一个之前,添加下面的XML:
<Relationship Id=”customUIRelID” Type=”http://schemas.microsoft.com/office/2006/relationships/ui/extensibility” Target=”customUI/customUI.xml”/>
步骤12 保存该.rels文件并关闭。
步骤13 将修改后的_rels文件夹拖回MyCustomUI压缩包中。如果出现提示,则选择是,覆盖原文件。关闭压缩包。
步骤14 将MyCustomUI.xlsm.zip的.zip扩展名删除。
步骤15 双击MyCustomUI.xlsm文件,打开工作簿,此时在Excel内置选项卡“开始”的前面添加了一个自定义选项卡,在该选项卡中添加了两个内置组和一个自定义组,如下图所示。
MyCustomUIResult1
看看吧,都是中文的,成功!
示例文件下载:http://www.drexcel.cn/article.asp?id=40

标签: 没有标签

使用VBA判断指定单元格区域中是否有重复值

写了一个VBA函数,用来判断指定单元格区域中是否有重复值。或许有用,因此辑录在此。
Function bIfUnique(rng As Range) As Boolean
    Dim oDic As Object, rngCell As Range
    Set oDic = CreateObject(”Scripting.Dictionary”)
    For Each rngCell In rng
        On Error Resume Next
        oDic.Add rngCell.Text, rngCell.Text
    Next rngCell
    If oDic.Count <> rng.Cells.Count Then
        bIfUnique = True
    Else
        bIfUnique = False
    End If
End Function

该函数使用了Dictionary对象,其中参数rng代表要判断的单元格区域。可以使用下面的代码来测试该函数:
Sub test()
    If bIfUnique(Range(”B2:C4″)) Then
        MsgBox “有重复值”
    Else
        MsgBox “没有重复值”
    End If
End Sub

标签: 没有标签

使用VBA获取计算机系统用户的名称

VBA提供了一个Environ函数,使用该函数可以获取计算机系统用户的名称。语句很简单:
Environ(”computername”)
在我的计算机上调试时,将返回字符串“FANJY”,正是我安装Windows系统时的用户名称。
在此特将该函数辑录于此,以备日后调用。

标签: ,

在Excel 2007中共享功能区定制

前不久,Baiyssy朋友在本站留言,大致意思是希望在其他计算机上也能使用本机上已定制好的快速访问工具栏。下面简单地提供几种方法。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
这里介绍三种方法。这些方法各有优缺点,应该根据实际情况选择使用。
方法一:分发已经完成功能区定制的Excel工作簿
即,先在自已的计算机上完成功能区定制,然后将该工作簿分发给其他需要的人使用。
方法二:使用Excel模板
即,将完成功能区定制的工作簿保存为模板,这样,以后需要或者他人需要使用使用同样的功能区定制时,以此模板打开工作簿。
当该模板在用户计算机的Templates文件夹中安装后,只需简单地选择“Office按钮”─—“新建”─—“我的模板”,然后在对话框中双击合适的模板文件。此时以此模板创建一个新的文件而不会覆盖原模板文件。
创建Excel模板文件是简单的,只需选择“Office按钮”─—“另存为”,然后从“保存类型”下拉列表中选择保存的模板类型(包括xltx和xltm),并输入合适的文件名,单击“保存”按钮即可。
在Windows XP中,当前模板文件夹(Templates)的缺省路径为:
C:\Documents And Settings\<用户名>\Application Data\Microsoft\Templates
注意,不要选择“打开”命令来打开模板文件。如果这样做的话,那么所作的更改会保存在模板文件中。
方法三:使用Excel加载项
使用这种方法虽然有点复杂但将更为灵活,并且加载项将代码与数据分离,同时加载项使定制可见且所有文件都能访问。
1、准备好要转换为加载项的工作簿
如果该工作簿不含VBA代码,那么将很简单。如果该工作簿有VBA代码,则需要进行下面的一些操作。
(1)实例化代码引用的工作簿(ThisWorkbook)。如果工作簿的标准模块中,代码含有ThisWorkbook,则需要使用ActiveWorkbook替换。
(2)实例化没有使用Public或Private声明的子过程和函数。若没有这些前缀,则加上。
2、将准备好的工作簿转换为加载项
很简单,选择“Office按钮”─—“另存为”─—“其他格式”,在保存类型中选择“Excel加载宏”并命名,然后单击“保存”按钮。
此时,原来的文件仍然存在,因为加载项只是该文件的副本。
3、安装加载项
要使用加载项,建议将其直接放置在计算机中缺省的Addins文件夹中。在Windows XP中,该文件夹的位置通常位于:
C:\Documents And Settings\<用户名>\Application Data\Microsoft\Addins
注意,不一定非得将加载项放置在该文件夹中,具体情况视您的要求和方便程度而定。
要安装加载项,单击“Office按钮”─—“Excel选项”,在“Excel选项”对话框中,选择“加载项”─—“转到”,打开“加载宏”对话框。如果您的加载项放置在Addins文件夹中,那么在该对话框的列表中将看到该加载项,此时只需选中其前面的复选框。否则,需要单击“浏览”按钮,找到该加载项,然后在对话框中选中其前面的复选框。最终如下图所示。
AddinDialogha
返回到Excel界面后,就可以看到已经创建了该加载项定制的UI。并且,当打开另一个Excel文件时,新的UI也在其中,酷吧!
这说明创建加载项能够使得在文件之间共享定制。
4、卸载和移除加载项
加载项会占用内存,因此影响程序的运行速度。当不再需要加载项时,可以将其卸载。
如上图的对话框,取消该加载项前复选框中的选择,只是简单地使加载项效果不会在Excel界面中出现,但不是真正卸载该加载项,即该加载项仍然装载。要完全卸载该加载项,需要找到该加载项在计算机中的位置,然后删除该文件或将该文件移动到其他位置,然后在Excel中调出上图所示的对话框,单击该加载项前的复选框,此时,会弹出一个警告对话框,如下图所示,单击“是”按钮并关闭Excel。
DeleteAddinDialogha
此时,将卸载该加载项。
5、其他
通过将加载项的IsAddin属性设置为False将使加载项工作簿显示在Excel界面中,此时可以修改该加载项工作簿。

快速找到并输入连接数据源的字符串

最近,又复习了《Excel 2003 VBA Programmer’s Reference》关于数据库编程的章节,上面介绍了一种快速找到连接数据源的字符串的方法,介绍如下,供参考。
通常,在Excel VBA中要与外部数据库连接前,必须先建立与该数据源的连接,即要设置连接字符串,如下面的代码:
Dim strConnectString As String
strConnectString=” Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\FW\桌面\Northwind.mdb;Persist Security Info=False”
如果直接输入,将很麻烦且易出错。我们可以使用下面的方法:
步骤1 在桌面建立一个文本文件,并将其扩展名改为“udl”,如下图。
udlfile1
步骤2 双击该文件,出现“数据链接属性”对话框,如下图。
Datalinkpropertydia
在“提供程序”选项卡的列表中选择希望连接的数据源,本例为“Microsoft Jet 4.0 OLE DB Provider”。
步骤3 然后,单击“下一步”按钮,如图所示,转到“连接”选项卡(不同的数据源此选项卡中的内容会有所不同)。
Datalinkpropertydia1
步骤4 单击“选择或输入数据库名称”文本框右侧的选择按钮,选择相应的数据库文件。单击“确定”按钮。
步骤5 在记事本中打开该文件,如下图。
resulttxt2
其中,以Provider开头的两行即为连接字符串。我们可以将其直接复制到程序代码中。

标签: , , ,