<?xml version="1.0" encoding="GB2312"?>
<rss version="2.0">
<channel>
<title>Excel Blog</title>
<link>http://blog.excelhome.net/</link>
<description>1</description>
<generator>4.60 Final</generator>
<webMaster>master@excelhome.net</webMaster>
<item>
<title><![CDATA[跟我学Excel 2010/2007简易教程1500篇下载]]></title>
<link>http://blog.excelhome.net/user1/apolloh/1194.html</link>
<author>apolloh</author>
<pubDate>2010-2-3 18:48:00</pubDate>
<description><![CDATA[<P><SPAN style="COLOR: #ff0000">Excel 2010/2007取代2003只是时间问题！</SPAN>Excel 2003所能办到的事，2010/2007也能办到，而且能办得更好。现在就开始接触Excel 2010/2007，也算是顺应时代的潮流吧。</P>
<P>才发现新版的博客程序新发的文章，游客无法下载附件。修改一下，请到如下地址下载附件，谢谢！</P>
<P>请点击这里下载：<A href="http://www.exceltip.cn/thread-410-1-1-1.html"><COLOR="http://blog.excelhome.net/RED">下载地址</A></P>]]></description>
</item><item>
<title><![CDATA[在VBA中调用调色板的几种方法（下篇）]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1193.html</link>
<author>chrisfang</author>
<pubDate>2010-2-2 12:50:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>（续前）</FONT></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>方法三：调用<SPAN lang=EN-US>WindowsAPI</SPAN>，调用<SPAN lang=EN-US>Windows</SPAN>的调色板。</FONT></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"></SPAN><SPAN style="COLOR: #ff0000">Private</SPAN> <SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Type</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CHOOSECOLOR<BR>&nbsp;&nbsp;&nbsp;&nbsp;lStructSize <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;hwndOwner <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;hInstance <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;rgbResult <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;lpCustColors <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;flags <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;lCustData <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;lpfnHook <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;lpTemplateName <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">End</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Type</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Private</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Type</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>RGBColor<BR>&nbsp;&nbsp;&nbsp;&nbsp;R <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Byte</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;G <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Byte</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;B <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Byte</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;space <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Byte</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'用作间隔</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">End</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Type</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Private</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>Declare <SPAN style="COLOR: #ff0000">Function</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>ChooseColorA Lib "Comdlg32" (pChoosecolor <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CHOOSECOLOR) <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Long</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Dim</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CustColors(1 <SPAN style="COLOR: #ff0000">To</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>16) <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>RGBColor<BR></FONT><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Private</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CommandButton3_Click()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">Dim</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CColor <SPAN style="COLOR: #ff0000">As</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CHOOSECOLOR<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">With</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CColor<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.lStructSize = Len(CColor)&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'结构长度</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.lpCustColors = VarPtr(CustColors(1))&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'存储自定义颜色的缓冲区地址，CustColors为公共变量，用于保存自定义颜色，以便于用户下一次打开调色板时仍能够使用前一次的自定义颜色</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">With</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">If</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>ChooseColorA(CColor) = 0 <SPAN style="COLOR: #ff0000">Then</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Exit</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'等于0表示按下了取消键</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;Me.Label1.ForeColor = CColor.rgbResult<BR><SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>此方法为<SPAN lang=EN-US>API</SPAN>调用，调用的是<SPAN lang=EN-US>Windows</SPAN>系统的调色板，稍显繁琐。<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>其中<SPAN lang=EN-US>CColor.lpCustColors</SPAN>指向<SPAN lang=EN-US>16</SPAN>种自定义颜色的地址，如果要在程序运行过程中保存用户的自定义颜色，使得任何时候打开调色板都可以继续使用之前所定义的颜色，可以通过定义<SPAN lang=EN-US>CustColors(1 to 16) As Byte</SPAN>为公共变量，然后使用<SPAN lang=EN-US>VarPtr</SPAN>函数转换后将<SPAN lang=EN-US>VarPtr(CustColors(1))</SPAN>赋值给<SPAN lang=EN-US>CColor.lpCustColors</SPAN>。上面的代码中定义了类型<SPAN lang=EN-US>RGBColor</SPAN>，主要用于方便程序处理中取得自定义颜色的<SPAN lang=EN-US>RGB</SPAN>值，实际使用中并非必需。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>如果不需要保存自定义颜色，<SPAN lang=EN-US>lpCustColors</SPAN>的赋值比较随意。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><o:p><FONT color=#000000>&nbsp;</FONT></o:p></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>方法四：使用<SPAN lang=EN-US>CommonDialog</SPAN>控件，调用<SPAN lang=EN-US>Windows</SPAN>调色板，需要系统控件支持。（<SPAN lang=EN-US>Windows7</SPAN>中好像没有这个控件）</FONT></SPAN><BR></FONT><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Private</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CommandButton4_Click()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">On</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Error</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">GoTo</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>zz<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.CommonDialog1.CancelError = <SPAN style="COLOR: #ff0000">True</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;Me.CommonDialog1.ShowColor<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.Label1.ForeColor = CommonDialog1.Color<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">Exit</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>zz:<BR><SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>此方法也是调用<SPAN lang=EN-US>Windows</SPAN>中的调色板，其缺点就是需要附带控件，<SPAN lang=EN-US>Xp</SPAN>中一般都包含了<SPAN lang=EN-US>CommonDialog</SPAN>控件。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P><SPAN style="COLOR: #0000ff"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>附件如下：<A href="http://blog.excelhome.net/attachment.asp?FileID=1812">调色板.rar</A></FONT></SPAN></SPAN></P>
<P><SPAN style="COLOR: #0000ff"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>综合以上几种方法来看，个人比较推荐方法二，简单易行，而且使用的是<SPAN lang=EN-US>Excel</SPAN>中的调色板，还可以自定义颜色。如果对<SPAN lang=EN-US>API</SPAN>比较熟悉，也可以使用方法三。除此以外，也可以自己制作一个调色板窗体供用户选择颜色。例如下面这个<SPAN lang=EN-US>John-Walkenbach</SPAN>的作品：</FONT><SPAN lang=EN-US><BR><A href="http://spreadsheetpage.com/index.php/site/tip/creating_a_color_picker_dialog_box/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">http://spreadsheetpage.com/index.php/site/tip/creating_a_color_picker_dialog_box/</SPAN></A></SPAN></SPAN></SPAN></P>
<P><SPAN style="COLOR: #0000ff"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN-US><A href="http://www.exceltip.net/thread-5644-1-1-38.html"><STRONG>在论坛中查看此帖</STRONG></A></SPAN></SPAN></SPAN></P>
<P><SPAN style="COLOR: #0000ff"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN-US></SPAN></SPAN></SPAN>&nbsp;</P></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>]]></description>
</item><item>
<title><![CDATA[在VBA中调用调色板的几种方法（上篇）]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1192.html</link>
<author>chrisfang</author>
<pubDate>2010-2-2 12:39:00</pubDate>
<description><![CDATA[<SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>在有些程序中，需要向用户提供选择颜色的功能，调用<SPAN lang=EN-US>Excel</SPAN>或<SPAN lang=EN-US>Windows</SPAN>的调色板是一种比较理想的交互方式，关于在<SPAN lang=EN-US>VBA</SPAN>中如何调用调色板，本人总结了以下几种方法：<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><o:p><FONT color=#000000>&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>（以下程序以用户窗体中调用调色板修改<SPAN lang=EN-US>Label1</SPAN>的标签字体颜色<SPAN lang=EN-US>ForeColor</SPAN>为例）<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><o:p><FONT color=#000000>&nbsp;</FONT></o:p></SPAN></P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>方法一：调用单元格格式中的“字体”选项卡对话框。</FONT></SPAN><BR></FONT><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Private</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CommandButton1_Click()<BR><SPAN style="COLOR: #007f00">'保存活动单元格当前字体格式设置</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">With</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>ActiveCell.Font<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_name = .Name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_fontstyle = .FontStyle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_size = .Size<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_Strikethrough = .Strikethrough<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_Superscript = .Superscript<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_Subscript = .Subscript<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_OutlineFont = .OutlineFont<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_Shadow = .Shadow<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_Underline = .Underline<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_ColorIndex = .ColorIndex<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">With</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;dlg = Application.Dialogs(xlDialogActiveCellFont).Show&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'调用活动单元格字体设置选项卡对话框</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'************其他类似对话框*************</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogFontProperties).Show</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogFormatFont).Show</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogFont).Show</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogPatterns).Show&nbsp;&nbsp; '单元格底纹设置</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogReplaceFont).Show&nbsp;&nbsp;'查找替换对话框中的字体设置</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogStandardFont).Show</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'************************************</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">If</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>dlg = <SPAN style="COLOR: #ff0000">True</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Then</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.ScreenUpdating = <SPAN style="COLOR: #ff0000">False</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Me.Label1.ForeColor = ActiveCell.Font.Color<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">'恢复活动单元格原有字体格式设置</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">With</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>ActiveCell.Font<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Name = x_name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.FontStyle = x_fontstyle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Size = x_size<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Strikethrough = x_Strikethrough<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Superscript = x_Superscript<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Subscript = x_Subscript<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.OutlineFont = x_OutlineFont<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Shadow = x_Shadow<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Underline = x_Underline<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ColorIndex = x_ColorIndex<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">With</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.ScreenUpdating = <SPAN style="COLOR: #ff0000">True</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">If</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">End</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>这个方法的缺点是显示的对话框中不仅仅包含颜色设置，还有字体、加粗、斜体等等其他字体格式，虽然在代码中屏蔽了颜色以外的设置功能，但还是容易引起用户误解。当然，如果需要设置字体的更多格式，还是比较适合使用此方法。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><o:p><FONT color=#000000>&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>方法二：调用<SPAN lang=EN-US>Excel</SPAN>中的“编辑颜色对话框”<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-ansi-language: EN-US; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><FONT color=#000000>在<SPAN lang=EN-US>Excel</SPAN>的选项设置中，有一项<SPAN lang=EN-US>Excel</SPAN>调色板的设置（<SPAN lang=EN-US>Excel2003</SPAN>菜单：工具—选项—颜色—修改），可以对<SPAN lang=EN-US>Excel</SPAN>调色板中的<SPAN lang=EN-US>56</SPAN>种颜色进行编辑修改自定义，此方法就是调用这里的编辑颜色对话框。</FONT></SPAN><BR></FONT><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Private</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>CommandButton2_Click()<BR>&nbsp;&nbsp;&nbsp;&nbsp;oldcolor = ActiveWorkbook.Colors(1)&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'保存活动工作簿中调色板第一格的当前颜色</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">If</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>Application.Dialogs(xlDialogEditColor).Show(1) = <SPAN style="COLOR: #ff0000">True</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Then</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT face=Verdana size=2>&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'调用编辑颜色对话框，选择的颜色将返回到调色板的第一格</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #007f00">'************其上一级对话框，但不太适合使用*************</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #007f00">'Application.Dialogs(xlDialogColorPalette).Show</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #007f00">'Application.Dialogs.Item(xlDialogColorPalette).Show</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #007f00">'*************************************************</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Me.Label1.ForeColor = ActiveWorkbook.Colors(1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveWorkbook.Colors(1) = oldcolor&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'恢复活动工作簿调色板第一格的原有颜色</SPAN> </FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">End</SPAN> </FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">If</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">End</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><FONT size=2><FONT face=Verdana><SPAN style="COLOR: #ff0000">Sub</SPAN> </FONT></FONT><SPAN style="COLOR: #0000ff"><BR><FONT face=Verdana size=2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><FONT color=#000000>这个方法是个人比较推荐的一种方法，操作简单。网上有不少地方都提到使用<SPAN lang=EN-US>Application.Dialogs(xlDialogColorPalette).Show</SPAN>这个对话框，但从实际使用上来看，还是现在这个对话框（<SPAN lang=EN-US>xlDialogEditColor</SPAN>）更合适。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑"><o:p><FONT color=#000000>&nbsp;</FONT></o:p></SPAN></P>
<P><FONT face=微软雅黑 color=#000000>（未完）</FONT></FONT><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #007f00"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><SPAN style="COLOR: #0000ff"><BR><BR></P></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>]]></description>
</item><item>
<title><![CDATA[《完美Excel》(第2期)发布了]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1189.html</link>
<author>fanjy</author>
<pubDate>2010-1-6 14:41:00</pubDate>
<description><![CDATA[<P>又有惊喜了！《完美Excel》(第2期)终于发布了！希望大家多提建议。<BR>本期主要内容为Office功能区的开发，汇集了大多数权威的基础资料，相信有兴趣的读者在学习后，会顺利地开发出适合自已的Office功能区界面来。</P>
<P>下载：<BR></P><IFRAME title=Preview style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; WIDTH: 98px; PADDING-TOP: 0px; HEIGHT: 115px; BACKGROUND-COLOR: #fcfcfc" marginWidth=0 marginHeight=0 src="http://cid-20bf8b0bc70443f9.skydrive.live.com/embedicon.aspx/%e5%ae%8c%e7%be%8eExcel/%e5%ae%8c%e7%be%8eExcel^5%e7%ac%ac2%e6%9c%9f^6.rar" frameBorder=0 scrolling=no></IFRAME>]]></description>
</item><item>
<title><![CDATA[Excel 2007功能区开发大全]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1187.html</link>
<author>fanjy</author>
<pubDate>2009-12-31 17:01:00</pubDate>
<description><![CDATA[<P>2010年到了，祝大家新年新进步。给大家送礼了，希望大家喜欢。这里，将学习整理的RibbonX开发系列文章汇总于此，供有兴趣的朋友参考！</P>
<UL>
<LI><A href="http://www.excelperfect.com/wordpress/2009/03/23/ribbonxstudy1/">细品RibbonX(1)：MS Office界面发展简史</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/03/26/ribbonxstudy2/">细品RibbonX(2)：认识Office的新界面—功能区(Ribbon)</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/04/03/ribbonxstudy3/">细品RibbonX(3)：认识快速访问工具栏(QAT)</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/04/08/ribbonxstudy4/">细品RibbonX(4)：认识Office的其他界面元素</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/04/25/ribbonxstudy5/">细品RibbonX(5)：开放的XML文件格式</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/04/28/ribbonxstudy6/">细品RibbonX(6)：初识RibbonX</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/05/02/ribbonxstudy7/">细品RibbonX(7)：有效的RibbonX设计</A> 
<LI><A href="http://www.excelperfect.com/wordpress/2009/05/06/ribbonxstudy8/">细品RibbonX(8)：自定义Ribbon的“武器库”</A> 
<LI><A href="http://www.excelperfect.com/2009/05/21/ribbonxstudy9/">细品RibbonX(9)：层次分明的RibbonX代码结构</A> 
<LI><A href="http://www.excelperfect.com/2009/06/03/ribbonxstudy10/">细品RibbonX(10)：使用记事本自定义功能区</A> 
<LI><A href="http://www.excelperfect.com/2009/06/18/ribbonxstudy11/">细品RibbonX(11)：使用Custom UI Editor自定义功能区</A> 
<LI><A href="http://www.excelperfect.com/2009/06/24/ribbonxstudy12/">细品RibbonX(12)：使用XML Notepad自定义功能区</A> 
<LI><A href="http://www.excelperfect.com/2009/07/08/ribbonxstudy13/">细品RibbonX(13)：初识XML</A> 
<LI><A href="http://www.excelperfect.com/2009/07/10/ribbonxstudy14/">细品RibbonX(14)：核心的OpenXML架构元素</A> 
<LI><A href="http://www.excelperfect.com/2009/07/18/ribbonxstudy15/">细品RibbonX(15)：回调(CallBacks)</A> 
<LI><A href="http://www.excelperfect.com/2009/08/27/ribbonxstudy16/">细品RibbonX(16)：RibbonX开发基础问答</A> 
<LI><A href="http://www.excelperfect.com/2009/08/31/ribbonxstudy17/">细品RibbonX(17)：RibbonX控件概述</A> 
<LI><A href="http://www.excelperfect.com/2009/08/31/ribbonxstudy18/">细品RibbonX(18)：button控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/09/28/ribbonxstudy19/">细品RibbonX(19)：checkBox控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/09/29/ribbonxstudy20/">细品RibbonX(20)：editBox控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/09/30/ribbonxstudy21/">细品RibbonX(21)：toggleButton控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/12/ribbonxstudy22/">细品RibbonX(22)：item元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/15/ribbonxstudy23/">细品RibbonX(23)：comboBox控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/16/ribbonxstudy24/">细品RibbonX(24)：dropDown控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/17/ribbonxstudy25/">细品RibbonX(25)：使用自定义图片和库</A> 
<LI><A href="http://www.excelperfect.com/2009/10/20/ribbonxstudy26/">细品RibbonX(26)：库(Gallery)控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/23/ribbonxstudy27/">细品RibbonX(27)：menu控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/28/ribbonxstudy28/">细品RibbonX(28)：splitButton控件详解</A> 
<LI><A href="http://www.excelperfect.com/2009/10/30/ribbonxstudy29/">细品RibbonX(29)：dynamicMenu元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/02/ribbonxstudy30/">细品RibbonX(30)：box元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/03/ribbonxstudy31/">细品RibbonX(31)：buttonGroup元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/06/ribbonxstudy32/">细品RibbonX(32)：labelControl元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/10/ribbonxstudy33/">细品RibbonX(33)：separator元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/12/ribbonxstudy34/">细品RibbonX(34)：menuSeparator元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/13/ribbonxstudy35/">细品RibbonX(35)：dialogBoxLauncher元素详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/17/ribbonxstudy36/">细品RibbonX(36)：keytip属性详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/24/ribbonxstudy37/">细品RibbonX(37)：screentip属性和supertip属性详解</A> 
<LI><A href="http://www.excelperfect.com/2009/11/25/ribbonxstudy38/">细品RibbonX(38)：覆盖内置控件的属性</A> 
<LI><A href="http://www.excelperfect.com/2009/11/27/ribbonxstudy39/">细品RibbonX(39)：技巧—使用VBA自定义功能区元素属性</A> 
<LI><A href="http://www.excelperfect.com/2009/11/30/ribbonxstudy40/">细品RibbonX(40)：技巧—在注册表中保存值和从注册表中获取值</A> 
<LI><A href="http://www.excelperfect.com/2009/12/01/ribbonxstudy41/">细品RibbonX(41)：从头开始创建功能区用户界面</A> 
<LI><A href="http://www.excelperfect.com/2009/12/02/ribbonxstudy42/">细品RibbonX(42)：启动时激活功能区中某选项卡</A> 
<LI><A href="http://www.excelperfect.com/2009/12/04/ribbonxstudy43/">细品RibbonX(43)：禁用和重利用功能区中的命令</A> 
<LI><A href="http://www.excelperfect.com/2009/12/07/ribbonxstudy44/">细品RibbonX(44)：在Office菜单中添加项目</A> 
<LI><A href="http://www.excelperfect.com/2009/12/10/ribbonxstudy45/">细品RibbonX(45)：在快速访问工具栏（QAT）中添加项目</A> 
<LI><A href="http://www.excelperfect.com/2009/12/11/ribbonxstudy46/">细品RibbonX(46)：在Excel 2007的QAT中以表驱动的方式构建自定义菜单</A> 
<LI><A href="http://www.excelperfect.com/2009/12/14/ribbonxstudy47/">细品RibbonX(47)：更改Excel 2007快速访问工具栏中按钮的图标</A> 
<LI><A href="http://www.excelperfect.com/2009/12/16/ribbonxstudy48/">细品RibbonX(48)：在Visual Studio中自定义Office 2007用户界面的快速访问工具栏(QAT)</A> 
<LI><A href="http://www.excelperfect.com/2009/12/17/ribbonxstudy49/">细品RibbonX(49)：在功能区中使用上下文控件</A> 
<LI><A href="http://www.excelperfect.com/2009/12/18/ribbonxstudy50/">细品RibbonX(50)：如何共享Ribbon定制之Excel部署技术</A> 
<LI><A href="http://www.excelperfect.com/2009/12/20/ribbonxstudy51/">细品RibbonX(51)：如何共享Ribbon定制之跨文件共享Ribbon项目</A> 
<LI><A href="http://www.excelperfect.com/2009/12/20/ribbonxstudy52/">细品RibbonX(52)：如何共享Ribbon定制之在正在使用的多个Office版本中部署Excel解决方案</A> 
<LI><A href="http://www.excelperfect.com/2009/12/21/ribbonxstudy53/">细品RibbonX(53)：RibbonX和Visual Studio(1)</A> 
<LI><A href="http://www.excelperfect.com/2009/12/22/ribbonxstudy54/">细品RibbonX(54)：RibbonX和Visual Studio(2)</A> 
<LI><A href="http://www.excelperfect.com/2009/12/23/ribbonxstudy55/">细品RibbonX(55)：在Visual Studio中开发Excel商务应用程序(1)</A> 
<LI><A href="http://www.excelperfect.com/2009/12/24/ribbonxstudy56/">细品RibbonX(56)：使用Visual Studio开发Excel商务应用程序(2)</A> 
<LI><A href="http://www.excelperfect.com/2009/12/24/ribbonxstudy57/">细品RibbonX(57)：示例—在Excel 2007的功能区中添加中文选项卡和控件</A> 
<LI><A href="http://www.excelperfect.com/2009/12/25/ribbonxstudy58/">细品RibbonX(58)：示例—创建动态的Ribbon库</A> 
<LI><A href="http://www.excelperfect.com/2009/12/28/ribbonxstudy59/">细品RibbonX(59)：RibbonX可视化设计器</A> </LI></UL>
<P>注：请尊重作者劳动，转载请注明链接。</P>]]></description>
</item><item>
<title><![CDATA[《我爱弹钢琴》窗体版]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1186.html</link>
<author>chrisfang</author>
<pubDate>2009-12-28 13:52:00</pubDate>
<description><![CDATA[<P><STRONG><FONT face=微软雅黑>《我爱弹钢琴》窗体版</FONT></STRONG></P>
<P><STRONG></STRONG><FONT face=微软雅黑>附件</FONT>：&nbsp;<A href="http://blog.excelhome.net/attachment.asp?FileID=1810">我爱弹钢琴V1.2.rar</A></P>
<P><STRONG><FONT face=微软雅黑><FONT color=blue>程序简介</FONT></FONT></STRONG><BR><FONT face="微软雅黑 ">本程序是在原有非窗体版的基础上改进的版本（原版本见此贴：</FONT><A href="http://club.excelhome.net/thread-488256-1-1.html" target=_blank><FONT face="http://blog.excelhome.net/微软雅黑 ">http://club.excelhome.net/thread-488256-1-1.html</FONT></A><FONT face="微软雅黑 ">），这两个版本均是利用Windows API调用MIDI软波表功能来使用电脑模拟钢琴发音。程序的基本原理和Excel并没有多大关系，只是利用了Excel的VBA开发环境和数据存储方式加以实现。其中的原版本使用了工作表模式来实现，没有使用窗体和控件，更多地体现了Excel工作表的元素应用，例如条件格式、数据有效性序列、拼音指南等等。</FONT><BR><FONT face="微软雅黑 ">【原版本截图】：</FONT></P>
<P><FONT face=微软雅黑><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-12/281357234744.png" border=0></FONT></P>
<P><FONT face=微软雅黑></FONT>&nbsp;</P>
<P><BR><SPAN id=attach_638300 onmouseover="showMenu(this.id, 0, 1)" style="DISPLAY: none; LEFT: 213px; POSITION: absolute; TOP: 1836px"><IMG src="http://club.excelhome.net/images/GreenPark/attachimg.gif" border=0></SPAN><FONT face=微软雅黑>而现在这个版本使用窗体来实现，更多地体现了界面的美观化、操作的人性化、容错性的提高、并且支持更多功能扩展。<BR><BR><FONT color=blue><STRONG>主要功能</STRONG></FONT></FONT><BR><STRONG><FONT face="http://blog.excelhome.net/微软雅黑 "><FONT color=#0000ff></FONT></FONT></STRONG><BR><FONT face="微软雅黑 "><FONT color=blue><STRONG>1，【弹奏】</STRONG></FONT>打开工作簿，选择“启用宏”启动程序。下方状态栏显示“就绪”后，即可使用鼠标或电脑键盘开始弹奏钢琴（记得打开音箱和系统中的小喇叭）。使用鼠标可以直接在程序的界面上点击钢琴键盘弹奏，如果使用电脑按键进行弹奏，则可以勾选上方功能区右侧的“按键提示”复选框，此时钢琴键盘上会显示对应的电脑按键，对照按键即可弹奏。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 "><FONT color=#0000ff><STRONG>2，【按键、音阶提示】</STRONG></FONT>功能区的“按键提示”和“音阶提示”复选框可以根据需要进行勾选，“按键提示”显示键盘对应按键，“音阶提示”则显示C调下的音阶对照以及当前所选择的音调。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 "><FONT color=#0000ff><STRONG>3，【音量、音调调节】</STRONG></FONT>功能区的第一个按钮为“音量调节”按钮，点击后出现音量滑动条，可以调节系统主音量和MIDI设备音量大小（同时调节）。</FONT><BR><FONT face="微软雅黑 ">&nbsp; &nbsp;&nbsp; &nbsp;功能区的第二个按钮为“音调选择”按钮，点击后可以选择不同的音调基准。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 "><FONT color=#0000ff><STRONG>4，【收藏曲目】</STRONG></FONT>功能区的第三个按钮为“收藏曲目”按钮，程序中已经内置了一些钢琴弹奏的曲目，点击此按钮选择其中的内置曲目后，可以再通过点击右侧的三角形“播放”按钮播放内置曲目，程序会在播放钢琴声音的同时显示键盘按键位置。在播放内置曲目过程中，不再接受用户按键或鼠标点击琴键的动作。播放过程中可以点击功能区中的正方形“停止”按钮终止播放，播放结束后可以再次点击“播放”按钮进行播放，或是选择其他内置曲目进行播放，也可以进行自由弹奏。</FONT><BR><FONT face="微软雅黑 ">&nbsp; &nbsp;&nbsp; &nbsp; 收藏曲目中有一首“EH欢迎您”，是Excelhome热心会员根据北京欢迎您曲调改编的歌曲。在播放这首内置曲目时，会在功能区右侧区域同步显示其对应的歌词字幕。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 "><FONT color=#0000ff><STRONG>5，【录音和回放】</STRONG></FONT>功能区右侧的“录音功能”复选框在勾选以后，程序进入录音模式工作状态，不再允许内置曲目的选择。用户准备好进行弹奏录音后，可以点击功能区中红色圆圈图标的“录音”按钮开始录音，此时用户的按键动作和按键之间的时间停顿都将被实时记录下来，直到点击功能区中的正方形“停止”按钮停止录音。在停止录音后，可以点击“播放”按钮收听录音回放，同时查看记录下来的按键操作。在播放过程中，不再接受用户按键或鼠标点击琴键的动作。播放过程中可以点击功能区中的正方形“停止”按钮终止录音的播放，播放结束后可以再次点击“播放”按钮进行回放，也可以再次点击“录音”按钮开始新的录音操作，也可以进行自由弹奏。进行新的录音时，会覆盖原有用户录制的曲目（不影响程序内置曲目）。</FONT><BR><FONT face="微软雅黑 "></FONT><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 "><FONT color=#0000ff><STRONG>6，【其他注意事项】</STRONG></FONT>要退出录音模式，可以取消“录音功能”复选框的勾选，恢复到正常模式，此时播放内置曲目功能同时恢复有效。注意，在录音按钮按下后，系统长时间处于按键记录状态，如果不再需要记录，记得点击“停止”按钮终止录音，避免长时间消耗系统资源。</FONT></P>
<P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-12/281357946108.png" border=0></P>
<P><FONT face=微软雅黑></FONT>&nbsp;</P>
<P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-12/281357915292.png" border=0></P>
<P>&nbsp;</P>
<P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-12/281357253530.png" border=0></P>
<P>&nbsp;</P>
<P><FONT face=微软雅黑>在论坛中查看此帖：</FONT><A href="http://club.excelhome.net/thread-515429-1-1.html"><FONT face=微软雅黑>http://club.excelhome.net/thread-515429-1-1.html</FONT></A></P>]]></description>
</item><item>
<title><![CDATA[《Excel2007实战技巧精粹》]]></title>
<link>http://blog.excelhome.net/user1/xolf/1185.html</link>
<author>xolf</author>
<pubDate>2009-12-26 11:28:00</pubDate>
<description><![CDATA[<IMG border=0 alt="" src="http://blog.excelhome.net//UploadFiles/2009-12/261126631350.jpg">]]></description>
</item><item>
<title><![CDATA[矛厕的蚊子]]></title>
<link>http://blog.excelhome.net/user1/guoguo/1183.html</link>
<author>guoguo</author>
<pubDate>2009-12-11 22:16:00</pubDate>
<description><![CDATA[<DIV style="FONT-SIZE: 16px" id=blogDetailDiv>
<P>“我前世是贵族。”我得意的；</P>
<P>“我前世是青瓦。”他如是说。</P>
<P>&nbsp;</P>
<P>看了一系列蚊子的蚊帐，才发现原来蚊子也是有文化有内涵有知识的种类，只是因为与人类的沟通出现障碍，一直被划分到“四害”里。其实我目前也不具体清楚“四害”到底是哪几种，但是很显然，蚊子是一害。</P>
<P>&nbsp;</P>
<P>蚊子传播病毒，在人类看来，其实在蚊子看来是一种另类的文化传播，只是人类无法抵御而已，受到了侵害所以要反击要消灭。可是爱情何尝不也是一种病毒，在人类传播，蚊子可没有站出来要消灭爱情，因为蚊子更进化，能理解爱情的含义，虽然也有被爱情害死的先例。</P>
<P>&nbsp;</P>
<P>当我看到划着不优美的曲线飘落在地上的蚊子时，我很伤感，或者这只蚊子正是因为爱情而亡，落入人的爪爪里，掉进人的键盘里，背后的故事人又如何能知晓呢，即使是是蚊言文发源地的茅厕，也仅仅就其思维方式而看到了一些关于蚊子的表象，认为蚊子的死应该是不凄美的。</P>
<P>&nbsp;</P>
<P>面对蚊子的嗡嗡声，茅厕烦躁了。可茅厕又如何知道这正是蚊子在唱着爱情葬歌呢，为了爱情的结晶，是一定要吃人血的，可这一去未必能全身而退，转身即是百年……你情我浓彼此依依不舍，茅厕只知道蚊子又开始干扰环境了，又要做坏事了，不屑的鄙视着蚊子的葬歌。是啊，牛都说不要对它谈情它不懂了，何况一个茅厕咧。</P>
<P>&nbsp;</P>
<P>于是茅厕既而想到了跳蚤的好处来，跳蚤即使做了坏事也不留名，还得等几个小时之后才会发现被咬的痕迹。但是矛厕没有被跳蚤咬过，又如何能感受到被咬的痛楚和难过呢。矛厕有点似叶公好龙，遥遥的喜欢着，如果矛厕知道被跳蚤咬了之后的感受是痒得难过想抓又疼不抓又痒抓得出血还不解恨时时的痒时，矛厕想来就是被真龙吓得屁滚尿流的时候。</P>
<P>&nbsp;</P>
<P>矛厕还幻想过自己不知道来自何方的一匹狼，文化矛厕嘛，有这样那样的想法都是很自然的，但是很显然这次文化的很成功，终于想到了狼的无助不被人所理解既而产生的一种凄美，仅仅因为一女孩的意外停留的眼神而致使矛厕文化乱了心弦，胡乱的做了许多美梦，这也是矛厕文化的进步，瞧，被人理解是一件多么美妙的事。我想起了矛厕文化关于蚊子的前奏嗡嗡嗡，蚊子该是多么的委屈和无奈，只能不屑的表达在心底。</P>
<P>&nbsp;</P>
<P>最被矛厕文化看不起的前奏，却是人的专利。无论做任何事都会有前奏，马路上才有那么多喇叭声，而菜市场里的吵架多恰是因为前奏没做好，而家庭的不和睦也是前奏功夫没做足，而最最为人类所赞美的爱情，不也得送花美言才能获得芳心或狼心么。我想矛厕文化省略了前奏直接冲一美女说：妞，我看上你了。人会以为疯人院的围墙倒了。</P>
<P>&nbsp;</P>
<P>那片前世的青瓦不是这样的，其实，我的前世是贵族屋檐下的一溜冰勾，生命何其短暂，但是因为挂住我的那片青瓦，让我更加晶莹剔透，当早晨的一束阳光照在我身上时，我能看到青瓦身上泛起的堇色光芒，我与青瓦的缘分仅仅是一个冬季，还未来得及告诉青瓦，我是多么的喜欢他，将我捧在手心里的温暖，让我度过了一个如春天般的冬季。</P>
<P>&nbsp;</P>
<P>这世，他是矛厕，我却是只蚊子，年轮又将我们仅仅的联系在一起……</P></DIV>]]></description>
</item><item>
<title><![CDATA[[转帖] 什么才叫电脑高手？如何成为电脑高手？]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1182.html</link>
<author>gvntw</author>
<pubDate>2009-11-15 15:55:00</pubDate>
<description><![CDATA[<DIV><A href="http://wowo.5d6d.com/link.php?url=http://hi.baidu.com%2F%25BF%25E1%25D7%25A7%25CB%25A7%25B4%25F4%2Fblog%2Fitem%2Fab4c31cbc930361ebe09e69b.html" target=_blank>http://hi.baidu.com/%BF%E1%D7%A7%CB%A7%B4%F4/blog/item/ab4c31cbc930361ebe09e69b.html</A><BR>建议:<BR>首先，支持你！ <BR><BR>要想成为电脑高手，首先要对电脑报以极大的兴趣和热爱！ <BR><BR>不要以为学习电脑是多么难的事，不要以为成为高手是高不可攀，所谓的电脑高手： <BR>他只是比别人更执着 <BR>他只是更喜欢思考 <BR>他只是善于总结经验 <BR>他只是动手能力很强 <BR>他只是把电脑玩的更彻底 <BR><BR>一、提倡自学 <BR><BR>对初学者，老师引进门很重要，但以后就要靠自学。自学能力对于计算机学习尤为重要，原因就是计算机发展奇快，掌握了自学方法，具备了自学能力，才能应付计算机日新月异的发展形势。有人说，"自学，谈何容易！"我说别的学科自学可能较难，而计算机却相对容易一些。为什么这样说呢？因为计算机越来“平易近人"，让人能够看得见、摸得着。能够让人动的东西就好学，比如几岁的娃娃就敢去开电视机和调台，能够去控制VCD等，难道电视机和VCD机不是高科技产品吗？计算机作为学习对象，理论知识和实践环境是统一的，学习内容和进度自己可以掌握，自学当中有弄不懂的东西，大多可以通过上机加以解决。因此，我说它易于自学、便于自学。当然，有一本便于自学的指导书就更好了。 <BR><BR>二、强调动手 <BR>计算机这个学科实践性特强，不动手是学不会的。计算机从诞生那天起就被人蒙上了神秘的面纱，许多专著像"天书"，让初学者望而生畏。但是，很多小孩子为什么能把计算机用得那么好呢？窍门在哪儿呢？动手！一动手就会感?原来如此！没有什么了不得"！这样，就会越学越轻松、越学越有兴趣。边动手边动脑是计算机学习的基本模式，可以自然而然地摈弃那种死记硬背、"纸上谈兵"的学习模式，既动手又动脑，形成生动活泼的学习氛围。动手，还能强化理论联系实际的优良学风、培养实干精神。 <BR><BR>三、注重应用 <BR>在学习计算机知识与技能的过程中，要想到"用"，"用"到自己的学习、工作和生活中。作为智力工具，作为人脑的延伸物，让计算机帮助我们思维、论证、决策，以提高分析问题和解决问题的能力。人们常说"熟能生巧"，泛指学用一般工具，对学用计算机这种智力工具，就不仅仅是"生巧"了，而且还"益智"，即有利于开发智力。计算机中浓缩着人类智慧的结晶，集成着现代人的思维方式和科学方法，通过人脑指挥电脑、电脑帮助人脑的过程，会使人越来越聪明，越来越能干。在新世纪大智大勇，富有创造才能的人，一定是会使用电脑帮自己工作的人。 <BR><BR>四、上网 <BR>计算机教育不仅仅是学科教育，更重要的是一种文化教育。目前，分布在五大洲的几千万台计算机已经联到了互联网上，形成了一种新的文化氛围；会不会使用网络成为衡量现代人文化水准的一个新尺度。在网络文化氛围中，获取信息、处理信息、交流信息的能力十分重要 庖彩窍执 说囊恢只 灸芰Γ <BR>五、有益的考试 <BR>是学习电脑的技术还是学习专业知识？是学习操作还是学习应用？是仅仅和电脑交朋友还是要熟练地掌握？不同的层次、不同的要求就有不同的回答。对于绝大多数人来说，学习电脑不是为了成为一名计算机专家，而是为了应用。电脑是高科技的产品，它的内部结构、工作原理，硬件的制造技术极其复杂，是科学的象牙之塔。但是它的使用又是那么方便、简单，学习电脑的基本操作要比学开汽车，或学习一个学科知识容易得多。这是其他机器所根本不能相比的。现在一些所谓自动洗衣机、傻瓜相机等机器很容易使用，就是因为它们内部安装了"微型电脑"的缘故。正是由于电脑的这种特殊性，因此学习电脑从初级到高级有多个层次。这与照相一样，可以学习用"傻瓜相机"一按就照的初级摄影，也可以学习用专业相机、具备丰富专业知识的高级摄影。可以有：与电脑交朋友、用电脑帮助学习、学习基本操作技能、学习电脑使用、学习电脑的应用、学习一些电脑基础知识等几个层次。 <BR><BR>只要我们掌握以上的几点，我们的学习将会如鱼得水，"海阔凭鱼跃，天高任鸟飞"。在信息海洋中游弋的时代就要到来了。 <BR><BR><BR>对你的建议: <BR><BR>1.结识一些电脑高手，高手能给你很有用的经验，帮你少走弯路，是成长的捷径。 <BR>2.玩电脑上自带的挖地雷游戏——锻炼鼠标的手感和对鼠标的控制能力。 <BR>3.熟悉键盘，电脑不是个娇气包，只要不是大卸八块，一般不会出问题，所以你大可以在键盘上胡乱敲一气，大不了关了电源过一会儿再开机。不过既然要学就要学好，一开始就要学会正确的方法——打字的姿势等等。 <BR>4.至少学会一种输入法，我个人建议用5笔或智能ABC。 <BR>5.首先学会上网！这很重要，也很简单。首先应该学会搜索。网上几乎有你想要的任何知识，有你想得到的任何问题。比如，在SOHU、SINA、163等大型网站的搜索栏里键入“学电脑”就可以找到天文数字的条目，包括我们正在回答你问题的这个网页。 <BR>6.买一款好的电脑学习软件，边学边用。 <BR>7.玩游戏，这可是学习电脑的捷径。 <BR><BR><BR>DOS是英文Disk Operating System的缩写，意思是“磁盘操作系统”，是Windows的前辈。 <BR><BR>DOS和Windows的最大区别是：DOS一次只能同时运行一个程序，而Windows是多任务系统，可以同时运行多个程序。比如，你可以一边听歌一边上网，而这在DOS下是绝对做不到的。 <BR><BR>其次，DOS是命令行操作，程序运行简单、直接。而Windows是图形界面操作，比较直观，但真正的操作在后台，我们看不到。 <BR><BR>实际上，除了多媒体的部分功能在DOS下无法实现以外，（比如看电影）大多数的计算机功能，在DOS下同样能实现，比如DOS下也可以联网。 <BR><BR>虽然现在都是Windows的天下，但DOS还是很有用处的，如著名的备份还原系统的GHOST软件，目前还只能在DOS下运行；在DOS下安装的Windows是最稳定、纯净的；解决硬件问题、进行日常维护和维修，如刷BIOS版本，也离不开DOS；编程软件的运行，如大名鼎鼎的C语言，也在DOS下运行。 <BR><BR>总之，DOS远还没有到退出历史舞台的时候，它的作用非常大，一个真正的电脑高手，必定会DOS的操作技能。</DIV>]]></description>
</item><item>
<title><![CDATA[[转帖]两条腿走路：为技术人才提供恰当的晋升通道]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1178.html</link>
<author>gvntw</author>
<pubDate>2009-10-17 20:44:00</pubDate>
<description><![CDATA[作者：商蓉蓉，企业信息化专家、高级项目管理师，任职于方正科技。<BR><BR>将合适的人放到合适的岗位上，是企业的领导者最应该关注的问题之一。但是许多时候，这个目标更象一句口号，而非一项实际可执行的战略，或者仅在企业的战略规划图中占据了显要位置，而缺乏具体可实施的策略、制度和方法上的保障。<BR>在许多富有经验的领导者看来，实现这一战略目标的最直接的做法，就是为企业制定一套适合自身情况的人力资源管理制度。通过一套规章制度，以及HR人员的执行，从员工的招聘、培养和提拔等各个阶段，为企业发现人才、使用人才和保留人才提供强有力的保障。<BR><STRONG>两种通道共存</STRONG><BR>在许多企业的人力资源管理制度中，都为员工提供了多方位的发展渠道，比如管理晋升通道、技术晋升通道。<BR>管理晋升通道让那些有着优秀的管理能力、领导能力和沟通能力的员工，能够在管理职位上更好的发挥出自身的能力和作用；技术晋升通道让那些有着卓越的专业能力、钻研精神和技术敏感度的员工，能够在专业岗位上更出色的发挥出自身的优势和特长。<BR>说到底，企业的管理岗位毕竟数量有限，既不能毫无原则的增加管理岗位，也不能坐视技术专家黯然离开，只有通过与管理晋升通道相得益彰的技术晋升通道，为技术专家们提供企业内部的各级技术职称，并配合设置相应的薪资制度和福利待遇，让无意于管理岗位的技术人才们也可以通过提升专业技能获得地位和薪酬上的晋升，增强员工的满意度和忠诚度。<BR>两种通道的共存，既可以避免员工为了晋升无视个人的特点去争夺有限的管理岗位，也可以避免技术型员工由于看不到发展的前景而选择离开，造成企业核心技术人才的流失，还可以避免技术专家因转入管理岗位而不适应，既无法发挥原有的技术专长，也无法胜任现在的管理职责，给企业和个人都造成难以挽回的损失。<BR>两种通道的共存，为不同类型的员工提供了更适合的发展空间，技术晋升通道是管理晋升通道的有益补充，两者之间是相互配合的，只有具备了这两种发展通道的人力资源制度才是完善和有生命力的，只有彻底贯彻了这两种晋升制度的企业才能真正的发挥出各种人才的优势，真正具备对优秀人才的吸引力和凝聚力。<BR><STRONG>技术晋升的缺失</STRONG><BR>然而，从目前许多企业的现状来看，领导者并没有把这两种通道的放在同样的高度来考虑，他们往往更重视管理人才的选拔和提升，而对技术人才的重视度往往不够。即使对那些掌握着企业关键技术的核心人才，也仅仅是用提高薪资、增加管理头衔的方法来体现企业的重视，而这些简单的薪酬提升和并不合适的管理岗位，往往不能提升技术核心人才的满足感，不能达到企业留人的目的。<BR>举个例子，有的企业确实设置了企业内部的“技术专家评定”的制度，也设置了相应的津贴和职称管理制度，从制度上来看无可挑剔。但是在实际的执行过程中，现有的各级管理者却没有认识到此项制度对于技术人才管理的重要意义，使这项制度完全失去了原来的设计初衷。企业按部就班的选拔和评定出来的所谓技术专家们，不过成了各级管理者的另一次集体亮相罢了，根本未曾涉及普通员工中真正的技术专才们，而这项原本应该为技术人才提供更广阔发展空间的制度，却成了管理者们的又一项福利，让人无奈又无语。<BR>企业的领导者总是会抱怨技术型的员工“个性强，不好管”，忙着制定各种强制性的规章制度来规范个性员工的行为，一个“堵”字诀练得炉火纯青，却独独忘了“疏堵结合”的道理。要知道，“堵”永远只能跟在后面尽量减少损失，而“疏”则可以从源头上避免不利局面的形成，不再是尽量“减少”损失，而是“避免”损失，甚至是创造新的收益。<BR>因此，企业的领导者必须给与这两种通道相同的重视，甚至在管理晋升通道已经比较完善的当下，将更多的注意力放在技术晋升通道的设计和执行上面，激发技术人才的工作积极性，从而为企业的技术进步和产品创新提供持续的、充足的动力。<BR><STRONG>加强技术人才管理</STRONG><BR>“提高自主创新能力，建设创新型国家”是我们的发展方针，创新的主力军则是广大的技术人才，只有发挥人才的创造性和主动性，科技强国之梦才可能成为现实。<BR>对于企业的发展，技术也是最主要的推动力之一，是企业最具生命力的核心竞争力，如果在技术的发展过程中被竞争对手所淘汰，那么无论多么优秀的管理和营销能力，都将无法挽回失去市场的结局。<BR>在国际金融危机爆发的时候，各国的实体经济生存环境更加恶劣，人们都不自觉的捂紧了自己的口袋，单靠打折促销和广告轰炸换来的人气已经不能持久，而且这样的做法直接降低了企业的利润，不可能持续太长的时间。最后，还是那些真正有竞争力的产品才能让人们心甘情愿的买单。<BR>因此，为了企业的健康发展，在大环境日益严峻的今天，只有依靠企业自身的实力，尤其是技术创新能力，才能救企业于水火，而这又对企业的技术人才的管理和激励提出了更高的要求，只有激发他们的创造力，企业才能获得持续的技术创新能力，才能在残酷的竞争中占得先机，而这必将对人力资源管理制度的优化和完善提出更高的要求。<BR>希望在这个世界经济的“冬天”中，各家企业的领导者能够洞悉根本，带领企业早日迎来春暖花开的那一天。]]></description>
</item><item>
<title><![CDATA[在Excel中弹钢琴（非Flash）]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1177.html</link>
<author>chrisfang</author>
<pubDate>2009-10-1 0:27:00</pubDate>
<description><![CDATA[<A></A>
<P><FONT face=微软雅黑>为迎接新中国60周岁华诞，特在国庆前夕创作了一个VBA：在<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=Excel">Excel</SPAN>中弹钢琴（非窗体、非Flash版）。大家可以在其中欣赏为祖国弹响的生日快乐歌，也可以在假期时间使用键盘弹奏钢琴自娱自乐。<BR><BR>为了更多地体现Excel中的元素，此版本为<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B9%A4%D7%F7%B1%ED">工作表</SPAN>版本，没有使用窗体和任何<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%BF%D8%BC%FE">控件</SPAN>。以后有时间会再做一个窗体版分享给大家。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><A href="http://blog.excelhome.net/attachment.asp?FileID=1795">钢琴V1.3.rar</A></P>
<P><FONT face=微软雅黑>详细使用说明：</FONT></P>
<P><FONT face=微软雅黑>一、基本功能<BR>打开表格显示如下面图1所示界面。</FONT><BR><SPAN id=attach_592511 onmouseover="showMenu(this.id, 0, 1)" style="DISPLAY: none; LEFT: 213px; POSITION: absolute; TOP: 1232px"></SPAN>&nbsp; </P>
<P><IMG src="http://blog.excelhome.net/attachment.asp?path=UploadFiles/2009-10/1110263816.jpg"><BR><BR><FONT face="http://blog.excelhome.net/微软雅黑 "></FONT><BR><FONT face="微软雅黑 ">可在右侧选择弹奏所需的音调和电脑音响输出的音量。</FONT><BR><FONT face="微软雅黑 ">点击“Start”按钮以后，可以开始用键盘弹奏琴键（暂不支持鼠标），想要知道琴键和键盘按钮的对应关系，可以点击右下方的“按键对照”按钮。弹奏完毕可以点击“End”按钮释放midi资源。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 ">“试听歌曲”的数据有效性下拉列表中包含了一些内置曲目，选中以后可以让电脑自动弹奏，自动弹奏中途可以按Esc中止或是在下拉列表中选择“停止播放”。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 ">二、录播功能</FONT><BR><FONT face="微软雅黑 ">点击“Start”按钮以后，键盘上方区域会出现“记录键盘”按钮，如下面图2所示。</FONT><BR><SPAN id=attach_592512 onmouseover="showMenu(this.id, 0, 1)" style="DISPLAY: none; LEFT: 213px; POSITION: absolute; TOP: 1675px"></SPAN>&nbsp; </P>
<P><IMG src="http://blog.excelhome.net/attachment.asp?path=UploadFiles/2009-10/1111481345.jpg"><BR><BR><SPAN id=attach_592513 onmouseover="http://blog.excelhome.net/showMenu(this.id, 0, 1)" style="DISPLAY: none; LEFT: 213px; POSITION: absolute; TOP: 1977px"><IMG src="http://club.excelhome.net/images/GreenPark/attachimg.gif" border=0></SPAN><FONT face=微软雅黑>点击此按钮可以让Excel记录下你的弹奏过程。弹奏完毕再次点击此按钮结束录制。此时会出现“回放记录”和“导出记录”按钮，如下面图3所示。</FONT><BR>&nbsp; </P>
<P><IMG src="http://blog.excelhome.net/attachment.asp?path=UploadFiles/2009-10/1111283578.jpg"><BR><BR><FONT face="http://blog.excelhome.net/微软雅黑 "></FONT><BR><FONT face="微软雅黑 ">点击“回放记录”按钮可以将之前记录下来的键盘演奏重新回放一遍。而点击“导出记录”可以将你的演奏记录导出为Excel文档，以便于以后重新回放或作为内置歌曲。</FONT><BR><FONT face="微软雅黑 "></FONT><BR><FONT face="微软雅黑 ">三、其他说明</FONT><BR><FONT face="微软雅黑 ">没有做太多的容错处理，因此尽量不要与其他Excel工作簿同时打开，单独运行此文件比较好。</FONT><BR><FONT face="微软雅黑 ">如果没有正确点击按钮或使用了规定以外的键盘按键，会在键盘按键时没有钢琴的响应而是出现在单元格内输入字符的情况，此时按ESC取消，然后点击正确的按钮即可。</FONT><BR><FONT face="微软雅黑 ">如果电脑没有出声，请检查音箱和电脑扬声器是否开启，另外由于使用了MIDI通道，请确认电脑系统中已经安装了MIDI软波表。</FONT></P>
<P><FONT face=微软雅黑></FONT>&nbsp;</P>
<P><FONT face=微软雅黑>在论坛中查看此帖：<A href="http://club.excelhome.net/thread-488256-1-1.html">http://club.excelhome.net/thread-488256-1-1.html</A></FONT></P>
<P><BR></P>
<P><BR><FONT face="微软雅黑 "></FONT><BR>&nbsp;</P>]]></description>
</item><item>
<title><![CDATA[单元格引用的简写和变形]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1175.html</link>
<author>chrisfang</author>
<pubDate>2009-9-17 11:19:00</pubDate>
<description><![CDATA[<FONT face=微软雅黑><SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B5%A5%D4%AA%B8%F1">单元格</SPAN><SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%D2%FD%D3%C3">引用</SPAN>有<FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">和</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">两种样式，两种形式中又包含了绝对引用和相对引用两种不同的变化。本帖不讨论绝对引用和相对引用的问题，而是着重讨论一下在单元格引用中结合三种引用运算符所进行的引用地址变形及简写方式。</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000></FONT></FONT><BR><STRONG><FONT color=blue>单个<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%C7%F8%D3%F2">区域</SPAN>的引用（同行、同列的简写）：</FONT></STRONG><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">先来讲一下</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">方式的引用</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">对于</FONT><FONT style="FONT-SIZE: 10.5pt">G2:J2</FONT><FONT style="FONT-SIZE: 10.5pt">这样一个单元格区域，使用</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">引用样式，可以写作：</FONT><FONT style="FONT-SIZE: 10.5pt">R2C7:R2C10</FONT><FONT style="FONT-SIZE: 10.5pt">，也可以写作：</FONT><FONT style="FONT-SIZE: 10.5pt">R2C10:R2C7</FONT><FONT style="FONT-SIZE: 10.5pt">。但</FONT><FONT style="FONT-SIZE: 10.5pt">R</FONT><FONT style="FONT-SIZE: 10.5pt">必须在</FONT><FONT style="FONT-SIZE: 10.5pt">C</FONT><FONT style="FONT-SIZE: 10.5pt">前面，</FONT><FONT style="FONT-SIZE: 10.5pt">“C10R2:C7R2”</FONT><FONT style="FONT-SIZE: 10.5pt">这样的写法是无效的。</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>对于这样</FONT><FONT color=red>同行</FONT><FONT color=#000000>的区域引用，可以使用简写的引用方式，即将</FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>R2C7:</FONT><FONT color=red>R2</FONT><FONT color=black>C</FONT><FONT color=#000000>10</FONT></FONT><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">中的红色部分省去，简写为</FONT><FONT style="FONT-SIZE: 10.5pt">R2C7:C10</FONT><FONT style="FONT-SIZE: 10.5pt">。</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>如果对于</FONT><FONT color=red>同列</FONT><FONT color=#000000>的区域引用，例如</FONT></FONT><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">G2:G10</FONT><FONT style="FONT-SIZE: 10.5pt">，则可以将</FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>R2</FONT><FONT color=red>C7</FONT><FONT color=#000000>:R10C7</FONT></FONT><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">中的红色部分省去，简写为</FONT><FONT style="FONT-SIZE: 10.5pt">R2:R10C7</FONT><FONT style="FONT-SIZE: 10.5pt">。</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">为什么可以这样简写？为什么一个是将后面的</FONT><FONT style="FONT-SIZE: 10.5pt">R2</FONT><FONT style="FONT-SIZE: 10.5pt">省去而另一个是将前面的</FONT><FONT style="FONT-SIZE: 10.5pt">C7</FONT><FONT style="FONT-SIZE: 10.5pt">省去？这样的简写有何规律？在没有官方的解释之前，为了便于大家的理解和记忆，我给出一个我自己的解释思路，请看下面的</FONT><FONT style="FONT-SIZE: 10.5pt">“</FONT><FONT style="FONT-SIZE: 10.5pt">关于引用运算符</FONT><FONT style="FONT-SIZE: 10.5pt">”</FONT><FONT style="FONT-SIZE: 10.5pt">：</FONT></FONT><BR><FONT color=#000000></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><STRONG><FONT color=#000000>关于</FONT><FONT color=blue>引用运算符：</FONT></STRONG></FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><BR><FONT face=微软雅黑 color=#000000><SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=Excel">Excel</SPAN></FONT></FONT><FONT face=微软雅黑><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">中包含了</FONT><FONT style="FONT-SIZE: 10.5pt">3</FONT><FONT style="FONT-SIZE: 10.5pt">种引用运算符，用于表示对单元格的引用，</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">一种是冒号，称为区域运算符，这是最常见的，如</FONT><FONT style="FONT-SIZE: 10.5pt">=<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=SUM">SUM</SPAN>(A2:B10)</FONT><FONT style="FONT-SIZE: 10.5pt">，表示引用冒号两边单元格所围成的矩形区域；</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">一种是逗号，称为联合运算符，如</FONT><FONT style="FONT-SIZE: 10.5pt">=RANK(A1,(A1:A10,C1:C10))</FONT><FONT style="FONT-SIZE: 10.5pt">，表示同时引用逗号两边的两个区域；</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>还有一种是空格，称为</FONT><FONT color=red>交叉运算符</FONT><FONT color=#000000>，表示引用空格两边的两个区域的交集，如</FONT></FONT><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">=SUM(A1:B5 A4:D9)</FONT><FONT style="FONT-SIZE: 10.5pt">即等价于</FONT><FONT style="FONT-SIZE: 10.5pt">=SUM(A4:B5)</FONT><FONT style="FONT-SIZE: 10.5pt">。这个交叉运算符也是我这里要重点讨论的一个使用<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%BC%BC%C7%C9">技巧</SPAN>。</FONT></FONT><BR><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">对于</FONT><FONT style="FONT-SIZE: 10.5pt">G2:J2</FONT><FONT style="FONT-SIZE: 10.5pt">这个单元格区域，如果换一个角度来看，可以看作是</FONT><FONT style="FONT-SIZE: 10.5pt">G:J</FONT><FONT style="FONT-SIZE: 10.5pt">这</FONT><FONT style="FONT-SIZE: 10.5pt">4</FONT><FONT style="FONT-SIZE: 10.5pt">列与第</FONT><FONT style="FONT-SIZE: 10.5pt">2</FONT><FONT style="FONT-SIZE: 10.5pt">行所构成的交叉区域。因此，如果用交叉运算符和</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">样式来引用的话，可以写作：</FONT><FONT style="FONT-SIZE: 10.5pt">R2 C7:C10</FONT><FONT style="FONT-SIZE: 10.5pt">，中间用交叉运算符空格分隔，即表示</FONT><FONT style="FONT-SIZE: 10.5pt">R2</FONT><FONT style="FONT-SIZE: 10.5pt">与</FONT><FONT style="FONT-SIZE: 10.5pt">C7:C10</FONT><FONT style="FONT-SIZE: 10.5pt">这两个区域的交叉区域。</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">因此</FONT><FONT style="FONT-SIZE: 10.5pt">R2C7:<FONT color=black>R2C</FONT>10</FONT><FONT style="FONT-SIZE: 10.5pt">等价于</FONT><FONT style="FONT-SIZE: 10.5pt">(R2 C7:C10)</FONT><FONT style="FONT-SIZE: 10.5pt">，而这个形式与上面的简写形式</FONT><FONT style="FONT-SIZE: 10.5pt">R2C7:C10</FONT><FONT style="FONT-SIZE: 10.5pt">十分相似；</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">同理，</FONT><FONT style="FONT-SIZE: 10.5pt">G2:G10</FONT><FONT style="FONT-SIZE: 10.5pt">可以表示为</FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">R2C7:R10C7</FONT></FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">，等价于</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">(R2:R10 C7)</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">，这个形式与其简写形式</FONT></FONT><FONT color=#190f00><FONT style="FONT-SIZE: 10.5pt">R2:R10C7</FONT></FONT><FONT color=#190f00><FONT style="FONT-SIZE: 10.5pt">也十分相似。</FONT></FONT><FONT color=#190f00><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT color=#190f00><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT color=#190f00><FONT style="FONT-SIZE: 10.5pt">因此，同行或同列的区域引用简写原则可以看作是一次类似<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%BA%CF%B2%A2">合并</SPAN>同类项以后消项的过程：</FONT></FONT><FONT color=#190f00><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>R2C7:<FONT color=black>R2C</FONT>10=R2 C7:C10=R2C7:C10</FONT></FONT><BR><FONT color=black><FONT style="FONT-SIZE: 10.5pt">R2C7:R10C7= R2:R10 C7=R2:R10C7</FONT></FONT><BR><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">交叉运算符同样也可以应用在</FONT><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">引用方式中</FONT><FONT style="FONT-SIZE: 10.5pt">：</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">例如</FONT><FONT style="FONT-SIZE: 10.5pt">(R2 C7:C10)</FONT><FONT style="FONT-SIZE: 10.5pt">如果使用</FONT><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">引用方式</FONT><FONT style="FONT-SIZE: 10.5pt">，</FONT><FONT style="FONT-SIZE: 10.5pt">则可以写作</FONT><FONT style="FONT-SIZE: 10.5pt">：</FONT></FONT></FONT><FONT face=微软雅黑><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>(2:2 G:J)<BR><FONT color=black>(R2:R10 C7)</FONT></FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">如果使用</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">A1</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">引用方式</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">，</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">则可以写作</FONT></FONT><FONT color=black><FONT style="FONT-SIZE: 10.5pt">：</FONT></FONT></FONT><FONT face=微软雅黑><FONT color=black><FONT style="FONT-SIZE: 10.5pt">(G:G 2:10)<BR></FONT></FONT><BR><STRONG><FONT color=blue>多个区域的引用（合并同类项）：</FONT></STRONG><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">以同时引用</FONT><FONT style="FONT-SIZE: 10.5pt">G13:J13</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">G15:J15</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">G17:J17</FONT><FONT style="FONT-SIZE: 10.5pt">这三行区域为例，</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">使用</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">的通常写法是：</FONT></FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><BR><FONT face="微软雅黑 "><FONT color=#000000>R13C7:R13C10,R15C7:R15C10,R17C7:R17C10&nbsp; &nbsp;</FONT></FONT></FONT><FONT face="微软雅黑 "><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>其中的逗号表示联合运算</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>可以引入交叉运算符，简化为：</FONT></FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><BR><FONT face="微软雅黑 "><FONT color=#000000>R13 C7:C10,R15 C7:C10,R17 C7:C10<BR></FONT></FONT></FONT><FONT color=#000000><FONT face="微软雅黑 "><FONT style="FONT-SIZE: 10.5pt">此时，因为三个以逗号分隔的联合区域中，每个区域都与</FONT><FONT style="FONT-SIZE: 10.5pt">C7:C10</FONT><FONT style="FONT-SIZE: 10.5pt">有交叉部分，来做一个类似于合并同类项的变形，可以简化为：</FONT></FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><BR><FONT face="微软雅黑 "><FONT color=#000000>(R13,R15,R17) C7:C10<BR></FONT></FONT></FONT><FONT face="微软雅黑 "><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">将几个行号用逗号相连接表示联合运算，同时外面用括号包围以后，再与</FONT><FONT style="FONT-SIZE: 10.5pt">C7:C10</FONT><FONT style="FONT-SIZE: 10.5pt">区域使用空格进行连接，形成交叉运算关系，得到了我们所需要的三个行区域的同时引用。</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">类似的，使用</FONT><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">引用样式也可以进行合并变形，上述区域的</FONT><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">引用写法为：</FONT><FONT style="FONT-SIZE: 10.5pt">(13:13,15:15,17:17) G:J</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">上面三个区域是水平方向平行的三行，下面来看一下垂直方向平行的三列，实质用法完全一致：</FONT><FONT style="FONT-SIZE: 10.5pt">L13:L20</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">O13:O20</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">P13:P20</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">形式：</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>R13C12:R20C12,R13C14:R20C14,R13C16:R20C16</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">引入交叉运算符，简化为：</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>R13:R20 C12,R13:R20 C14,R13:R20 C16</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">合并同类项，简化为：</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>R13:R20 (C12,C14,C16)</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">引用样式为：</FONT><FONT style="FONT-SIZE: 10.5pt">(L:L,N:N,P:P) 13:20</FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000></FONT></FONT><BR><FONT color=blue><FONT style="FONT-SIZE: 10.5pt"><STRONG>地址引用的应用场合：</STRONG></FONT></FONT><FONT color=blue><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">对于</FONT><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">样式的地址引用，可以直接使用在公式中，例如：</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT>
<DIV class=blockcode>
<P>=SUM((13:13,15:15,17:17) G:J)</P></DIV><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">即表示同时对</FONT><FONT style="FONT-SIZE: 10.5pt">G13:J13</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">G15:J15</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">G17:J17</FONT><FONT style="FONT-SIZE: 10.5pt">三个区域进行<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%C7%F3%BA%CD">求和</SPAN>。</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">对于</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">引用样式，则通常用于</FONT><FONT style="FONT-SIZE: 10.5pt"><SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=INDIRECT">INDIRECT</SPAN></FONT><FONT style="FONT-SIZE: 10.5pt">函数的引用，对于</FONT><FONT style="FONT-SIZE: 10.5pt">INDIRECT</FONT><FONT style="FONT-SIZE: 10.5pt">参数中包含变量的情况，使用简写</FONT><FONT style="FONT-SIZE: 10.5pt">+</FONT><FONT style="FONT-SIZE: 10.5pt">变量参数的方式可以减少大量公式开销。具体案例待以后补充。</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">而对于使用INDIRECT</FONT><FONT style="FONT-SIZE: 10.5pt">+<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=TEXT">TEXT</SPAN></FONT><FONT style="FONT-SIZE: 10.5pt">函数构造引用样式来进行地址引用的场合，也可以用的</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">引用样式及其简写方式，但其中既包含联合又包含交叉的复杂情况不太多见。简单举个例子说明一下应用：</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">要对</FONT><FONT style="FONT-SIZE: 10.5pt">G:I</FONT><FONT style="FONT-SIZE: 10.5pt">三列中的某三个非相邻行进行引用，公式取得三个行号分别为</FONT><FONT style="FONT-SIZE: 10.5pt">aa</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">bb</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">cc</FONT><FONT style="FONT-SIZE: 10.5pt">，加权组合后可以得到</FONT><FONT style="FONT-SIZE: 10.5pt">aa0bb0cc</FONT><FONT style="FONT-SIZE: 10.5pt">一个</FONT><FONT style="FONT-SIZE: 10.5pt">8</FONT><FONT style="FONT-SIZE: 10.5pt">位<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CA%FD%D6%B5">数值</SPAN>，此时使用</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT>
<DIV class=blockcode>
<P>=TEXT(aa0bb0cc,"(R0R000R00,0) C7!:C9")</P></DIV><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">就可以得到</FONT><FONT style="FONT-SIZE: 10.5pt">“</FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000>(R</FONT><FONT color=red>aa</FONT><FONT color=#000000>,R</FONT><FONT color=red>bb</FONT><FONT color=#000000>,R</FONT><FONT color=red>cc</FONT><FONT color=#000000>) C7:C9</FONT></FONT><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">”的</FONT><FONT style="FONT-SIZE: 10.5pt">INDIRECT</FONT><FONT style="FONT-SIZE: 10.5pt">引用参数。其中的</FONT><FONT style="FONT-SIZE: 10.5pt">TEXT</FONT><FONT style="FONT-SIZE: 10.5pt">函数<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B8%F1%CA%BD">格式</SPAN>代码中利用了千分位符来产生表示联合引用的逗号。</FONT><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT><BR><FONT style="FONT-SIZE: 10.5pt"><FONT color=#000000></FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt">除了</FONT><FONT style="FONT-SIZE: 10.5pt">INDIRECT</FONT><FONT style="FONT-SIZE: 10.5pt">函数，</FONT><FONT style="FONT-SIZE: 10.5pt">HYPERLINK</FONT><FONT style="FONT-SIZE: 10.5pt">函数中也可以用到</FONT><FONT style="FONT-SIZE: 10.5pt">A1</FONT><FONT style="FONT-SIZE: 10.5pt">样式和</FONT><FONT style="FONT-SIZE: 10.5pt">R1C1</FONT><FONT style="FONT-SIZE: 10.5pt">样式的引用地址，例如</FONT></FONT><BR><FONT color=#000000><FONT style="FONT-SIZE: 10.5pt"></FONT></FONT>
<DIV class=blockcode>
<P>=HYPERLINK("#r13:r20 (c12,c14,c16)","<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%C1%B4%BD%D3">链接</SPAN>")</P></DIV></FONT><FONT color=#000000>
<P><BR><FONT face="微软雅黑 "><FONT style="FONT-SIZE: 10.5pt">即可产生同时链接到</FONT><FONT style="FONT-SIZE: 10.5pt">L13:L20</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">O13:O20</FONT><FONT style="FONT-SIZE: 10.5pt">、</FONT><FONT style="FONT-SIZE: 10.5pt">P13:P20</FONT><FONT style="FONT-SIZE: 10.5pt">三个区域的超级链接。本帖<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B8%BD%BC%FE">附件</SPAN>中也使用了</FONT><FONT style="FONT-SIZE: 10.5pt">HYPERLINK</FONT><FONT style="FONT-SIZE: 10.5pt">函数便于大家识别所引用的具体区域范围。</FONT></FONT></FONT><FONT style="FONT-SIZE: 10.5pt"><BR><BR></FONT><FONT style="FONT-SIZE: 10.5pt"><FONT face="微软雅黑 "><FONT color=#000000>为了便于理解，可以结合下面这个附件，相信可以更容易明白一些：</FONT></FONT></FONT></P>
<P><A href="http://blog.excelhome.net/attachment.asp?FileID=1794">单元格引用.rar</A></P>]]></description>
</item><item>
<title><![CDATA[福建牛郎岗]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1172.html</link>
<author>chrisfang</author>
<pubDate>2009-9-8 21:53:00</pubDate>
<description><![CDATA[<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82145786037.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82144414274.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82142976279.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82139111930.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82137562699.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82137914811.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82134874807.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82133515911.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-9/82132862640.jpg" border=0> 
<P></P>]]></description>
</item><item>
<title><![CDATA[彻底删除文件]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1165.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:39:00</pubDate>
<description><![CDATA[<DIV>
<DIV>删除文件时，总是放在回收站，其实可以直接彻底删除，提供两个方法：</DIV>
<DIV>1、按&lt;Shift+Delete&gt;</DIV>
<DIV>2、右击桌面的回收站—属性—全局，勾选“删除时不将文件移入回收站，而是彻底删除”。</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[一秒关机]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1164.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:39:00</pubDate>
<description><![CDATA[<DIV>
<DIV>在关机时，总是要等好久，其实可以非常快速关机的，方法是：</DIV>
<DIV>调出任务管理器（Ctrl+Alt+Delete 或 Ctrl+Shift+Esc 或右击任务栏—任务管理器），单击“关机”菜单，按住 Ctrl 键，再单击关机，1 秒就关机了。</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[把 IE 地址栏当计算器使用]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1163.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:38:00</pubDate>
<description><![CDATA[<DIV>在 IE 地址栏中输入：javascript:alert(5*3)，再回车键，就会弹出一个显示计算结果为 15 的对话框，更改括号内的运算式，可以更改计算结果，再按一下 Esc 键，可返回原来的页面。</DIV>]]></description>
</item><item>
<title><![CDATA[快速设置 IE 主页]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1162.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:37:00</pubDate>
<description><![CDATA[<DIV>把地址栏最前面的那个文件图标（“e”）拖到工具栏的“主页”按钮上，就可以快速设置主页。</DIV>]]></description>
</item><item>
<title><![CDATA[快速选中 IE 地址栏]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1161.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:36:00</pubDate>
<description><![CDATA[<DIV>打开网页后，按 &lt;Alt+D&gt; 组合键，就会快速选中网页的地址，方便复制操作。</DIV>]]></description>
</item><item>
<title><![CDATA[隐藏桌面上的系统图标]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1160.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:35:00</pubDate>
<description><![CDATA[<DIV>右击桌面，“属性”—“桌面”选项卡—“自定义桌面”，在“桌面图标”组中勾选要在桌面上显示的图标，其他不显示的取消勾选，再按“确定”按钮。</DIV>]]></description>
</item><item>
<title><![CDATA[隐藏桌面上的所有图标]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1159.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:34:00</pubDate>
<description><![CDATA[<DIV>右击桌面—排列图标—取消显示桌面图标的勾选。</DIV>]]></description>
</item><item>
<title><![CDATA[快速删除 Word 表格中的行]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1158.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:32:00</pubDate>
<description><![CDATA[<DIV>选定 Word 表格中的行，按 Delete 键只清除内容，并不能删除行，我们可以这样操作：选定行，按 &lt;Shift+Delete&gt; 组合键删除。</DIV>]]></description>
</item><item>
<title><![CDATA[在 Word 中输入叠字]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1157.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:32:00</pubDate>
<description><![CDATA[<DIV>要在 Word 中输入叠字，如爸爸，只要输入一个“爸”字，按 &lt;Alt+Enter&gt;组合键，可重复输入“爸”字，输入“<SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'">欢喜”按 &lt;Alt+Enter&gt;组合键，可重复输入“<SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'">欢喜”。</SPAN></SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[在 Word 输入省略号]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1156.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:31:00</pubDate>
<description><![CDATA[<DIV>在 Word 中，不同的输入法输入省略号方法各不相同，但可以有通用的方法。</DIV>
<DIV><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'">按“</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Ctrl+Alt+.</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'">”组合键可快速输入省略号（<SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">…），每按一次输入 3 点。</SPAN></SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[在 Word 轻松输入汉字拼音]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1155.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:30:00</pubDate>
<description><![CDATA[<DIV>
<DIV><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt">在制作语文考卷时，经常要输入汉字拼音，用下面的方法可以快速输入汉字拼音。</SPAN></DIV>
<DIV><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt">如输入“中国”的拼音，选定“中国”，<SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'">再单击“格式→中文版式→拼音指南”选项，在“拼音指南”对话框中单击“组合”按钮，在“拼音文字”框中选择“zhōngguó”，按“Ctrl+C”复制，再粘贴到 Word 文本中。</SPAN></SPAN></DIV></DIV>]]></description>
</item><item>
<title><![CDATA[为记事本文件添加每次的打开时间]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1154.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:29:00</pubDate>
<description><![CDATA[<DIV>
<DIV>记事本可以自动添加每次打开文件的时间，可能许多人并不知道这个功能。操作步骤如下：</DIV>
<br/>
<DIV>打开记事本，在第1行输入“.LOG”，保存该文档，以后每次打开该记事本，记事本的最后一行将自动写入当前时间和日期。</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[更改文件夹图标]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1153.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:28:00</pubDate>
<description><![CDATA[<TABLE cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD class=l_text>
<DIV>在同一目录下，如果文件夹很多的话，有时候要找某个文件夹，比较费时间，其实，我们可以为常用文件夹设置不同的醒目的图标，方便查找，方法如下：</DIV>
<br/>
<DIV>右击文件夹—属性—“自定义”标签—在“文件夹图标”组中，单击“更改图标”按钮，选择一个比较醒目的图标，再单击两次“确定”按钮，常用文件夹就非常醒目，容易找出来了。</DIV></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[取消 Windows XP 的菜单延迟]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1152.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:27:00</pubDate>
<description><![CDATA[<DIV>
<DIV>Windows XP 中的在打开菜单时，会有滑出的效果，这虽然可以达到视觉上的真实感，但也会延缓打开菜单的速度，要取消这个功能，可以按下面的方法操作：</DIV>
<DIV>打开注册表编辑器（运行 regedit.exe),HKEY_CURRENT_USER\Control Panel\Desktop 顶下打到 “MenuShowDelay”，双击，把“数值数据”改为0，就可以取消菜单延迟的效果。</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[运行“.”的技巧]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1151.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:25:00</pubDate>
<description><![CDATA[<DIV>
<DIV>开始—运行：“.”</DIV>
<DIV>打开：C:\Documents and Settings\用户名</DIV>
<DIV>开始—运行：“..”</DIV>
<DIV>打开：C:\Documents and Settings</DIV>
<DIV>开始—运行：“...”</DIV>
<DIV>打开：我的电脑</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[清除无法删除的打印任务]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1150.html</link>
<author>gvntw</author>
<pubDate>2009-8-31 10:24:00</pubDate>
<description><![CDATA[<DIV>
<DIV>在删除打印任务时，经常打印机出现删除字样，等了好久，却无法取消打印任务，可用以下方法解决：</DIV>
<DIV>我的电脑→管理→服务和应用程序→服务→Print Spooler，点击左侧“停止此服务”，停止打印机服务；<BR>开始→ 运行，在“运行”→spool，打开“spool”文件夹， 在“spool”文件夹中，双击打开“PRINTERS”文件夹，删除 “PRINTERS”文件夹中的所有文件； <BR>再回到 “服务”窗口，点击左侧 “启动此服务”，重新启动打印服务。</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[出轨女人的独白：和别人老公在床上的感觉]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1149.html</link>
<author>gvntw</author>
<pubDate>2009-8-30 14:39:00</pubDate>
<description><![CDATA[<DIV class=resizeimg4>
<DIV>我终于有了一个不是我老公的男人! <BR>那晚，他折腾我足足一个小时,终于倦极而眠。</DIV>
<DIV>我却怎么也睡不着了,时针指在两点上,是激情之后最难熬的深夜。<BR>我扭亮台灯,在柔和的灯光下,打量着我的枕边人。</DIV>
<DIV><BR>见过他的人都说是十成的帅哥,尤其是那一双总是含笑的眼睛有着所向披靡的魅力。可我心底里却更喜欢他熟睡的样子,安详得近乎于圣洁,尤其是当他突然在梦里笑一下或皱皱眉的时候,那突如其来的甜蜜和伤感让我心醉又心碎。<BR>我不禁轻轻地在他的额上吻了一下,他居然抬手拂了一下额头,好象不高兴我打扰了他的梦一样。我又好笑又好气,偏偏要打扰他一下。我轻轻抚摸他的身体,那种毫无瑕疵的锦缎也不能比拟的光滑手感,让我怀疑这是男性的躯体,既使是用“肤如凝脂”这种形容女孩子的词来形容也不为过,皮肤之下,是匀称的极富弹性的骨肉,这么完美的躯体我想我一辈子也不可能再遇到第二个。) <BR>想到这儿,就想到早晚他会离开我,投入另一个女人的怀抱,这使我无奈而神伤,下意识地搂住了他。 <BR>梦中的他感到了我的拥抱,竟然配合地把脸深深地偎在我的胸口,那种温暖和贴服使我心底荡漾着无比的幸福,泪水不经意地打湿了枕头.<BR>我这样和他依偎着,慢慢地朦胧起来。<BR>突然,他使劲儿地在我的怀里挣扎一下,并放声大哭起来。<BR><BR>我一下从被窝里坐起来,抱起他：儿子,我的小祖宗,又尿了, 求你让娘睡个安稳觉吧。</DIV></DIV>]]></description>
</item><item>
<title><![CDATA[长滩岛（Barocay）视觉盛宴]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1147.html</link>
<author>chrisfang</author>
<pubDate>2009-8-20 21:27:00</pubDate>
<description><![CDATA[<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/17230590289.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/17236771494.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/172336394224.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/172344339237.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201928759052.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/18657734937.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201912272289.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201940838401.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201943356568.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201931492126.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/172313270422.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/172330422500.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/172324347944.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201936656289.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201945749934.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/18711862008.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/18720454360.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201953634838.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/201949627532.jpg" border=0> 
<P></P><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.excelhome.net/UploadFiles/2009-8/1872452122.jpg" border=0>]]></description>
</item><item>
<title><![CDATA[Datedif函数全面解析及BUG分析]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1120.html</link>
<author>chrisfang</author>
<pubDate>2009-7-27 13:26:00</pubDate>
<description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">从不同的角度来看，Datedif<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%BA%AF%CA%FD">函数</SPAN>都是一个比较特殊的函数：<BR><SPAN style="FONT-FAMILY: 微软雅黑">1）在多个<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=Excel">Excel</SPAN>版本中，Datedif函数都是隐藏函数，没有出现在函数列表中，Excel2007中的<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B9%AB%CA%BD">公式</SPAN><SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%D7%D4%B6%AF">自动</SPAN>完成功能也不会自动生成这个函数名称，甚至在多个版本中的帮助文件中都找不到这个函数的踪影。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">2）在多个版本中，Datedif函数的算法发生了改变，据我目前所知，Excel2003 SP3、Excel2007 SP1、Excel2007 SP2 以及还未正式上市的Excel 2010中，这个函数的运算结果都有所不同。更早期的版本尚无研究。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">3）<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B9%A4%D7%F7%B1%ED">工作表</SPAN>函数Datedif与VBA中的函数Datediff也不相同。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">本文将主要以Excel 2007 SP2版本中的Datedif函数运算作为研究对象，并附上Excel 2003 SP3的相应结果作为参考。请使用正确的版本打开附件，否则将会出现不同的运算结果。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">Excel早期版本的帮助文件中，对Datedif函数的解释如下：</SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><SPAN style="FONT-FAMILY: 微软雅黑"><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt"><STRONG>DATEDIF(start_date,end_date,unit)</STRONG></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><BR></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">参数<SPAN lang=EN-US>start_date</SPAN>代表时间段内的第一个</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt">日期</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">或起始日期。</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">参数<SPAN lang=EN-US>end_date</SPAN>代表时间段内的最后一个日期或结束日期。</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">参数<SPAN lang=EN-US>unit</SPAN>为所需信息的返回时间单位</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt">代码</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 'Courier New'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">。各代码对应的含义如下：</SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"y"——时间段中的整年数。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"m"——时间段中的整月数。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"d"——时间段中的天数。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"md"——start_date与end_date日期中天数的差。忽略日期中的月和年。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"ym"——start_date与end_date日期中月数的差。忽略日期中的日和年。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"yd"——start_date与end_date日期中天数的差。忽略日期中的年。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"></SPAN>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">这6个unit参数看上去极其简单，无非就是年月日的差值运算，但其实里面包含了许多玄机，下面将针对这6种unit代码分别进行详解：<BR><SPAN style="FONT-FAMILY: 微软雅黑">以下假定start_date存放于A2<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B5%A5%D4%AA%B8%F1">单元格</SPAN>内，end_date存放于B2单元格内</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"><SPAN style="COLOR: #000000">1，</SPAN><STRONG><SPAN style="COLOR: #0000ff">=</SPAN><SPAN style="COLOR: #0000ff">Datedif(A2,B2,"Y")</SPAN></STRONG></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数含义为返回时间段内的整年数，</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">1）所谓“整年”的判断包含了两个日期值（m-d）的大小判断，假定A2与B2相差一年，如果B2的日期值小于A2的日期值，则不满一整年；如果B2的日期值大于等于A2的日期值，则可以记为一整年。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">2）对于包含闰年的情况，不影响日期值大小的判断，例如A2为闰年的2月29日，则B2为闰年的2月29日及以后或非闰年的3月1日及以后都可以判断为大于等于A2日期。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">综合以上算法解释，这个参数的算法可以表示为以下的公式：</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑">=YEAR(B2)-YEAR(A2)-1+(DATE(YEAR(B2),MONTH(A2),DAY(A2))&lt;=B2)</SPAN></STRONG><BR><SPAN style="COLOR: #000000; FONT-FAMILY: 微软雅黑">或</SPAN><BR><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"><STRONG>=YEAR(B2)-YEAR(A2)-1+(A2&lt;=DATE(YEAR(A2),MONTH(B2),DAY(B2)))</STRONG></SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"><SPAN style="COLOR: #000000">2，</SPAN><STRONG><SPAN style="COLOR: #0000ff">=</SPAN><SPAN style="COLOR: #0000ff">Datedif(A2,B2,"M")</SPAN></STRONG></SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数含义为返回时间段内的整月数，</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">要判断整月数，也是与A2、B2的所在月份及日期相关。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数的算法为：将B2、A2相减得到的天数记为Days1，从A2开始到B2的前一个月的所有月份的天数和值记为Days2，如果Days1大于等于Days2，则满足最后一个月的整月<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CC%F5%BC%FE">条件</SPAN>，否则则不足最后一个月的整月。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">换言之，使用此参数时，首先计算前后日期之间的差值，然后以起始月到(中止月-1)之间的整月天数作为计算“整月”的依据，差值大于或等于整月天数的，函数结果就是（中止月-起始月）；如果差值小于整月天数，函数结果就是（中止月-起始月-1）。 </SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">综合以上算法解释，这个参数的算法可以表示为以下的公式：</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑">=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)-(B2-A2&lt;(TEXT(B2,"yyyy-m-\1")-TEXT(A2,"yyyy-m-\1")))*1</SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">关于此参数算法的讨论，可参考以前的一个老帖：</SPAN><A href="http://club.excelhome.net/viewthread.php?tid=165589" target=_blank><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 微软雅黑">http://club.excelhome.net/viewthread.php?tid=165589</SPAN></A><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"><SPAN style="COLOR: #000000">3，</SPAN><STRONG><SPAN style="COLOR: #0000ff">=</SPAN><SPAN style="COLOR: #0000ff">Datedif(A2,B2,"D")</SPAN></STRONG></SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数含义为返回时间段内的天数，</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">这个参数算法最简单，实质就是两个Date相减得到的天数差，其算法可以表示为以下的公式：</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑">=B2-A2</SPAN></STRONG><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"><SPAN style="COLOR: #000000">4，</SPAN><STRONG><SPAN style="COLOR: #0000ff">=</SPAN><SPAN style="COLOR: #0000ff">Datedif(A2,B2,"MD")</SPAN></STRONG></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数含义为返回时间段内的天数，忽略月和年。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">虽然说“忽略”月和年，但实际上当B2的day小于A2的day时，两者的日期差为负数，需要借位相减才能得到正数。如何借位，向谁借位就涉及到了两个日期的所在月份及其年份。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数算法包含以下几部分：</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">1）当B2的day大于等于A2的day时，可直接将两者的day相减得到结果。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">例如A2为2003年3月4日，B2为2004年1月9日，其中的B2的day为9，A2的day为4，则函数结果为9-4=5。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">2）当B2的day小于A2的day时，以B2所在日期作为基准，将B2减去<SPAN style="COLOR: #0000ff">Date(B2所在年份、B2的前一个月份、A2的day)</SPAN>所得到的差值为结果。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">例如A2为2003年3月4日，B2为2004年2月3日，则将B2减去2004年1月4日的天数差作为函数结果。假如B2的月份为1月，则其前一个月份为前一年的12月。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">3）此参数在Excel 2007 SP2版本中包含bug，当满足上面第二个条件且B2日期为闰年的1月份日期时，函数结果会偏大164。这个bug在Excel2003 SP3版本中不存在，但在目前尚未发布的Excel 2010中仍有这个问题存在，只不过那个版本中的差值为113。这个莫名其妙的数值如何出现的，目前暂时没搞清楚。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">4）此参数包含的另一个问题可能不能算bug，但在各个版本中都存在，由于第二条算法的原因，当A2的day为29、30、31且B2的月份为3月份时，由于B2的前一个月份即2月份中没有29号、30号、31号，Date(B2所在年份、<SPAN style="COLOR: #0000ff">B2的前一个月份</SPAN>、A2的day)会由Excel自动将这样的date<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%D7%AA%BB%BB">转换</SPAN>为3月1日、3月2日、3月3日，由此产生误差会出现0和负数。对于这样一个计算两个日期差的函数来说，出现负数好像有点不太合理。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">例如，A2日期为2003年5月31日，B2日期为2005年3月1日，date(2005,2,31)=2005年3月3日，因此B2与此日期相减得到结果为-2。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">基于第4点的问题，个人认为有以下两种算法可能会更合理一些：</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">I)当day(B2)&lt;day(A2)时，将B2与其当月1日相减+A2的月末与A2相减+1，用公式来表达就是：</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">=IF(DAY(B2)-DAY(A2)&gt;=0,DAY(B2)-DAY(A2),B2-TEXT(B2,"yyyy-m-\1")+DATE(YEAR(A2),MONTH(A2)+1,1)-A2)</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">II)当day(B2)&lt;day(A2)时，将B2与Date(B2所在年份、<SPAN style="COLOR: #0000ff">B2的前一个月份</SPAN>、A2的day)相减，当差值小于零时取零作为结果。用公式来表达就是：</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">=IF(DAY(B2)-DAY(A2)&gt;=0,DAY(B2)-DAY(A2),MAX(B2-DATE(YEAR(B2),MONTH(B2)-1,DAY(A2)),0))</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">当然，这两种方法只是本人的建议，仅供参考。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">综合以上算法解释，这个参数在不够减的时候借位是以<SPAN style="COLOR: #0000ff">B2</SPAN>为基准的，这个参数的算法可以表示为以下的公式：</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑">=IF(DAY(B2)-DAY(A2)&gt;=0,DAY(B2)-DAY(A2),B2-DATE(YEAR(B2),MONTH(B2)-1,DAY(A2))+<SPAN style="TEXT-DECORATION: underline">164*(TEXT(DATE(YEAR(B2),MONTH(B2)+1,29),"m-d")="2-29")</SPAN>)</SPAN></STRONG><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑">其中包含下划线的部分是对上面第三点中提到的闰年bug的模拟。如果要排除闰年的错误，则可以使用下面的公式：</SPAN><BR><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"><STRONG>=IF(DAY(B2)-DAY(A2)&gt;=0,DAY(B2)-DAY(A2),B2-DATE(YEAR(B2),MONTH(B2)-1,DAY(A2)))</STRONG></SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑">关于这个参数算法的讨论，还在这个帖子中进行过：<A href="http://club.excelhome.net/viewthread.php?tid=357741" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #190f00; FONT-FAMILY: 微软雅黑">http://club.excelhome.net/viewthread.php?tid=357741</SPAN></A></SPAN><BR><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"><SPAN style="COLOR: #000000">5，</SPAN><STRONG><SPAN style="COLOR: #0000ff">=</SPAN><SPAN style="COLOR: #0000ff">Datedif(A2,B2,"YM")</SPAN></STRONG></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数含义为返回时间段内的整月数，忽略日和年。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">这里提到了“忽略”日，但实际与参数“M”一样，还是有关日期的相关计算。这个参数的算法实际上与参数“M”的算法一致，只是忽略其中年份差中所包含的月份数。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">其算法可以表示为以下的公式，其中<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%D2%FD%D3%C3">引用</SPAN>了Datedif函数的“M”参数方便公式编写：</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑">=MOD(DATEDIF(A2,B2,"m"),12)</SPAN></STRONG><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑"><SPAN style="COLOR: #000000">6，</SPAN><STRONG><SPAN style="COLOR: #0000ff">=</SPAN><SPAN style="COLOR: #0000ff">Datedif(A2,B2,"YD")</SPAN></STRONG></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">此参数含义为返回时间段内的天数，忽略其中的年。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">这个参数的算法比较复杂，情况比较多，简单地说包括以下几个重点：</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">1）当B2月份为3月份且B2的day大于等于A2的day时，两者相减是以A2的所在年份为基准的（如果够减，则以[A2的年份&amp;B2的日期]与A2相减；如果不够减，则以[A2年份+1&amp;B2的日期]与A2相减）</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">2）当B2月份为3月份且B2的day小于A2的day时，两者相减是以B2的所在年份为基准的（如果够减，则以B2与[B2的年份&amp;A2的日期]相减；如果不够减，则以B2与[B2年份-1&amp;A2的日期]相减)</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">3）当B2的月份不是3月份时，两者相减是以A2的所在年份为基准的，相减方式同第一条。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">4）当B2的day小于A2的day，且B2日期是闰年的1月份日期，且B2与A2日期不直接够减时，存在着与“MD”参数类似的闰年bug，函数结果偏大164。这个bug在Excel2003的SP3中不存在，但在Excel 2010中依旧存在，且差值变为113。</SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑"></SPAN><BR><SPAN style="FONT-FAMILY: 微软雅黑">综合以上算法解释，这个参数的算法可以表示为以下的公式（上面的文字不好理解，如果能看懂下面的公式则比较容易理解上述算法）：</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑">=IF(--(TEXT(B2,"!0!0-m-d"))&gt;=--(TEXT(A2,"!0!0-m-d")),IF((DAY(B2)&lt;DAY(A2))*(MONTH(B2)=3),B2-DATE(YEAR(B2),MONTH(A2),DAY(A2)),DATE(YEAR(A2),MONTH(B2),DAY(B2))-A2),IF((DAY(B2)&lt;DAY(A2))*(MONTH(B2)=3),B2-DATE(YEAR(B2)-1,MONTH(A2),DAY(A2)),DATE(YEAR(A2)+1,MONTH(B2),DAY(B2))-A2<SPAN style="TEXT-DECORATION: underline">+164*(TEXT(DATE(YEAR(B2),MONTH(B2)+1,29),"m-d")="2-29")*(DAY(B2)&lt;DAY(A2))</SPAN>))</SPAN></STRONG></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><STRONG><SPAN style="COLOR: #0000ff; FONT-FAMILY: 微软雅黑"></SPAN></STRONG><BR><SPAN style="FONT-FAMILY: 微软雅黑">其中包含下划线的部分为闰年bug的模拟，如果希望排除闰年的错误，可以将这部分内容去除。</SPAN><BR><BR><SPAN style="FONT-FAMILY: 微软雅黑">以上分析了6个参数详细算法含义，由于无法得到详细的内部运算代码，因此以上分析结论全部来源于Datedif函数公式的黑箱测试。欢迎有兴趣的朋友继续测试和分析。以下提供附件：</SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><SPAN style="FONT-FAMILY: 微软雅黑">注意使用相应版本的Excel打开附件</SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><SPAN style="FONT-FAMILY: 微软雅黑"><A href="http://blog.excelhome.net/attachment.asp?FileID=1711">附件.rar</A></SPAN><BR></P></SPAN><SPAN lang=EN-US style="http://blog.excelhome.net/FONT-SIZE: 12pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">在论坛中查看此帖：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><A href="http://club.excelhome.net/thread-463826-1-1.html"><SPAN style="http://blog.excelhome.net/mso-bidi-font-size: 12.0pt">http://club.excelhome.net/thread-463826-1-1.html</SPAN></A></SPAN></P><BR>]]></description>
</item><item>
<title><![CDATA[如何使用工作表中Frame对象中的控件事件]]></title>
<link>http://blog.excelhome.net/user1/qingfeng/1118.html</link>
<author>qingfeng</author>
<pubDate>2009-7-27 9:54:00</pubDate>
<description><![CDATA[<P>通常时候，都可以不必要在工作表中使用框架控件，因为工作表框架控件中的控件常规操作无法应用事件，但是事实上也是可以使用控件事件的，只是需要应用到类模块。</P>
<P>以下为一个简单的示例，演示如何使用工作表框架控件中的控件事件。</P>
<P>示例文件：</P><A href="http://blog.excelhome.net/attachment.asp?FileID=1707">工作表中Frame对象中的控件如何使用事件.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[用户窗体托盘程序]]></title>
<link>http://blog.excelhome.net/user1/qingfeng/1117.html</link>
<author>qingfeng</author>
<pubDate>2009-7-26 11:51:00</pubDate>
<description><![CDATA[<P>本示例实现将用户窗体显示为系统托盘图标，并在托盘图标上实现左键双击还原用户窗体及右键显示快捷菜单的功能。</P>
<P>显示用户窗体</P>
<P><IMG src="http://blog.excelhome.net/user1/qingfeng/upload/261155919563.jpg"></P>
<P>显示托盘图标<BR><IMG src="http://blog.excelhome.net/user1/qingfeng/upload/261155773829.jpg"></P>
<P>托盘图标右击显示快捷菜单<BR><BR><IMG src="http://blog.excelhome.net/user1/qingfeng/upload/261155252638.jpg"></P>
<P><BR>&nbsp;示例文件</P><A href="http://blog.excelhome.net/attachment.asp?FileID=1706">Shell_NotifyIcon.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[命令栏图标（FaceID)查看器]]></title>
<link>http://blog.excelhome.net/user1/qingfeng/1115.html</link>
<author>qingfeng</author>
<pubDate>2009-7-12 15:33:00</pubDate>
<description><![CDATA[<P>Excel提供了很多的命令栏图标，用户在自定义命令栏时，可以为命令栏按钮选择添加合适的图标；不仅如此，用户还可以把这些内置图标作为图片，提供给其它有Picture属性的控件，如Image、Label、CommandButton等，本附件提供了浏览Excel内置图标的功能。</P>
<DIV align=center forimg="1">
<P><IMG class=blogimg src="http://hiphotos.baidu.com/excelvba/pic/item/f0c25822b44a0b759922ed29.jpg" border=0 _fcksavedurl="http://hiphotos.baidu.com/excelvba/pic/item/f0c25822b44a0b759922ed29.jpg" small="http://blog.excelhome.net/0"></P>
<P>附件下载：<A href="http://blog.excelhome.net/attachment.asp?FileID=1701">FaceIDBrowser.rar</A><BR></P></DIV>]]></description>
</item><item>
<title><![CDATA[Excel 2007 简易教程下载]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1114.html</link>
<author>gvntw</author>
<pubDate>2009-6-12 13:20:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 18pt"><A title="Excel 2007 简易教程下载" href="http://www.exceltip.cn/thread-410-1-1-9.html" target=_blank>Excel 2007 简易教程下载</A></SPAN></P>
<P>附件下载：</P><A href="http://blog.excelhome.net/attachment.asp?FileID=1700">跟我学Excel2007简易教程1－750.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[学习 Excel 技巧]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1113.html</link>
<author>gvntw</author>
<pubDate>2009-5-11 11:00:00</pubDate>
<description><![CDATA[<P>Excel技巧网</P>
<P><A href="http://www.exceltip.cn/?fromuid=9">http://www.exceltip.cn/?fromuid=9</A></P>]]></description>
</item><item>
<title><![CDATA[Microsoft Money 2009 简体中文版 即将问世]]></title>
<link>http://blog.excelhome.net/user1/Rowen/1112.html</link>
<author>rowen</author>
<pubDate>2009-5-2 9:38:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 15px"><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: Arial"><SPAN style="FONT-FAMILY: Arial"><SPAN style="FONT-SIZE: 15px"><SPAN style="FONT-WEIGHT: bold; language: en-US">转载自:http://www.mscbic.com/about/article.aspx?id=179</SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 15px"><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: Arial"><STRONG><SPAN style="FONT-FAMILY: Arial"><SPAN style="FONT-SIZE: 15px"><SPAN style="FONT-WEIGHT: bold; language: en-US">Microsoft </SPAN><SPAN style="FONT-WEIGHT: bold; language: en-US">Money</SPAN></SPAN></SPAN> </STRONG><SPAN style="FONT-FAMILY: 宋体"><STRONG>2009 简体中文版<BR><SPAN style="FONT-SIZE: 10pt">挣得清楚 花得明白 规划理想未来！<BR></SPAN></STRONG></SPAN></SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><STRONG><BR></STRONG><SPAN style="LINE-HEIGHT: 200%"><SPAN style="FONT-FAMILY: Arial">Microsoft<SUP> </SUP>Money</SPAN> 2009简体中文版是微软专门针对中国用户量身定制且功能强大的个人理财软件。该软件的第一个版本于1991年在美国成功上市，并陆续推出新版远销欧洲和日本，并已成为全球最受欢迎的个人理财软件之一。</SPAN><BR></SPAN></SPAN></SPAN>&nbsp; <BR></P>
<P>
<TABLE style="WIDTH: 771px; HEIGHT: 414px" height=414 cellSpacing=1 cellPadding=1 width=771 border=0>
<TBODY>
<TR>
<TD><IMG height=397 alt="" src="http://www.mscbic.com/BIC.UI/Upload/image/LIcense/Money_Katongtu.jpg" width=450></TD>
<TD>
<P><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: zh-CN">从未用过理财软件？试一下</SPAN><SPAN style="FONT-FAMILY: Arial"><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: en-US">Money</SPAN></SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: zh-CN">吧！</SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: zh-CN"><BR></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt"><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="COLOR: black; language: zh-CN"><BR></SPAN></SPAN></SPAN>
<TABLE style="WIDTH: 299px; HEIGHT: 87px" height=87 cellSpacing=1 cellPadding=1 width=299 border=0>
<TBODY>
<TR>
<TD><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="COLOR: black; language: zh-CN">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">只需一次简单安装，便可为您永远节省理财所花时<SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">间</SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; language: zh-CN">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">特有的理财模块与功能，助您轻松掌控财务状况，<SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; language: zh-CN">规</SPAN></SPAN></SPAN></SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">&nbsp;</SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; language: zh-CN">划理想未来</SPAN></SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; language: en-US">? </SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; language: en-US">Money</SPAN><SPAN style="COLOR: black; language: zh-CN">还有更多功能等待您的发掘与体验！</SPAN></SPAN></SPAN></TD></TR></TBODY></TABLE></SPAN></P>
<P>&nbsp;</P>
<P><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: zh-CN">用过其它理财软件？试一下</SPAN><SPAN style="FONT-FAMILY: Arial"><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: en-US">Money</SPAN></SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black; language: zh-CN">吧！</SPAN></SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体"><BR></SPAN></SPAN></P>
<TABLE height=139 cellSpacing=1 cellPadding=1 width=287 border=0>
<TBODY>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="LINE-HEIGHT: 150%">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">全新的理财观念，带您进入全新的理财视界</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; DIRECTION: ltr; unicode-bidi: embed; language: x-none">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">友好美观的操作界面，为您带来全新的理财体验</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; DIRECTION: ltr; unicode-bidi: embed; language: x-none">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">功能全面的理财模块更能全方位满足您的理财需求</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; DIRECTION: ltr; unicode-bidi: embed; language: x-none">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">信息丰富的财务报表还可轻松进行个性化定制</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; DIRECTION: ltr; unicode-bidi: embed; language: x-none">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="COLOR: black; DIRECTION: ltr; unicode-bidi: embed; language: x-none">同步发行的Money手机版理财软件可实现与PC版软</SPAN></SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">&nbsp;</SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">件的数据同步，让您随时随地轻松理财！</SPAN></SPAN></TD></TR></TBODY></TABLE>
<P>&nbsp;</P></TD></TR></TBODY></TABLE></P>
<P>&nbsp;</P>
<TABLE style="WIDTH: 783px; HEIGHT: 393px" height=393 cellSpacing=1 cellPadding=1 width=783 border=0>
<TBODY>
<TR>
<TD>
<DIV>
<DIV><SPAN style="FONT-SIZE: 12px"><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体"><STRONG>让您挣得清楚、花得明白！</STRONG></SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">&nbsp;<BR><BR></SPAN></SPAN></SPAN></DIV>
<TABLE height=140 cellSpacing=1 cellPadding=1 width=415 border=0>
<TBODY>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="LINE-HEIGHT: 150%">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">帐户集中：所有帐户信息集中在同一位置管理，便于查看与管理</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">? </SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">收支记账：系统登记账目，让记账不再枯燥</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">? </SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">账目追踪：预测现金流并追踪消费记录</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">?</SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">定期支付：设置定期支付计划，实现支付提醒或在线支付</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">?</SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">报表功能：可生成各种财务报表，让财务状况一目了然</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">? </SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">投资管理：优化投资组合，更新市场信息，实现投资收益最大化</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">? </SPAN></SPAN></TD>
<TD><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">等等</SPAN></SPAN></TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><STRONG>助您规划理想未来！</STRONG><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体">&nbsp;<SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><BR></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<TABLE style="WIDTH: 414px; HEIGHT: 90px" height=90 cellSpacing=1 cellPadding=1 width=414 border=0>
<TBODY>
<TR>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px"><SPAN style="LINE-HEIGHT: 150%">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px">预算管理：提前制定消费计划，有效避免费用超支</SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px">? </SPAN></SPAN></TD>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px">财务规划：国际领先的财务规划理念，助您规划退休后生活<SPAN style="LINE-HEIGHT: 150%">费用、教育资</SPAN></SPAN></SPAN></TD></TR>
<TR>
<TD>&nbsp;</TD>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 金或<SPAN style="LINE-HEIGHT: 150%">子女养育费等，从而规划理想未来</SPAN></SPAN></SPAN></TD></TR>
<TR>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px"><SPAN style="LINE-HEIGHT: 150%">?</SPAN></SPAN></SPAN></TD>
<TD><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px"><SPAN style="LINE-HEIGHT: 150%">随时获取财经快讯、资讯及理财服务</SPAN></SPAN></SPAN></TD></TR></TBODY></TABLE></DIV>
<P>&nbsp;</P></TD>
<TD style="TEXT-ALIGN: left">
<P><A href="http://www.mscbic.com/BIC.UI/Upload/image/Money_Baobiao.jpg" target=_blank><IMG height=380 alt=点击查看大图 src="http://www.mscbic.com/BIC.UI/Upload/image/LIcense/%E6%8A%A5%E8%A1%A8%E5%9B%BE(2).jpg" width=350 border=0></A><BR><SPAN style="http://blog.excelhome.net/LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-SIZE: 12px">三十多种财务报表可根据个人喜好进行个性化定制，让您的财务状<BR>况一目了然！</SPAN></SPAN></SPAN></P></TD></TR></TBODY></TABLE>
<P><SPAN style="LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-FAMILY: Arial"><SPAN style="COLOR: black; language: en-US">Microsoft Money 2009</SPAN></SPAN><SPAN style="COLOR: black; language: zh-CN">简体中文版将通过国内多种在线平台、增值销售商及合作伙伴进行推广。</SPAN></SPAN></SPAN></SPAN><BR></P>]]></description>
</item><item>
<title><![CDATA[终于找到曾经写的这篇了。]]></title>
<link>http://blog.excelhome.net/user1/guoguo/1111.html</link>
<author>guoguo</author>
<pubDate>2009-4-16 14:47:00</pubDate>
<description><![CDATA[<SPAN id=Repeater1__ctl1_LblContent>———<BR><BR>&nbsp;&nbsp;&nbsp;流香真想将无香制作成一个随时任流香调动的函数：<BR><B>Function&nbsp;<SPAN style="COLOR: #ff0000">无香</SPAN>(<SPAN style="COLOR: #008000">流香</SPAN>&nbsp;As&nbsp;Range,&nbsp;ab&nbsp;As&nbsp;Integer)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.Volatile<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">无香</SPAN>&nbsp;=&nbsp;Application.VLookup(<SPAN style="COLOR: #008000">流香</SPAN>,&nbsp;Range("<SPAN style="COLOR: #008b8b">心径</SPAN>“),&nbsp;ab,&nbsp;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function</B><BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;于是无香永远被包围在这里，再也逃不出去；当流香想无香的时候：<BR><B>Private&nbsp;Sub&nbsp;ComboBox1_Click()<BR>&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;ActiveCell.Column&nbsp;=&nbsp;<SPAN style="COLOR: #d2691e">我想你</SPAN>&nbsp;Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveCell.FormulaR1C1&nbsp;=&nbsp;ComboBox1.Text<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveCell.Activate<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub</B><BR><BR>&nbsp;&nbsp;&nbsp;流香就点击一下，然后无香就随着vlookup出现：<BR><B>Private&nbsp;Sub&nbsp;worksheet_change(ByVal&nbsp;target&nbsp;As&nbsp;Range)<BR>&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;target.Column&nbsp;=&nbsp;<SPAN style="COLOR: #b8860b">我想你</SPAN>&nbsp;Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.Offset(0,&nbsp;1)&nbsp;=&nbsp;心径(target,&nbsp;2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<BR>&nbsp;&nbsp;End&nbsp;Sub</B><BR><BR>&nbsp;&nbsp;&nbsp;但是，得到这些的首要条件，却是要先要将无香定义在流香的心中，而流香的心太狭隘，怕把无香给闷坏，而让无香累得看见流香时就想逃……<BR><BR>&nbsp;&nbsp;&nbsp;为什么做任何事情都得有个条件呢？IF（人不累，经历充沛，IF（大度，幸福，IF（太阳，光明，IF（黑暗，犯罪，IF（伤心，落泪，IF（想念，心痛，IF（网络，恋）））））））；让我想起以前，没有网络的日子。通宵的玩电视游戏机，想着那时的快乐，那么简单，如今更多可口的游戏摆在眼前，人却心意懒臃，毫无兴致；想到玩星际时的猖狂，现在却找不到痴迷的借口；实在不喜欢这种醒后的感觉如新疆早晨的六月天空，那么干净、那么清朗，可是我找不回来睡意朦胧的错觉……<BR><BR>&nbsp;&nbsp;&nbsp;当历史事件又重演的时候，我找不出来我能生气的理由，却也搜索不到我再返回去找你的立场。我一直缺乏的就是自己的主场，我站在哪里？我属于哪里？呵呵，怎么好象又找不到自己似的。其实我就坐在电脑前，茫然的听着一个网友絮絮叨叨的讲着他的苦恼、他的无助、他的张狂、他的生活琐事，这是一个男人。既然一个男人都能对我如此的唠叨，我作为一个女子，更有地位罗嗦你了。可是，我发现，我还是做不到，当你漠视的眼神扫过我时，所带来的寒意。冬天了呢……<BR><BR>&nbsp;&nbsp;&nbsp;明天就是冬至了，广州这边的节日真多，中秋拜神、重阳登山、冬至过节、春节前有个小年、正月15……我记不清了，发现自己的脑袋开始生锈，不听自己的使唤，它们自己转动着而不给我主人一丁点提示，让我在这里动弹不得。零件开始罢工，整个机器还能开动吗？真是小瞧了一颗螺丝帽，难怪记得有人愿意做一颗小小的螺丝钉呢~<BR><BR>&nbsp;&nbsp;&nbsp;一直到现在，我都没有走出给我心境染上<A href="http://union2.chinagames.net/bbs/nr.aspx?id=2035578&amp;b=92&amp;rp=1&amp;n=1" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #ff0000">《颜色》</A></SPAN></A>的文字，哀伤着的心，如何能跳跃？而潮湿的翅膀又如何能飞舞得似蝴蝶？<BR><BR>&nbsp;&nbsp;&nbsp;本来就无香，又如何流香四溢？一直都执著着搬弄文字的我，现在终于砸到自己的脑门上了；才发觉，为了那无香，自己丢失了自己……<BR><BR>&nbsp;&nbsp;&nbsp;结束语：end&nbsp;sub<BR></SPAN>]]></description>
</item><item>
<title><![CDATA[单元格区域反向选定]]></title>
<link>http://blog.excelhome.net/user1/qingfeng/1110.html</link>
<author>qingfeng</author>
<pubDate>2009-4-14 21:02:00</pubDate>
<description><![CDATA[<P>在一个单元格区域(或整个工作表区域)中选定某些区域后实现反向选定功能</P>
<P><A href="http://blog.excelhome.net/attachment.asp?FileID=1699">MCliping.rar</A><BR></P>]]></description>
</item><item>
<title><![CDATA[守柔Word文本筛——文档重复段落和相似段落分析工具]]></title>
<link>http://blog.excelhome.net/user1/Harold/1109.html</link>
<author>shourou</author>
<pubDate>2009-3-30 9:26:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 14pt; FONT-FAMILY: 微软雅黑">“守柔Word文本筛”的主要功能是<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%C9%B8%D1%A1">筛选</SPAN>出文档中具有重复的段落，或者相似（相近的）段落，适用于文档中的中文字符串的比较，但也可以用于英文。它允许用户定义筛选规则，可以忽略数字、西文字符、括号和标点符号等，它的最大的特点是允许用户设置相似度，可以从50%-100%之间为字符串作比较。<BR>另外，它还可以为所选内容（或者文档）列出不重复的汉字或者词组。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 14pt; FONT-FAMILY: 微软雅黑"><IMG alt="" src="http://blog.excelhome.net/user1/Harold/upload/30927989600.jpg" border=0></SPAN></P>
<P><BR></P>]]></description>
</item><item>
<title><![CDATA[守柔Word文档切割机]]></title>
<link>http://blog.excelhome.net/user1/Harold/1108.html</link>
<author>shourou</author>
<pubDate>2009-3-30 9:18:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">“守柔Word文档切割机”是一款可以将Word文档按节、页、段落数、标题、字符数、大小进行切割的工具，也可以将所选内容生成新文档，Word文档切割机除了可以保留文本格式外，也可以自动应用主文档的页眉页脚格式。推荐应用Microsoft Word 2003+Windows XP。<BR>“Word文档切割机”可以自动获取主文档标题、第一个有效段落或者动态引用单元格内容以生成新文档的文件名，同时也支持用户自定义文件名。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG alt="" src="http://blog.excelhome.net/user1/Harold/upload/30922203405.jpg" align=middle border=0></SPAN></P>]]></description>
</item><item>
<title><![CDATA[守柔拼音居士专业版]]></title>
<link>http://blog.excelhome.net/user1/Harold/1107.html</link>
<author>shourou</author>
<pubDate>2009-3-23 14:14:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">守柔拼音居士是一款基于Microsoft Word 的COM加载项，具有能够一次性标注32000个汉字、运行速度快、智能中文词组识别、词库维护方便及多音字校对界面友好等诸多功能，尤为值得一提的是：它能够方便地为轻声词、儿化词注音，解决了拼音标注中的一大难题。它将为您的汉字拼音标注工作带来快乐。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">本软件推荐用户使用于Windows XP+Office 2003平台，亦可运行于Windows Vista+Office 2007中。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><B>一 </B><B>功能描述</B></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">1 摒弃了普通拼音标注软件以字取音从而导致“词组”中汉字出现多音字问题；</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">2 可以标注轻声词、儿化词，解决了拼音标注中的一大难题。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">3 采用了开放的中文词库WDPY.TXT，共收录了字/词69430条记录。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">3.1 根据字词特性，WDPY.TXT把字词分为六类：常见汉字20902个；常见轻声词420个，常见多音多义词35个，读不读轻声有不同意义的词119个，常用词47705个，常见儿化词249个。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">3.2 支持用户随时添加或删除字条或词条、修改或者调整拼音顺序。手工录入时，需遵循不同词类的分隔符样式，修改完成后请保存WDPY.TXT文件。新的WDPY.TXT文件需要重启Word方能生效。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">4 可以设置字体大小和偏移量。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">拼音标注前，建议完成对文档的编排，以使字体接近最终文档要求。拼音的字体总是“复制”其汉字的字体名称，默认情况下，拼音为11号字体，偏移量为14磅（默认的偏移量总是在字号基础上提升3磅）。字号大小和偏移量用户可以根据需要自己设定，建议先小试部分汉字。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">5 可以按照拼写规则进行句首首字母拼音大写(专业版)。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">6 随选定状态确定拼音标注范围。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">选定状态下，仅为所选内容标注拼音；非选定状态下，全文档标注拼音。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">7 友好的多音校对面板。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">7.1 选定状态下，仅为所选内容进行多音校对；非选定状态下，从光标所在位置开始多音校对。可随时终止多音校对。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">7.2 可以为“儿”字应用儿化音。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">8 右键快速校对(专业版)</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">8.1 右键校对可对全文任意汉字的拼音进行校对，只需将光标定位于汉字（拼音）之前或者选中该汉字（拼音）后右击即可。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">8.2 右键菜单中，最后四个菜单项总为当前拼音的轻声、轻声特别标注、儿化音和大小写切换。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">8.3 当用户选择“儿”字右击时，最后第二个菜单项为删除“儿”字的拼音。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">8.4 右键菜单建议在全文通读中使用。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">9 三种颜色区分多音字</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">守柔拼音居士采用红、蓝、绿三种颜色表示不同的拼音。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">红色表示多音字，绿色表示读不读轻声有不同意义的词的末字，蓝色表示经过多音校对或者右键校对过的拼音。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">10 去除拼音声调的功能。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">11 删除汉字而只保留拼音的功能（转为无格式文本）。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><B>二 </B><B>注意事项：</B></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">1 建议一次性标注的汉字数量不超过32000字。此受Word文档极限的约束。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">2 用户自定义的中文词组取决于Word对于中文词组的识别，即此词组在Word中可通过双击选定，否则，守柔拼音居士不以词组识别之。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">3 特殊标点符号如引号（”“）、书名号（《》）、方括号（【】）等将影响Word对于中文词组的识别，守柔拼音居士对于此类含有非中文字符的词组按字取音，而非按词取音。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">4 中文间的空间可能会影响词组的识别和查询，建议用户在拼音标注之前删除不必要的空格。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">5 守柔拼音居士标注的拼音，受词库的影响。不保证所有拼音均是有效的或者正确的。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><B>三 </B><B>中文句首大写规则</B></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">1 文章标题中开头的汉字；</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">2 段落开头的汉字；</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">3 句号、问号、感叹号、冒号后面的汉字；</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">4 冒号加前引号后边的汉字；</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">5 逗号加前引号后边的汉字；</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">6 省略号后边的汉字。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><B>四 </B><B>感谢</B></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">WDPY.TXT词库由Excelhome会员wdwc和guanlan进行勘误和校对，并详加测试，在此一并表示感谢。部分词组来源于王码86版词库中的逆转换，并经编程处理以符合Word取词规则。</SPAN></P>
<P align=right><A href="http://www.rousoft.com.cn/"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; FONT-FAMILY: 黑体">http://www.rousoft.com.cn/</SPAN></A></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><B>五 </B><B>菜单介绍</B></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">1 主菜单</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231436845460.bmp"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 1　Word 2003下的菜单截图</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231438426112.bmp"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 2　Word 2007下的菜单截图</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">2 关于守柔拼音居士 </SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231452231818.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 3　关于守柔拼音居士</SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">您可以单击“关于守柔拼音居士”对话框中的网站链接以寻求在线帮助，也欢迎可以通过邮件方式向我们咨询或者反馈。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">3 汉字注音 </SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">为所选内容或者全文档汉字标注拼音。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231449276107.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 4　【汉字注音】对话框</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">4 多音校对 </SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">为所选内容或者全文档多音字部分校对。多音校对工作从光标处理向下校对。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">也可以通过右键菜单进行单字校对。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231440471032.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 5　【多音校对】对话框</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231441631103.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"></SPAN><?xml:namespace prefix = w /><w:bordertop type="single" width="4"></BORDERTOP><w:borderleft type="single" width="4"></BORDERLEFT><w:borderbottom type="single" width="4"></BORDERBOTTOM><w:borderright type="single" width="4"></BORDERRIGHT></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 6　使用右键菜单进行校对</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">5 删除声调 </SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">将全文档或者所选容中的声调标记替换为无声调的拼音。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231441178191.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"></SPAN><w:bordertop type="single" width="4"></BORDERTOP><w:borderleft type="single" width="4"></BORDERLEFT><w:borderbottom type="single" width="4"></BORDERBOTTOM><w:borderright type="single" width="4"></BORDERRIGHT></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 7　删除声调</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">6 去字留音 </SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">删除所选内容或者全文档中的拼音（域）部分，仅保留无格式文本。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231443387742.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"></SPAN><w:bordertop type="single" width="4"></BORDERTOP><w:borderleft type="single" width="4"></BORDERLEFT><w:borderbottom type="single" width="4"></BORDERBOTTOM><w:borderright type="single" width="4"></BORDERRIGHT></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 8　去字留音</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">7 </SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">打开WDPY.TXT词库，供用户整理维护。</SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><IMG src="http://blog.excelhome.net/user1/Harold/upload/231442341723.jpg"></SPAN></P>
<P align=center><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">图 9　打开WDPY.TXT文件</SPAN></P>
<P align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">相关链接：<A href="http://www.rousoft.com.cn">www.rousoft.com.cn</A></SPAN></P>下载： <A href="http://www.namipan.com/d/c5c13c6aab54f772c43b79c4b5f8510b6ac5aa2e793e1200">WDPY.rar</A> 
<P align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"></SPAN>&nbsp;</P>
<P align=right><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">2009-3-18</SPAN></P></w:borderright></w:borderbottom></w:borderleft></w:bordertop></w:borderright></w:borderbottom></w:borderleft></w:bordertop></w:borderright></w:borderbottom></w:borderleft></w:bordertop><BR>]]></description>
</item><item>
<title><![CDATA[test]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1106.html</link>
<author>gvntw</author>
<pubDate>2009-3-16 15:46:00</pubDate>
<description><![CDATA[<P>测试附件</P>
<P><A href="http://blog.excelhome.net/attachment.asp?FileID=1680">日期与星期.zip</A><BR></P>]]></description>
</item><item>
<title><![CDATA[根据活跃天数计算出QQ等级及升级剩余天数]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1103.html</link>
<author>gvntw</author>
<pubDate>2009-2-17 14:00:00</pubDate>
<description><![CDATA[<P>根据活跃天数，计算出QQ现在的等级及升级剩余天数。详见附件。</P>
<P><A href="http://blog.excelhome.net/attachment.asp?FileID=1674">QQ.zip</A><BR></P>]]></description>
</item><item>
<title><![CDATA[在Excel2007中嵌入Flash文件]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1102.html</link>
<author>chrisfang</author>
<pubDate>2009-2-8 17:18:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">从目前掌握的一些信息来看，<SPAN lang=EN-US>Office2007SP1/SP2</SPAN>之下，<SPAN lang=EN-US>Excel2007</SPAN>中还不能创建真正嵌入<SPAN lang=EN-US>Flash</SPAN>文件的文档（可以插入<SPAN lang=EN-US>Shockwaveflash</SPAN>控件来选择嵌入<SPAN lang=EN-US>flash</SPAN>文档，但在移除源文件后就会无法播放，原因是保存<SPAN lang=EN-US>xlsm</SPAN>的时候没有真正完成<SPAN lang=EN-US>“</SPAN>嵌入<SPAN lang=EN-US>”</SPAN>的操作）。<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">有一种变通的方法可以稍许安慰一下那些对此表示失望的用户们，<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">首先，你的机器上要安装有<SPAN lang=EN-US>Office2003</SPAN>版本，并且已经升级到<SPAN lang=EN-US>SP3</SPAN>版，然后从微软网站上下载并安装格式兼容包<SPAN lang=EN-US>FileFormatConverters.exe</SPAN>（下载地址：<SPAN lang=EN-US><A href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466" target=_blank>http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466</A></SPAN>）<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">然后，打开<SPAN lang=EN-US>Excel2003</SPAN>，插入<SPAN lang=EN-US>shockwaveflash</SPAN>控件，将控件的<SPAN lang=EN-US>movie</SPAN>属性指向本地或网络的<SPAN lang=EN-US>swf</SPAN>文件，并将控件的<SPAN lang=EN-US>Embedmovie</SPAN>属性设置为<SPAN lang=EN-US>True</SPAN>。完成设置后，退出<SPAN lang=EN-US>“</SPAN>设计模式<SPAN lang=EN-US>”</SPAN>，此时应该可以看到正常播放的<SPAN lang=EN-US>Flash</SPAN>动画。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">接下来，在<SPAN lang=EN-US>Excel2003</SPAN>的菜单中选择<SPAN lang=EN-US>“</SPAN>文件<SPAN lang=EN-US>”——“</SPAN>另存为<SPAN lang=EN-US>”</SPAN>，在<SPAN lang=EN-US>“</SPAN>另存为<SPAN lang=EN-US>”</SPAN>对话框下方的<SPAN lang=EN-US>“</SPAN>保存类型<SPAN lang=EN-US>”</SPAN>下拉列表中选择<SPAN lang=EN-US>“Excel2007</SPAN>启用宏的工作簿<SPAN lang=EN-US>(*.xlsm)”</SPAN>，选择保存文件。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">这样生成的<SPAN lang=EN-US>2007</SPAN>版的<SPAN lang=EN-US>xlsm</SPAN>文件就可以携带着嵌入其中的<SPAN lang=EN-US>flash</SPAN>文档传播给其他用户打开欣赏。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">但是需要注意的是，这个<SPAN lang=EN-US>xlsm</SPAN>不能在<SPAN lang=EN-US>Excel2007</SPAN>下面再次保存，否则会丢失嵌入的信息。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P>
<P>&nbsp;</P></P>]]></description>
</item><item>
<title><![CDATA[提取Office2007版中的Flash文件]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/1101.html</link>
<author>chrisfang</author>
<pubDate>2009-2-2 16:16:00</pubDate>
<description><![CDATA[<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">网上很多地方都能找到<SPAN lang=EN-US>2003</SPAN>版中<SPAN onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CC%E1%C8%A1"><SPAN class=ttag>提取所嵌入的</SPAN></SPAN><SPAN lang=EN-US>Flash</SPAN>文件的方法和<SPAN onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B4%FA%C2%EB"><SPAN class=ttag>代码</SPAN></SPAN>，但是<SPAN lang=EN-US>2007</SPAN>版本出来那么久了，在网上搜索了一下好像<SPAN lang=EN-US>07</SPAN>版本下的相应提取工具还没有出现。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">由于<SPAN onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=2007"><SPAN class=ttag><SPAN lang=EN-US>2007</SPAN></SPAN></SPAN>的文件<SPAN onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B8%F1%CA%BD"><SPAN class=ttag>格式</SPAN></SPAN>发生了变化，原有<SPAN lang=EN-US>2003</SPAN>下的提取方法和代码已经不再适用，因此我重新做了一个适应<SPAN lang=EN-US>07</SPAN>版本的。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial"><o:p></o:p></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">先说一下思路，<SPAN lang=EN-US>Office2007</SPAN>使用了一种新的文件格式<SPAN lang=EN-US>Office Open XML</SPAN>，这种格式基于<SPAN lang=EN-US>XML</SPAN>和<SPAN lang=EN-US>ZIP</SPAN>存档技术。也就是说，如果把<SPAN lang=EN-US>2007</SPAN>的<SPAN lang=EN-US>Office</SPAN>文件例如<SPAN lang=EN-US> *.xlsm</SPAN>、<SPAN lang=EN-US>*.xlsx</SPAN>等文件的扩展名改为<SPAN lang=EN-US>zip</SPAN>，就可以当作<SPAN lang=EN-US>zip</SPAN>压缩包一样打开和解压缩。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial"><o:p></o:p></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">在解压之后，如果是<SPAN lang=EN-US>Excel</SPAN>文档，则解压目录下有名为<SPAN lang=EN-US>“xl”</SPAN>的文件夹（<SPAN lang=EN-US>PPT</SPAN>的话是<SPAN lang=EN-US>“ppt”</SPAN>文件夹，<SPAN lang=EN-US>WORD</SPAN>的话是<SPAN lang=EN-US>“word”</SPAN>文件夹，我这个程序只做了查找<SPAN lang=EN-US>xl</SPAN>的代码，也就是说只适用于<SPAN lang=EN-US>Excel</SPAN>文档），打开这个文件夹，如果添加了<SPAN lang=EN-US>Flash</SPAN>控件，则会有一个名为<SPAN lang=EN-US>“Activex”</SPAN>的文件夹，这个文件夹下面的<SPAN lang=EN-US>BIN</SPAN>文件中就包含了<SPAN lang=EN-US>flash</SPAN>文件，用二进制格式打开文件可以找到<SPAN lang=EN-US>“465753”</SPAN>的<SPAN lang=EN-US>swf</SPAN>文件头。接下来的工作就和<SPAN lang=EN-US>2003</SPAN>中提取的方法没什么区别了。（因此这部分代码基本上照搬现有的代码）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial"><o:p></o:p></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">程序如下：（现在的代码没有去做很强的自适应功能，只能找文档中的第一个<SPAN lang=EN-US>activex</SPAN>控件，如果目标文档中的首个<SPAN lang=EN-US>Activex</SPAN>控件不是<SPAN lang=EN-US>flash</SPAN>的控件，那就会出错。有兴趣的朋友可以另外加个遍历和判断，还可以提取多个<SPAN lang=EN-US>flash</SPAN>文档。）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial"><o:p></o:p></SPAN></P>
<P><A href="http://blog.excelhome.net/attachment.asp?FileID=1672"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">提取Excel2007中的flash.rar</SPAN></A></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"></SPAN>&nbsp;</P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">代码如下：</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">Private Sub CommandButton1_Click()</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">&nbsp;&nbsp;&nbsp; Dim FSO As Object<BR>&nbsp;&nbsp;&nbsp; Dim oApp As Object<BR>&nbsp;&nbsp;&nbsp; Dim Fname, fname2 As Variant<BR>&nbsp;&nbsp;&nbsp; Dim fileNameInZip As Variant<BR>&nbsp;&nbsp;&nbsp; Dim mypath As Variant<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; mypath = ThisWorkbook.Path<BR>&nbsp;&nbsp;&nbsp; mypath = mypath &amp; "\"<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Fname = Application.GetOpenFilename(filefilter:="(*.xlsx;*.xlsm), *.xlsx;*.xlsm", _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MultiSelect:=False)<BR>&nbsp;&nbsp;&nbsp; If Fname = False Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Do nothing<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp; Application.ScreenUpdating = False<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; fname2 = mypath &amp; "temp.zip"<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; FileCopy Fname, fname2</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; fname2 = fname2 &amp; "\xl"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set oApp = CreateObject("Shell.Application")</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each fileNameInZip In oApp.Namespace(fname2).items<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If LCase(fileNameInZip) Like LCase("activeX") Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oApp.Namespace(mypath).CopyHere _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oApp.Namespace(fname2).items.Item(CStr(fileNameInZip))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpFileName = mypath &amp; "activex\activex1.bin"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExtractFlash (tmpFileName)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpFileName = mypath &amp; "activex"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RemoveDir (tmpFileName)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fname2 = mypath &amp; "temp.zip"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Kill fname2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set FSO = CreateObject("scripting.filesystemobject")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FSO.deletefolder Environ("Temp") &amp; "\Temporary Directory*", True<BR>&nbsp;&nbsp;&nbsp; End If<BR>Application.ScreenUpdating = True<BR>End Sub</SPAN></P>
<P><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">Sub ExtractFlash(tmpFileName As String)<BR>Dim FileNumber As Integer<BR>Dim myFileId As Long<BR>Dim myArr() As Byte<BR>Dim i As Long<BR>Dim MyFileLen As Long, myIndex As Long<BR>Dim swfFileLen As Long<BR>Dim swfArr() As Byte</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua"></SPAN>&nbsp;</P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">If tmpFileName = "False" Then Exit Sub<BR>myFileId = FreeFile<BR>Open tmpFileName For Binary As #myFileId<BR>MyFileLen = LOF(myFileId)<BR>ReDim myArr(MyFileLen - 1)<BR>Get myFileId, , myArr()<BR>Close myFileId<BR>Application.ScreenUpdating = False<BR>i = 0<BR>Do While i &lt; MyFileLen<BR>&nbsp;&nbsp;&nbsp; If myArr(i) = &amp;H46 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If myArr(i + 1) = &amp;H57 And myArr(i + 2) = &amp;H53 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swfFileLen = CLng(&amp;H1000000) * myArr(i + 7) + CLng(&amp;H10000) * myArr(i + 6) + CLng(&amp;H100) * myArr(i + 5) + myArr(i + 4)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim swfArr(swfFileLen - 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For myIndex = 0 To swfFileLen - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swfArr(myIndex) = myArr(i + myIndex)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next myIndex<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Do<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<BR>&nbsp;&nbsp;&nbsp; End If<BR>Loop</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">myFileId = FreeFile<BR>tmpFileName = Left(tmpFileName, Len(tmpFileName) - 13) &amp; ".swf"<BR>Open tmpFileName For Binary As #myFileId<BR>Put #myFileId, , swfArr<BR>Close myFileId</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">MsgBox "提取完成！保存在当前目录", , "By Chrisfang @ Excelhome.net"</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">End Sub</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Book Antiqua">Public Sub RemoveDir(dirpath)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim fs, fc<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim f<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tempFile<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim TempFolder<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set fs = CreateObject("Scripting.FileSystemObject")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set f = fs.GetFolder(dirpath)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set SubSubFolders = f.SubFolders<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each TempFolder In SubSubFolders<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TempFolder.Delete True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set tempFiles = f.Files<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each tempFile In tempFiles<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempFile.Delete True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RmDir dirpath<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; End Sub</SPAN></P>
<P><BR>&nbsp;</P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">【以下内容更新于<SPAN lang=EN-US>2009</SPAN>年<SPAN lang=EN-US>2</SPAN>月<SPAN lang=EN-US>9</SPAN>日】<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">今天思考另外一个问题的时候突然想到，先前所做的这个提取程序是不是绕了一条远路？既然<SPAN lang=EN-US>2003</SPAN>下面可以很方便地提取<SPAN lang=EN-US>Flash</SPAN>文档，那么把<SPAN lang=EN-US>2007</SPAN>的文档转存为<SPAN lang=EN-US>2003</SPAN>的文档再来提取不是很简单？何必像上面那样搞得如此复杂？呵呵，真是聪明反被聪明误。不过上面这个作为对<SPAN lang=EN-US>2007</SPAN>文件格式的一点研究，还是有那么一点点意义。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">下面重新改写了一个可以通吃<SPAN lang=EN-US>Excel2003</SPAN>和<SPAN lang=EN-US>Excel2007</SPAN>文件的提取程序（程序适用于<SPAN lang=EN-US>2007</SPAN>版本之中）：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P><SPAN style="FONT-FAMILY: Book Antiqua">Private Sub CommandButton1_Click()<BR>&nbsp;&nbsp;&nbsp; Dim Fname, fname2 As Variant<BR>&nbsp;&nbsp;&nbsp; Dim mypath As Variant<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; Application.ScreenUpdating = False<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; mypath = ThisWorkbook.Path<BR>&nbsp;&nbsp;&nbsp; mypath = mypath &amp; "\"<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Fname = Application.GetOpenFilename(filefilter:="(*.xlsm;*.xls), *.xlsm;*.xls", _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MultiSelect:=False)<BR>&nbsp;&nbsp;&nbsp; If Fname = False Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Do nothing<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Right(Fname, 1) = "m" Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fname2 = mypath &amp; "temp.xls"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbooks.Open Fname<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.SaveAs Filename:=fname2, FileFormat:=xlExcel8<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.Close<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExtractFlash (fname2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Kill mypath &amp; "temp.xls"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExtractFlash (Fname)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; End If<BR>Application.ScreenUpdating = True<BR>End Sub</SPAN></P>
<P><BR><SPAN style="FONT-FAMILY: Book Antiqua">Sub ExtractFlash(tmpFileName As String)<BR>Dim FileNumber As Integer<BR>Dim myFileId As Long<BR>Dim myArr() As Byte<BR>Dim i As Long<BR>Dim MyFileLen As Long, myIndex As Long<BR>Dim swfFileLen As Long<BR>Dim swfArr() As Byte</SPAN></P>
<P><SPAN style="FONT-FAMILY: Book Antiqua">If tmpFileName = "False" Then Exit Sub<BR>myFileId = FreeFile<BR>Open tmpFileName For Binary As #myFileId<BR>MyFileLen = LOF(myFileId)<BR>ReDim myArr(MyFileLen - 1)<BR>Get myFileId, , myArr()<BR>Close myFileId<BR>Application.ScreenUpdating = False<BR>i = 0<BR>Do While i &lt; MyFileLen<BR>&nbsp;&nbsp;&nbsp; If myArr(i) = &amp;H46 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If myArr(i + 1) = &amp;H57 And myArr(i + 2) = &amp;H53 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swfFileLen = CLng(&amp;H1000000) * myArr(i + 7) + CLng(&amp;H10000) * myArr(i + 6) + CLng(&amp;H100) * myArr(i + 5) + myArr(i + 4)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim swfArr(swfFileLen - 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For myIndex = 0 To swfFileLen - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swfArr(myIndex) = myArr(i + myIndex)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next myIndex<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Do<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<BR>&nbsp;&nbsp;&nbsp; End If<BR>Loop</SPAN></P>
<P><SPAN style="FONT-FAMILY: Book Antiqua">myFileId = FreeFile<BR>tmpFileName = Left(tmpFileName, Len(tmpFileName) - 4) &amp; ".swf"<BR>Open tmpFileName For Binary As #myFileId<BR>Put #myFileId, , swfArr<BR>Close myFileId</SPAN></P>
<P><SPAN style="FONT-FAMILY: Book Antiqua">MsgBox "提取完成！保存在当前目录", , "By Chrisfang @ Excelhome.net"</SPAN></P>
<P><SPAN style="FONT-FAMILY: Book Antiqua">End Sub</SPAN></P>
<P><BR><SPAN style="FONT-FAMILY: Bookman Old Style"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 微软雅黑; mso-bidi-font-family: Arial">附件如下：<SPAN lang=EN-US>&nbsp;</SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 微软雅黑"><o:p></o:p></SPAN></P></SPAN><A href="http://blog.excelhome.net/attachment.asp?FileID=1673">提取Excel中的flash.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[TextFilter文本过滤]]></title>
<link>http://blog.excelhome.net/user1/Harold/1100.html</link>
<author>shourou</author>
<pubDate>2008-12-31 10:27:00</pubDate>
<description><![CDATA[<H2>
<H2>TextFilter文本过滤</H2>
<DIV class=t_msgfont id=postmessage_2455956>Word强大的功能之一，便是<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B2%E9%D5%D2">查找</SPAN>和<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CC%E6%BB%BB">替换</SPAN>。在我所接触的众多行业、众多网友、众多<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CE%CA%CC%E2">问题</SPAN>和众多需求中，有一情况，那就是对于无<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B8%F1%CA%BD">格式</SPAN>大文档的查换与替换，如果这些<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CE%C4%B1%BE">文本</SPAN>导入或者通过Word进行处理，可控性和效率都存在一些问题，更为主要的是，往往我们需要象文档结构图那样对查找的内容进行浏览、定位和编辑，并且希望进一步在结果中搜索或者在结果中进行替换，由此，我们产生了开发TextFilter文本过滤程序的想法。<BR>TextFilter为独立的EXE程序，它需要Windows一些<SPAN class=t_tag onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%BF%D8%BC%FE">控件</SPAN>的支持，所以，它的安装文件相对较大，论坛上传受到限制，有需要或者兴趣的网友，可以到<A href="http://www.rousoft.com.cn/tf/" target=_blank>http://www.rousoft.com.cn/tf/</A>进行下载。<BR>TextFilter程序为共享软件，欢迎下载、转载、分发和试用。</DIV></H2>
<DIV class=t_msgfont>&nbsp;</DIV>]]></description>
</item><item>
<title><![CDATA[修改 Excel 的撤消次数]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1099.html</link>
<author>gvntw</author>
<pubDate>2008-12-28 12:38:00</pubDate>
<description><![CDATA[<DIV>Microsoft Office Excel默认的撤消次数为16次，可以通过修改注册表的方法增加次数，方法如下：</DIV>
<DIV>进入注册表编辑器（运行regedit.exe），依次展开：HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options，再单击“编辑”—“新建DWORD值”，数值名称改为“UndoHistory”，数值改为要撤消的次数，如十进制的20，关闭注册表编辑器，重新启动Excel就OK了。</DIV>]]></description>
</item><item>
<title><![CDATA[查找Excel工作表中的重复数据]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1098.html</link>
<author>fanjy</author>
<pubDate>2008-12-12 22:52:00</pubDate>
<description><![CDATA[<DIV>前不久，一位网友求教，要求找出Excel工作表中的重复数据并在单元格中列出。我给出了一个数组公式供参考，但不是太符合要求，因为这个数组公式虽然找出了重复数据，但是如果将数组公式向下复制时超出了出现重复数据的数量，会在相应单元格中显示错误。不久，这位朋友获得了更好的一个公式。这个公式非常好，很好地解决了这类问题，因此，我将其转贴于此，供有兴趣的朋友参考。<BR>先看看下图：<BR><A href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/12/findmultidata1.png"><IMG class="http://blog.excelhome.net/alignnone size-full wp-image-986" title=findmultidata1 height=237 alt="" src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/12/findmultidata1.png" width=445></A><BR>在列A和列B中存在一系列数据（表中只是示例，可能数据还有很多），要求找出某人（即列A中的姓名）所对应的所有培训记录（即列B中的数据）。也就是说，在单元格E1中输入某人的姓名后，下面会自动显示这个人所有的培训记录。<BR>我们知道，Excel的LOOKUP系列的函数能够很方便地实现查找，但是对于查找后返回一系列的结果，这类函数无能为力，因此只能联合其它函数来实现。<BR>这里，在方法一中使用了INDEX函数、SMALL函数、IF函数和ROW函数，在方法二中还使用了Excel 2007中新增的IFERROR函数。<BR><SPAN style="http://blog.excelhome.net/COLOR: #0000ff">方法一：</SPAN><BR>1、选择单元格E3；<BR>2、输入公式：=INDEX(B:B,SMALL(IF($A$2:$A$25=$E$1,ROW($A$2:$A$25),65536),ROW(1:1))) &amp; " "，然后同时按下Ctrl+Shift+Enter键，即输入数组公式。<BR>3、选择单元格E3后下拉至所有单元格。<BR><SPAN style="COLOR: #0000ff">方法二：<BR></SPAN>1、选择单元格F3；<BR>2、输入公式：=IFERROR(INDEX($A$2:$B$9,SMALL(IF($A$2:$A$9=$E$1,ROW($A$2:$A$9)-ROW($A$2)+1,ROW($A$9)+1),ROW(1:1)),2)," ")，然后同时按下Ctrl+Shift+Enter键，即输入数组公式。<BR>3、选择单元格F3后下拉至所有单元格。</DIV>]]></description>
</item><item>
<title><![CDATA[何谓老公]]></title>
<link>http://blog.excelhome.net/user1/gvntw/archives/2008/1096.html</link>
<author>gvntw</author>
<pubDate>2008-11-20 15:45:00</pubDate>
<description><![CDATA[<DIV>老公，就是婚前总是早早赴约，婚后总是迟迟回家的那个人；</DIV>
<DIV>老公，就是婚前在你面前像孙子总是百依百顺，婚后在你面前像老子总是发号施令的那个人；</DIV>
<DIV>老公，就是婚前只看你的脸蛋是否漂亮，婚后只看你的双手是否会干家务活的那个人；</DIV>
<DIV>老公，就是婚前对你常常发誓，婚后对你常常发火的那个人；</DIV>
<DIV>老公，就是婚前常替你做事，婚后常叫你做事的那个人；</DIV>
<DIV>老人，就是婚前向你送玫瑰，婚后向你交工资的那个人；</DIV>
<DIV>老公，就是婚前对你说十句顶一句，婚后对你说一句顶十句的那个人；</DIV>
<DIV>老公，就是婚前对你说“你是我的一切”，婚后对你说“我是你的一切”的那个人；</DIV>
<DIV>老公，就是婚前在你面前干净整洁，婚后在你面前不修边幅的那个人；</DIV>
<DIV>老公，就是婚前常常盘问你，婚后又怕被你盘问的那个人；</DIV>
<DIV>老公，就是婚前对你的唠叨百听不厌，婚后对你的唠叨火冒三丈的那个人；</DIV>
<DIV>老公，就是婚前总说你美丽，婚后总说别人老婆漂亮的那个人；</DIV>
<DIV>老公，就是婚前与你逛街时口袋里装满钞票，婚后与你逛街时口袋里没有钞票的那个人。</DIV>]]></description>
</item><item>
<title><![CDATA[添加“复制到文件夹”到右键快捷菜单]]></title>
<link>http://blog.excelhome.net/user1/gvntw/archives/2008/1095.html</link>
<author>gvntw</author>
<pubDate>2008-11-14 15:23:00</pubDate>
<description><![CDATA[<DIV>在复制或移动文件或文件夹到其他文件夹时，得打开两个窗口，很不方便，我们可以在右键快捷菜单中添加“复制到文件夹”和“移动到文件夹”这两个菜单，方便操作，操作方法如下：</DIV>
<br/>
<DIV><STRONG><SPAN style="FONT-SIZE: 12pt">“复制到文件夹”</SPAN></STRONG></DIV>
<br/>
<DIV>1、打开注册表编辑器（运行regedit），依次展开HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers。</DIV>
<DIV>2、右键单击ContextMenuHandlers，“新建”—“项”，将键名改为一个比较容易记住的名字，如“Copy To”。</DIV>
<DIV>3、选定“Copy To”主键，双击右侧窗口的“(默认)”，在弹出的“编辑字符串”对话框中，“数值数据”框中输入“{C2FBB630-2971-11D1-A18C-00C04FD75D13}”（不含双引号），单击“确定”按钮。</DIV>
<br/>
<DIV><SPAN style="FONT-SIZE: 12pt"><STRONG>“移动到文件夹”</STRONG></SPAN></DIV>
<DIV><SPAN style="FONT-SIZE: 10pt"></SPAN>&nbsp;</DIV>
<DIV><SPAN style="FONT-SIZE: 10pt">与复制到文件夹方法相同，主键名改为“Move To”，键值把“630”改为“631”，即：“{C2FBB631-2971-11D1-A18C-00C04FD75D13}”。</SPAN></DIV>
<DIV><SPAN style="FONT-SIZE: 10pt"></SPAN>&nbsp;</DIV>
<DIV><SPAN style="FONT-SIZE: 10pt">现在鼠标右击文件或文件夹，右键快捷菜单中就多出了“复制到文件夹”和“移动到文件夹”这两个菜单，方便用户操作。</SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[使用Excel工作表来安排工作——OnTime事件]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1092.html</link>
<author>fanjy</author>
<pubDate>2008-10-31 13:09:00</pubDate>
<description><![CDATA[<P>前不久，有位朋友问：由于工作太多太杂，导致经常常忘记要做的事情，希望利用Excel工作表来定时提醒要进行的工作。也就是说，在到达某个时刻后，工作表中的文本框会自动显示该时刻应该做的工作。如下面的图1和图2所示，图1为工作安排表，A列为工作安排，B列为开始该工作的时间；图2为用于显示当前应进行的工作。<BR><A title=test1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/test1.png"><IMG alt=test1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/test1.png"></A><BR>图1：工作安排表，在A列中是工作安排，B列中是工作开始的时间。可根据需要修改和添加<BR><A title=test2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/test2.png"><IMG alt=test2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/test2.png"></A><BR>图2：显示当前工作的界面。单击“显示”按钮后程序开始工作，当达到某时刻后，文本框中会显示当前应进行的工作<BR>（注：这只是示例，可以根据自已的实际需要在图1的工作表中增加工作安排及相应的时间）<BR>程序代码如下：<BR><SPAN style="http://blog.excelhome.net/FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Option</SPAN> <SPAN style="COLOR: #00007f">Explicit</SPAN><BR><SPAN style="COLOR: #00007f">Sub</SPAN> DisplayData()<BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.OnTime Now + TimeSerial(0, 0, 1), “ChangeText”<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN>
<P></P>
<P><SPAN style="COLOR: #00007f">Sub</SPAN> ChangeText()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> rng <SPAN style="COLOR: #00007f">As</SPAN> Range, rngFind <SPAN style="COLOR: #00007f">As</SPAN> Range, rngValue <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> rngStart <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> dTime <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Date</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> lLastRow <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Long</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">On</SPAN> <SPAN style="COLOR: #00007f">Error</SPAN> <SPAN style="COLOR: #00007f">Resume</SPAN> <SPAN style="COLOR: #00007f">Next</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;lLastRow = Sheet3.Range(”B65536″).End(xlUp).Row<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> rng = Sheet3.Range(”B1:B” &amp; lLastRow)<BR>&nbsp;&nbsp;&nbsp;&nbsp;dTime = Time<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> rngFind = rng.Find(dTime)</P>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;Sheet5.TextBox1.Value = rngFind.Offset(0, -1).Value<BR>&nbsp;&nbsp;&nbsp;&nbsp;DisplayData<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN><BR></DIV></SPAN></P>
<DIV><BR><SPAN style="FONT-FAMILY: 宋体, MS Song">工作表中的“显示”按钮关联的子过程为“DisplayData”。</SPAN></DIV>
<br/>
<DIV><EM>注:同时发表于<A href="http://www.excelperfect.com"><STRONG>完美Excel</STRONG></A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></EM></DIV>]]></description>
</item><item>
<title><![CDATA[显示满足条件的所有数据]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1091.html</link>
<author>fanjy</author>
<pubDate>2008-10-30 13:11:00</pubDate>
<description><![CDATA[<P>对于VLOOKUP函数来说，其主要缺陷是仅能返回与查找条件相匹配的单条数据，不能够返回与某条件相匹配的所有数据，但其优势是能够相当容易地获取与所给条件相匹配的第一条数据，如下图1所示。<BR><A title=vlookup1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup1.png"><IMG alt=vlookup1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup1.png"></A><BR>图1：使用VLOOKUP函数返回包含某顾客姓名相应的行中的数据是很容易的方式<BR>正如上图所示，在Excel 2007中使用结构化引用，VLOOKUP函数不仅容易使用，而且可读性也很强。在示例中，将表Table1中第一列的值与单元格A9中的值相匹配，并从表中第3列返回值。但是，不能返回表中第二个与“Dan”相匹配的值。事实上，很多时候我们都会碰到这样的情况，我们想要返回与条件相匹配的所有值，但是VLOOKUP函数只能返回满足条件的第一个值。<BR>下面，让我们看看如何从表中获取满足条件的所有数据。首先，准备一些要操作的数据。我们以Office自带的Northwind示例数据库的一部分数据来演示，将其中的部分数据导入Excel表中，如下图2、图3、图4所示。<BR><A title=vlookup2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup2.png"><IMG alt=vlookup2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup2.png"></A><BR>图2：导入到工作表Customers中的“Customer”表并命名为“tblCustomers”<BR><A title=vlookup3 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup3.png"><IMG alt=vlookup3 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup3.png"></A><BR>图3：导入到工作表Orders中的“Orders”表并命名为“tblOrders”<BR><A title=vlookup4 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup4.png"><IMG alt=vlookup4 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup4.png"></A><BR>图4：导入到工作表Details中的“OrderDetails”表并命名为“tblDetails”<BR>当然，上述数据都不需要自已手工输入，只需从Northwind数据库中导入即可。现在，希望选择订单号（Order Number）后，能够显示该订单的详细信息，如下图5所示。<BR><A title=vlookup5 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup5.png"><IMG alt=vlookup5 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup5.png"></A><BR>图5：当选择某订单号后，会显示该订单的详细信息<BR>下面是图5显示的界面的主要设计过程。<BR>1、在工作表相应的单元格中输入下列字符：<BR>B1：Order Number<BR>C3：Order Information<BR>C4：Customer<BR>F4：Order Date<BR>F5：Status<BR>F6：Salesperson<BR>F7：Ship Date<BR>C10：Order Details<BR>C11：Product<BR>D11：Quantity<BR>E11：Unit Price<BR>F11：Discount<BR>G11：Total Price<BR>H11：Status ID<BR>2、创建包含所有订单IDs的一个命名区域，将使用该名称在数据有效性中创建订单号的下拉列表。为此，单击“公式——定义名称”，在“新建名称”对话框中输入：<BR>名称：OrderIds<BR>引用位置：=tblOrders[ID]<BR>注：数据有效性不能够引用不同工作表中的单元格区域，除非将该区域定义名称。<BR>3、选择单元格D1，将其命名为rngOrderId。<BR>4、选择单元格D1，单击“数据——数据有效性”，在“允许”中选择“序列”，在“来源”框中输入“=OrderIds”。<BR>5、选择单元格C5，输入下列函数：<BR>=VLOOKUP(rngOrderId, tblOrders, MATCH(C4, tblOrders[#标题], 0), FALSE)<BR>6、与单元格C5中的函数相似，设置剩余单元格的查找函数。<BR>C6：=VLOOKUP($C$5,tblCustomers,MATCH(”Address”,tblCustomers[#标题],0), FALSE)<BR>C7：=VLOOKUP($C$5, tblCustomers, MATCH(”City”,tblCustomers[#标题],0), FALSE) &amp; “, ” &amp; VLOOKUP($C$5, tblCustomers, MATCH(”State”,tblCustomers[#标题],0), FALSE) &amp; ” ” &amp; VLOOKUP($C$5, tblCustomers, MATCH(”Zip”,tblCustomers[#标题],0), FALSE)<BR>H4：=VLOOKUP(rngOrderId, tblOrders, MATCH(F4, tblOrders[#标题], 0), FALSE)<BR>H5：=VLOOKUP(rngOrderId, tblOrders, MATCH(F5, tblOrders[#标题], 0), FALSE)<BR>H6：=VLOOKUP(rngOrderId, tblOrders, MATCH(F6, tblOrders[#标题], 0), FALSE)<BR>H7：=VLOOKUP(rngOrderId, tblOrders, MATCH(F7, tblOrders[#标题], 0), FALSE)<BR>至此，完成了我们的界面的上半部分，如图6所示。<BR><A title=vlookup6 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup6.png"><IMG alt=vlookup6 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup6.png"></A><BR>图6：已完成的查找界面<BR>下面，让我们来看看将要使用的公式中的一些函数。<BR>1、实际上，我们不会使用VLOOKUP函数。因为需要返回多个项目，因此需要一种方式来返回一组值，而VLOOKUP函数不允许这样做。相反，我们使用INDEX函数返回指定行和列交叉部分的值。<BR>2、我们需要指定想要在单元格中显示的数组中的项目，这里可使用SMALL函数和ROW函数来实现。<BR>3、我们希望如果在源数据中添加额外的列时确保数据能够自动调整，这里使用MATCH函数。<BR>4、最后，我们希望有错误处理功能，这里使用IFERROR函数（这是在Excel 2007中新增的函数）来确保如果在计算中有错误将只是显示空单元格。<BR>好了，先让我们来看看已经完成的函数，如下图7中的单元格C12所示（注意，这是一个数组公式，其左右两侧的花括号不需要自已输入。在输完公式后按下Ctrl+Shift+Enter组合键即可）。<BR><A title=vlookup7 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup7.png"><IMG alt=vlookup7 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup7.png"></A><BR>图7：数组公式用于返回与特定值相匹配的第N项<BR>这个公式看起来很复杂，为便于阅读，将其书写如下：<BR>{<BR>=IFERROR(<BR>INDEX(tblDetails,<BR>&nbsp;SMALL(<BR>IF(tblDetails[Order ID]=rngOrderId,<BR>ROW(tblDetails[Order ID])-ROW(tblDetails[#标题])<BR>),<BR>ROW(1:1)<BR>),<BR>MATCH(C$11, tblDetails[#标题], 0)<BR>),<BR>“”)<BR>}<BR>首先，看看SMALL函数，该函数接受一组值并从中返回第N小的值。<BR>SMALL(<BR>IF(tblDetails[Order ID]=rngOrderId,<BR>ROW(tblDetails[Order ID])-ROW(tblDetails[#标题])<BR>),<BR>ROW(1:1)<BR>),<BR>本例中，数组的值由IF函数确定。特别地，如果Details表中某行的Order ID与在下拉列表中选择的Order ID相等，那么添加该行的行号到数组值中。通过使用ROW函数，Excel能够自动调整公式来向下填充单元格。并且，通过使用结构化引用，使得工作表数据能够自动适应源数据的变化。<BR>然后，再看看INDEX函数，该函数接受一个二维数据并返回数组中指定行列位置的值。<BR>INDEX(tblDetails,<BR>&nbsp;SMALL(<BR>IF(tblDetails[Order ID]=rngOrderId,<BR>ROW(tblDetails[Order ID])-ROW(tblDetails[#标题])<BR>),<BR>ROW(1:1)<BR>),<BR>MATCH(C$11, tblDetails[#标题], 0)<BR>),<BR>我们已经知道，本例中的SMALL函数返回与输入的Order ID相匹配的Order Details列表中ROW(Nth)的值，这里是第一个值即行号。接着需要获取列号，即使用MATCH函数，本例中该函数接受C11的值并查找在Details表中有相同名称的列。<BR>最后使用的是IFERROR函数，如果包含计算式发生错误，使用空字符串（””）替换错误值。<BR>现在，选择单元格C12，拖动其右下角的填充柄至单元格H12。选择单元格区域C12：H12，拖动填充句柄向下10行或更多。那么，现在当我们改变Order ID时，将会自动更新相关信息。<BR><A title=vlookup8 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup8.png"><IMG alt=vlookup8 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/vlookup8.png"></A><BR>图8：完成的界面表，使用数组公式向下填充以获取所有相关信息</P>
<P><EM>摘自Excel Team Blog,本文有删节.同时发表于<A href="http://www.excelperfect.com"><STRONG>完美Excel</STRONG></A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></EM><BR>示例工作簿下载：<A href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/Master-Detail.zip">Master-Detail</A></P>]]></description>
</item><item>
<title><![CDATA[南麂岛风光]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1090.html</link>
<author>chrisfang</author>
<pubDate>2008-10-20 16:58:00</pubDate>
<description><![CDATA[<DIV>&nbsp;&nbsp;&nbsp; 10月11号左右，去慕名已久的南麂岛走了一趟。</DIV>
<DIV>&nbsp;&nbsp;&nbsp; 清晨4点钟出发坐了6个多小时的车，下车又去赶船。都说快艇虽然有点颠簸但问题应该不大，但没想到遇到5、6级的大风浪，船上的人吐得一塌糊涂。1个半小时的船程，我在憋了40多分钟的时候终于还是忍不住在周围一片哀号声中吐了。</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;两天简单看下来，南麂岛的自然风光还不错，有沙滩的海岸好像只有一处，还比较小，乱石堆的海岸倒还是蛮不错的，海水还算干净。岛上接待能力较差，吃住条件都一般，这还是淡季，旺季的时候真的不太适合在这里凑热闹。</DIV>
<DIV>&nbsp;&nbsp;&nbsp; 照片上传速度慢，其他事情也比较多，所以隔了两个礼拜才把照片放出来：</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/72613.73155010.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/73285.14354110.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/76637.83786010.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/35433.11161039.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/36387.67654490.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/37287.31461611.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/37732.98844677.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/39367.67400582.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/40208.31274789.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/41844.05683837.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/43751.55977763.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/49785.42328800.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/50714.02282273.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/51250.52614088.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/56530.58220503.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/57627.08782906.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/58475.77767072.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/58961.09972379.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/59817.22538296.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/61110.36296995.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/61949.91296267.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/62938.98377786.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/35468.48751225.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/36161.81448153.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/43434.97543569.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/44183.41447425.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/46654.23101768.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/48670.23327097.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/58859.31841793.jpg" border=0></DIV>
<br/>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-10/59921.19692612.jpg" border=0></DIV><A href="http://blog.excelhome.net/UploadFiles/2008-10/37287.31461611.jpg"></A><A href="http://blog.excelhome.net/UploadFiles/2008-10/73285.14354110.jpg"></A>]]></description>
</item><item>
<title><![CDATA[全新解决：PHP has encountered an Access Violation]]></title>
<link>http://blog.excelhome.net/user1/kevin/archives/2008/1089.html</link>
<author>Kevin</author>
<pubDate>2008-10-13 10:37:00</pubDate>
<description><![CDATA[<DIV>大概没有人在玩PHP的过程中会不曾遇到“PHP has encountered an Access Violation…”错误吧？尤其是像这种完全没有接触过Microsoft以外平台的人来说，第一次着实被吓得不轻，在花了三个小时也没解决后，差点放弃了。</DIV><BR>
<DIV>习惯了Windows平台的全GUI操作模式，对于完全需要手工配置的PHP + MYSQL ，实在是不习惯。好有很多东西的原理是相同的，熟悉起来也不是太难的事情。</DIV><BR>
<DIV>在尝试过PHP和MYSQL的自动安装和手动安装后，在经过不同版本的组合试验后，经典的“PHP has encountered an Access Violation…”终于不请自来，PHPMYADMIN不可用，DZ也不可用。上网一搜，同病相怜的人还真不少，而且大家都纷纷转载某位大侠的文章，我也摘抄一下吧，只是抱歉无法知道原作者是谁。</DIV><BR>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<DIV><SPAN style="COLOR: #8b4513">这个问题不是很好处理，困惑了很多站长非常时间了<BR>主要出现在windows主机的服务器上。<BR>在php官方，</SPAN><A href="http://bugs.php.net/"><SPAN style="http://blog.excelhome.net/COLOR: #8b4513">http://bugs.php.net/</SPAN></A><BR><SPAN style="COLOR: #8b4513">也能够查到两三千页的报告，他们官方也是束手无策，经过了11个小版本后，还是没有彻底解决<BR></SPAN><A href="http://bugs.php.net/search.php?cmd=display&amp;search_for=PHP+has+encountered+an+Access&amp;x=8&amp;y=9"><SPAN style="http://blog.excelhome.net/COLOR: #8b4513">http://bugs.php.net/search.php?cmd=display&amp;search_for=PHP+has+encountered+an+Access&amp;x=8&amp;y=9</SPAN></A></DIV>
<DIV><SPAN style="COLOR: #8b4513">目前我提供一下这几年我维护经验，我的一些民间解决办法</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">第一种可能：</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">去掉 php中 eaccelerator 的扩展<BR>这样做能够解决您的问题，不过可能会加重系统负担<BR>因为eaccelerator主要是为了节省系统资源的东西</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">具体做法是找到php.ini<BR>如果是我帮您配置的，一般在c:/php/php.ini或者 c:/winnt/php.ini 或者c:/windows/php.ini</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">去掉</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">zend_extension_ts="C:\php\extensions\eaccelerator_win_xxx.dll"<BR>eaccelerator.shm_size="16"<BR>eaccelerator.cache_dir="c:\temp"<BR>eaccelerator.enable="1"<BR>eaccelerator.optimizer="1"<BR>eaccelerator.check_mtime="1"<BR>eaccelerator.debug="0"<BR>eaccelerator.filter=""<BR>eaccelerator.shm_max="0"<BR>eaccelerator.shm_ttl="0"<BR>eaccelerator.shm_prune_period="0"<BR>eaccelerator.shm_only="0"<BR>eaccelerator.compress="1"<BR>eaccelerator.compress_level="9"</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">ea主要是在unix环境下开发的，但是作者忽略到windows实际上不像u主机那样，是没有u主机的那种内存共享机制的<BR>这个bug已经提交给他们了，希望0.9.5能够解决</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">当然，如果您的机器这个问题不严重，建议还是保留，ea是一块非常优秀的Php缓存+加速软件<BR>配合zo使用，将会降低系统负担 50%-80%左右，提高负载能力、速度和效率 200%左右</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513"></SPAN>&nbsp;</DIV>
<DIV><BR><SPAN style="COLOR: #8b4513">第二种可能</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">session_save_path 需要设定一个实际的物理路径，并且该目录需要everyone的所有权限，类似U主机的0777</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513"></SPAN>&nbsp;</DIV>
<DIV><BR><SPAN style="COLOR: #8b4513">第三种可能<BR>c:/winnt/temp 或者 c:/windows/temp<BR>也需要everyone的所有权限，类似U主机的0777</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513"></SPAN>&nbsp;</DIV>
<DIV><BR><SPAN style="COLOR: #8b4513">第四种可能<BR>您的内存严重不足，查看一下，如果有问题，请加内存，最好是一次加两条<BR>比如加1G内存，最好是加2条一模一样的512M。否则没有启用双通道，效果也很一般</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513"></SPAN>&nbsp;</DIV>
<DIV><BR><SPAN style="COLOR: #8b4513">第五种可能<BR>ZendOptimizer和php的搭配不是很好<BR>换个版本试试看<BR>目前比较稳定的搭配是<BR>php4.3.11+zo 2.5.10a<BR>或者php4.4.1+zo 3.0 beta2</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513"></SPAN>&nbsp;</DIV>
<DIV><BR><SPAN style="COLOR: #8b4513">第六种可能</SPAN></DIV>
<DIV><SPAN style="COLOR: #8b4513">这种多属于用win2003的用户<BR>他们在应用池中设定了限制<BR>比如多长时间回收，最大使用内存多少等等<BR>这些设置势必造成这个经典的php错误<BR>木头经过数以百计的测试，敢担保问题会出现在这里。</SPAN></DIV></BLOCKQUOTE>
<DIV dir=ltr>这篇文章的作者应该具有相当丰富的经验，可惜他的这些经验目前对于我都没有帮助，也就是说以上的六种可能在我这里都不存在。</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>伴着这个问题上床睡觉，但难以入眠，反复对比这几天没有遇到此问题的各种配置，思索着可能的第七种原因。</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>出现这个问题，在我重装Windows Server 2003，全新下载php+mysql+zend并安装的环境下。服务器系统本身是肯定没有问题的，在出错的情况下，完全卸载php+mysql+zend，并换上xampp却是正常的，说明DZ没问题，并再次说明系统没有问题。</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>出错的主要是phpmyadmin和DZ，而这两者都是需要和mysql连接的，是否mysql有问题？</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>第二天早上顾不得吃早饭就查看并保存了xampp下面的phpinfo，然后重新装上昨天出问题的组合，查看phpinfo，一对比，最主要的区别就在于mysql的版本。xampp带的是5.022，我自己安装的是5.124。</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>卸载mysql5.124，重新下载一个mysql5.022装上，还是不行。再次检查phpinfo，发现mysql模块的版本仍然是5.124。</DIV>
<DIV dir=ltr>于是停止运行mysql和IIS，把mysql安装目录下面的libmysql.dll分别覆盖到php安装目录和%win%\system32下面，再重启MYSQL和IIS，问题解决！</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><STRONG>感叹1：开源软件是好，但是太缺乏标准和统一性，过多的版本让人会难以适从。偶这还是WIMP，如果是真正的LAMP，版本之间的组合可能会更多，怎么选呢？</STRONG></DIV>
<DIV dir=ltr><STRONG></SPAN></STRONG></DIV>
<DIV dir=ltr><STRONG>感叹2：软件并非越新越好，合适的就是最好的。</STRONG></SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[在一个列表框中显示另一列表框中的具体内容]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1088.html</link>
<author>fanjy</author>
<pubDate>2008-10-11 12:10:00</pubDate>
<description><![CDATA[<P>有时，需要选中某列表框的的项目后，在另一列表框中显示该项目的具体内容，如下图1所示。<BR><A title=listboxselect1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxselect1.png"><IMG alt=listboxselect1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxselect1.png"></A><BR>图1：两个列表框实现内容匹配<BR>“专业工程”包括“建筑工程、装饰装修工程……”等，当选中项目列表框中的专业工程后，在分类列表框中显示相应的内容。同理，选择项目列表框中的措施项目后，在分类列表框中也会显示相应的内容。<BR><SPAN style="http://blog.excelhome.net/COLOR: #0000ff">第一步：准备数据<BR></SPAN>如下图2所示，在工作表Sheet1中输入下列数据。<BR><A title=listboxselect2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxselect2.png"><IMG alt=listboxselect2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxselect2.png"></A><BR>图2：基础数据<BR>将A列的数据命名为“项目”，将B列的数据命名为“专业工程”，将C列的数据命名为“措施项目”。注意，B列和C列的名称应与A列的数据相一致。<BR><SPAN style="http://blog.excelhome.net/COLOR: #0000ff">第二步：准备窗体界面</SPAN><BR>如图1所示，在用户窗体中放置两个标签控件、两个列表框控件，并将两个列表框控件分别命名为lbxItem和lbxCategory。<BR><SPAN style="COLOR: #0000ff">第三步：输入代码<BR></SPAN>在用户窗体代码模块中，输入下列代码：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> lbxItem_Change()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> rngCategory <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> rngCategory = Sheet1.Range(Me.lbxItem.Value)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.lbxCategory.List = rngCategory.Value<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> UserForm_Initialize()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> rngItem <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> rngItem = Sheet1.Range(”项目”)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.lbxItem.List = rngItem.Value<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN><BR><SPAN style="COLOR: #00007f"><SPAN style="COLOR: #000000">运行后的最终效果如图1所示。当然，您可以在A列添加更多的项目数据，然后在C列、D列……添加相应的内容并以A列的数据命名，从而扩展本实例</SPAN>。</SPAN>
<P></P>
<P>注:本文同时发表于<A href="http://www.excelperfect.com">完美Excel</A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></P></SPAN></P>
<P>&nbsp;</P>]]></description>
</item><item>
<title><![CDATA[仿Google输入框——快速查找列表框中的项目]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1087.html</link>
<author>fanjy</author>
<pubDate>2008-10-7 15:28:00</pubDate>
<description><![CDATA[<P>在使用Google搜索时，当在输入框中输入时，下方会出现相关条目供选择，以方便快速输入。下面，我们在Excel用户窗体中使用文本框和列表框来仿造这样的效果。<BR>有时，当用户窗体中的列表框包含大量的项目时，我们必须拖动其滚动条来查找相应的项目。然而，可以利用一些技巧快速找到所需的项目。<BR>如图1所示，在用户窗体中，放置有两个控件，上方为一名为txtFind的文本框，下方为一名为lbxData的列表框，列表框的数据来自工作表Data的列A中的数据。<BR><A title=ListBoxFilter1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter1.png"><IMG alt=ListBoxFilter1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter1.png"></A><BR>图1<BR>当我在上方的文本框txtFind中输入“excel vba”后，下方的列表框lbxData将只出现包含有“excel vba”的条目，如图2所示。<BR><A title=ListBoxFilter2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter2.png"><IMG alt=ListBoxFilter2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter2.png"></A><BR>图2<BR>实现上述效果的VBA代码如下：<BR><SPAN style="http://blog.excelhome.net/FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Option</SPAN> <SPAN style="COLOR: #00007f">Explicit</SPAN><BR><SPAN style="COLOR: #00007f">Dim</SPAN> varData
<P></P>
<P><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> txtFind_Change()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> i <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Long</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> strFind <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">String</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;strFind = “*” &amp; UCase(Me.txtFind.Text) &amp; “*”<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">With</SPAN> Me.lbxData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.List = varData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">For</SPAN> i = .ListCount - 1 <SPAN style="COLOR: #00007f">To</SPAN> 0 <SPAN style="COLOR: #00007f">Step</SPAN> -1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> <SPAN style="COLOR: #00007f">Not</SPAN> UCase(.List(i)) <SPAN style="COLOR: #00007f">Like</SPAN> strFind <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.RemoveItem i<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Next</SPAN> i<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">With</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></P>
<P><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> UserForm_Initialize()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> lLast <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Long</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> rng <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;lLast = Sheet1.Range(”A” &amp; Cells.Rows.Count).End(xlUp).Row<BR>&nbsp;&nbsp;&nbsp;&nbsp;varData = Sheet1.Range(”A1:A” &amp; lLast)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.lbxData.List = varData<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></P></SPAN></P>
<P><BR><SPAN style="FONT-FAMILY: 宋体, MS Song">我们可以将UserForm_Initialize代码块中的代码Me.lbxData.List = varData删除，这样当在文本框txtFind中输入时，只要输入的数据符合列表框包含的数据，列表框中将自动出现相关条目并随着输入的进一步具体条目相应减少至完全匹配输入的数据，如图3、4、5所示。<BR></SPAN><A title=ListBoxFilter3 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter3.png"><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 宋体, MS Song"><IMG alt=ListBoxFilter3 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter3.png"></SPAN></A><BR><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 宋体, MS Song">图3：初始化后的用户窗体<BR></SPAN><A title=ListBoxFilter4 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter4.png"><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 宋体, MS Song"><IMG alt=ListBoxFilter4 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter4.png"></SPAN></A><BR><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 宋体, MS Song">图4：开始输入后，列表框中的条目随着文本框中输入的数据而变化<BR></SPAN><A title=ListBoxFilter5 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter5.png"><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 宋体, MS Song"><IMG alt=ListBoxFilter5 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/10/listboxfilter5.png"></SPAN></A><BR><SPAN style="http://blog.excelhome.net/FONT-FAMILY: 宋体, MS Song">图5：文本框中的数据越具体，列表框中的条目也越少且与文本框输入相匹配<BR>此外，在Excel 2000及以后的版本中，VBA提供了一个Filter函数，使用该函数，也能实现上述效果。代码如下：<BR></SPAN><SPAN style="COLOR: #00007f; FONT-FAMILY: Courier">Option</SPAN> <SPAN style="COLOR: #00007f">Explicit</SPAN><BR><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> txtFind_Change()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> varData <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Variant</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;varData = Range(”A1″, Cells(Rows.Count, 1).End(xlUp)).Value<BR>&nbsp;&nbsp;&nbsp;&nbsp;varData = Application.Transpose(varData)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;varData = Filter(SourceArray:=varData, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Match:=txtFind.Value, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Include:=True, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compare:=vbTextCompare)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.lbxData.List = varData</P>
<P><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></P>
<P><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> UserForm_Initialize()</P>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;Me.lbxData.List = Range(”A1″, Cells(Rows.Count, 1).End(xlUp)).Value<BR>End <SPAN style="COLOR: #00007f">Sub</SPAN><BR></DIV>
<DIV>注:同时发表于<A href="http://www.excelperfect.com">完美Excel</A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></DIV>]]></description>
</item><item>
<title><![CDATA[ActiveX:使用VBA在工作表中添加ActiveX控件]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1084.html</link>
<author>fanjy</author>
<pubDate>2008-9-27 13:21:00</pubDate>
<description><![CDATA[要使用VBA从控件工具箱（ActiveX控件）中添加控件，可以使用OLEObjects集合的Add方法。该方法包含有大量的参数，包括
ClassType、Top、Left、Width和Height等。其中，ClassType参数代表的一些常见的ActiveX控件的名称如下：<br>
Forms.Checkbox.1（复选框）<br>
Forms.Combobox.1（组合框）<br>
Forms.Optionbutton.1（选项按钮）<br>
Forms.Textbox.1（文本框）<br>
Forms.Listbox.1（列表框）<br>
Forms.Commandbutton.1（命令按钮）<br>
下面举一个例子，提供一些思路，并供探讨。如下图所示，要求在每项工作前面都添加复选框，并且当用户选中复选框后，自动隐藏该复选框所在的行。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/addactivexcontrolcheckbox1.png" title="http://blog.excelhome.net/AddActiveXControlCheckbox1"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/addactivexcontrolcheckbox1.png" alt="http://blog.excelhome.net/AddActiveXControlCheckbox1"></a><br>
下面的代码用来添加复选框：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Sub</span> RefreshList()<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Dim</span> oCheck <span style="color: rgb(0, 0, 127);">As</span> OLEObject<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Dim</span> rCell <span style="color: rgb(0, 0, 127);">As</span> Range, rRange <span style="color: rgb(0, 0, 127);">As</span> Range<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Dim</span> lLastRow <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 127, 0);">‘清除已经存在于工作表中的复选框</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> oCheck <span style="color: rgb(0, 0, 127);">In</span> Sheet1.OLEObjects<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oCheck.Delete<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Next</span> oCheck<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;lLastRow = Sheet1.Range("B" &amp; Cells.Rows.Count).End(xlUp).Row<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Set</span> rRange = Sheet1.Range("B2:B" &amp; lLastRow)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> rCell <span style="color: rgb(0, 0, 127);">In</span> rRange<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rCell.RowHeight = 14<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">With</span> Sheet1.OLEObjects.Add(ClassType:="Forms.Checkbox.1", _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Top:=rCell.Top, Left:=rCell.Offset(0, -1).Left, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height:=rCell.Height, Width:=rCell.Offset(0, -1).Width)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Object.Caption = ""<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LinkedCell = rCell.Offset(0, -1).Address<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Object.Value = <span style="color: rgb(0, 0, 127);">False</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">With</span><br>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 127);">Next</span> rCell<br>&nbsp;&nbsp;&nbsp;&nbsp; <br><span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
上述代码首先删除工作表中所有已存在的复选框，因为本示例已知道工作表中无其他控件，所以直接删除，如果无法判断是否有其他控件而只需删除复选框，可以加上一个条件判断语句：<br>
If TypeName(oCheck.Object)="CheckBox" Then<br>
这样，仅删除复选框。<br>
然后，在确定数据范围后，在第一列添加复选框并设置了一些属性值以方便以后操作。这里，有一些通用的适合于其他控件的属性，也有一些专属于复选框的属性。<br>
下面的代码用于隐藏复选框选中后的行：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Sub</span> HideRows()<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Dim</span> rCell <span style="color: rgb(0, 0, 127);">As</span> Range, rRange <span style="color: rgb(0, 0, 127);">As</span> Range<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Dim</span> lLastRow <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;lLastRow = Sheet1.Range("B" &amp; Cells.Rows.Count).End(xlUp).Row<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Set</span> rRange = Sheet1.Range("B2:B" &amp; lLastRow)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> rCell <span style="color: rgb(0, 0, 127);">In</span> rRange<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">If</span> rCell.Offset(0, -1).Value <span style="color: rgb(0, 0, 127);">Then</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rCell.EntireRow.Hidden = <span style="color: rgb(0, 0, 127);">True</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 0, 127);">Next</span> rCell<br>&nbsp;&nbsp;&nbsp;&nbsp;<br><span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span><br></span><br>
上述代码遍历设定区域的每行并隐藏已复选的行。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/addactivexcontrolcheckbox2.png" title="http://blog.excelhome.net/AddActiveXControlCheckbox2"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/addactivexcontrolcheckbox2.png" alt="http://blog.excelhome.net/AddActiveXControlCheckbox2"></a><br>注:同时发表于<a style="color: rgb(0, 0, 205); font-weight: bold;" href="http://www.excelperfect.com">完美Excel</a>:<a href="http://www.excelperfect.com">http://www.excelperfect.com</a><br>]]></description>
</item><item>
<title><![CDATA[在用户窗体中查看满足条件的记录]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1081.html</link>
<author>fanjy</author>
<pubDate>2008-9-23 13:05:00</pubDate>
<description><![CDATA[<p>在《<a href="http://www.excelperfect.com/2008/09/06/linkuserformandworksheet/" target="http://blog.excelhome.net/_blank"><span style="font-weight: bold; color: rgb(0, 0, 255);">链接用户窗体与工作表</span></a>》及《<a href="http://www.excelperfect.com/2008/09/20/linkuserformandworksheets/" target="http://blog.excelhome.net/_blank"><span style="font-weight: bold; color: rgb(0, 0, 255);">链接用户窗体与工作表（续）</span></a>》中曾介绍了在用户窗体中显示工作表中的数据的方法。这里，介绍另一种情况，即在用户窗体中查看满足特定条件的记录。如下图所示，表中姓名为张三的共三条记录，在姓名右侧文本框输入后，自动显示第1条记录，可以单击前一条和后一条按钮来回显示记录。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/viewrangedatainuserform.png" title="http://blog.excelhome.net/ViewRangeDataInUserForm"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/viewrangedatainuserform.png" alt="http://blog.excelhome.net/ViewRangeDataInUserForm"></a><br>
首先使用Find方法建立想要显示的记录区域，然后使用Property
Set语句创建的自定义属性将记录区域传递给用户窗体。要确保记录区域的引用与工作表中出现的顺序相同，在Find方法中使用了After参数并将其值设
置为搜索区域的最后一个单元格，这样Find方法将从单元格区域的第一个单元格开始搜索。<br>
将用户窗体命名为UPos，其中的一些控件及其名称为：姓名文本框（txtName）、工作内容文本框（txtWork）、共有记录的文本框（txtY）、第几条记录的文本框（txtX）、前一条按钮（cmdPrev）、后一条按钮（cmdNext）。<br>
在标准模块中输入下列代码：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Sub</span> ShowPos()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> ufPos <span style="color: rgb(0, 0, 127);">As</span> UPos <span style="color: rgb(0, 127, 0);">‘用户窗体变量</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> rFound <span style="color: rgb(0, 0, 127);">As</span> Range <span style="color: rgb(0, 127, 0);">‘存储当前找到的单元格</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> rNameRange <span style="color: rgb(0, 0, 127);">As</span> Range <span style="color: rgb(0, 127, 0);">‘要搜索的单元格区域</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> sFirstAdd <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span> <span style="color: rgb(0, 127, 0);">‘第一个被找到的单元格的地址</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> rAllFound <span style="color: rgb(0, 0, 127);">As</span> Range <span style="color: rgb(0, 127, 0);">‘所有找到的单元格</span></span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘从用户处获取数据,这里为了介绍方便采用了硬编码</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 0, 127);">Const</span> strName <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span> = "张三"</span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Set</span><span style="font-family: Courier;"> rNameRange = Sheet1.Range("A2:A8")</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘查找</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 0, 127);">Set</span> rFound = rNameRange.Find(strName, rNameRange(rNameRange.Cells.Count), xlValues, xlWhole)</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘如果找到</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 0, 127);">If</span> <span style="color: rgb(0, 0, 127);">Not</span> rFound <span style="color: rgb(0, 0, 127);">Is</span> <span style="color: rgb(0, 0, 127);">Nothing</span> <span style="color: rgb(0, 0, 127);">Then</span><br>
<span style="color: rgb(0, 127, 0);">‘存储第一个找到的单元格的地址</span><br>
sFirstAdd = rFound.Address<br>
<span style="color: rgb(0, 127, 0);">‘添加找到的单元格到所有找到的单元格区域中</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> rAllFound = rFound<br>
<span style="color: rgb(0, 127, 0);">‘继续查找直到循环到开始处为止</span><br>
<span style="color: rgb(0, 0, 127);">Do</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> rFound = rNameRange.FindNext(rFound)<br>
<span style="color: rgb(0, 0, 127);">If</span> rFound.Address &lt;&gt; sFirstAdd <span style="color: rgb(0, 0, 127);">Then</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> rAllFound = Union(rAllFound, rFound)<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">Loop</span> <span style="color: rgb(0, 0, 127);">Until</span> rFound.Address = sFirstAdd</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘创建用户窗体</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 0, 127);">Set</span> ufPos = <span style="color: rgb(0, 0, 127);">New</span> UPos</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘传递单元格区域到用户窗体</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 0, 127);">Set</span> ufPos.AllFound = rAllFound</span></p>
<p><span style="font-family: Courier;">ufPos.Initialize<br>
ufPos.Show<br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
MsgBox "没有找到匹配的数据!"<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Set</span><span style="font-family: Courier;"> ufPos = <span style="color: rgb(0, 0, 127);">Nothing</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">End</span><span style="font-family: Courier;"> <span style="color: rgb(0, 0, 127);">Sub</span><br>
</span><br>
在用户窗体模块中，声明一些模块级的变量来包含传递的区域以及当前显示的区域。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> mrAllFound <span style="color: rgb(0, 0, 127);">As</span> Range<br>
<span style="color: rgb(0, 0, 127);">Private</span> mrCurrent <span style="color: rgb(0, 0, 127);">As</span> Range</span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Property</span><span style="font-family: Courier;"> <span style="color: rgb(0, 0, 127);">Set</span> AllFound(RHS <span style="color: rgb(0, 0, 127);">As</span> Range)<br>
<span style="color: rgb(0, 0, 127);">Set</span> mrAllFound = RHS<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span><br>
</span><br>
在显示用户窗体之前，要初始化该窗体，将查找到的第一条记录填充窗体中的相应控件。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Public</span> <span style="color: rgb(0, 0, 127);">Sub</span> Initialize()<br>
<span style="color: rgb(0, 127, 0);">‘设置当前记录为第一条记录</span><br>
<span style="color: rgb(0, 0, 127);">If</span> <span style="color: rgb(0, 0, 127);">Not</span> mrAllFound <span style="color: rgb(0, 0, 127);">Is</span> <span style="color: rgb(0, 0, 127);">Nothing</span> <span style="color: rgb(0, 0, 127);">Then</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> mrCurrent = mrAllFound(1)<br>
Me.txtName.Text = mrCurrent.Value<br>
Me.txtWork.Text = mrCurrent.Next.Value<br>
Me.txtY.Text = mrAllFound.Cells.Count<br>
Me.txtX.Text = 1<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
前一条按钮和后一条按钮使用FindPrevious方法和FindNext方法将记录移动到合适的位置。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> cmdNext_Click()<br>
<span style="color: rgb(0, 127, 0);">‘设置当前单元格</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> mrCurrent = mrAllFound.FindNext(mrCurrent)</span></p>
<p><span style="font-family: Courier;">Me.txtName.Text = mrCurrent.Value<br>
Me.txtWork.Text = mrCurrent.Next.Value</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘增加计数器值</span><span style="font-family: Courier;"><br>
Me.txtX.Text = Me.txtX.Text + 1<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Private</span><span style="font-family: Courier;"> <span style="color: rgb(0, 0, 127);">Sub</span> cmdPrev_Click()<br>
<span style="color: rgb(0, 0, 127);">Set</span> mrCurrent = mrAllFound.FindPrevious(mrCurrent)<br>
Me.txtName.Text = mrCurrent.Value<br>
Me.txtWork.Text = mrCurrent.Next.Value<br>
Me.txtX.Text = Me.txtX.Text - 1<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
最后，当第几条文本框中的值变化时，启用或禁用按钮以便使得用户不能试图到达不存在的记录。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> txtX_Change()<br>
<span style="color: rgb(0, 127, 0);">‘启用/禁用按钮</span><br>
<span style="color: rgb(0, 0, 127);">If</span> Me.txtX.Text = 1 <span style="color: rgb(0, 0, 127);">Then</span><br>
Me.cmdPrev.Enabled = <span style="color: rgb(0, 0, 127);">False</span><br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
Me.cmdPrev.Enabled = <span style="color: rgb(0, 0, 127);">True</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">If</span><span style="font-family: Courier;"> Me.txtX.Text = Me.txtY.Text <span style="color: rgb(0, 0, 127);">Then</span><br>
Me.cmdNext.Enabled = <span style="color: rgb(0, 0, 127);">False</span><br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
Me.cmdNext.Enabled = <span style="color: rgb(0, 0, 127);">True</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
注：本文整理自Dick的博客，稍作修改，供参考。</p>]]></description>
</item><item>
<title><![CDATA[链接用户窗体与工作表(续)]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1080.html</link>
<author>fanjy</author>
<pubDate>2008-9-20 15:40:00</pubDate>
<description><![CDATA[<p>本文是《<span style="font-weight: bold; color: rgb(0, 0, 255);"><a href="http://www.excelperfect.com/2008/09/06/linkuserformandworksheet/" target="http://blog.excelhome.net/_blank">链接用户窗体与工作表</a></span>》一文的续篇，在阅读本文之前，请先阅读《<a href="http://www.excelperfect.com/2008/09/06/linkuserformandworksheet/" target="http://blog.excelhome.net/_blank"><span style="font-weight: bold; color: rgb(0, 0, 255);">链接用户窗体与工作表</span></a>》。<br>
现在，我们需要使该用户窗体在原有功能的基础上增加搜索功能。当选择字段并输入相应的数据后，能搜索到记录并显示在用户窗体中，如图4所示。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet4.png" title="http://blog.excelhome.net/LinkUserformAndWorksheet4"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet4.png" alt="http://blog.excelhome.net/LinkUserformAndWorksheet4"></a><br>
图4：在用户窗体中增加搜索功能<br>
在原窗体中添加一个框架，在框架内添加组合框、文本框和命令按钮，各控件的名称和Tag属性如下：<br>
名称（Tag属性）<br>
frmFind()<br>
cmbFind()<br>
txtFind()<br>
cmdFind(tgFind)<br>
其中，括号内为空表明没有设置该控件的Tag属性。<br>
为了使用户能搜索任一字段，因此添加了组合框cmbFind。用户可以首先从中选择要搜索的字段，然后在右侧的文本框中输入要搜索数据的全部或部分内容，最后当单击查找按钮后在下方显示该条记录的信息。<br>
要填充组合框，在用户窗体的初始化事件Initialize的代码中添加下列语句：<br>
<span style="font-family: Courier;">Me.cmbFind.List = Application.Transpose(wksContacts.Range("ColHeads").Value)</span><br>
其中，ColHeads为工作表中标题行区域的名称。此时，在将该名称区域的数据放置到组合框之前，需要将列数据转置为行数据。<br>
接下来，确保查找按钮处于禁用状态，直到在组合框和文本框中含有相应的数据。因此，添加了两个事件过程和一个启用/禁用按钮控件的过程。代码如下：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> cmbFind_Change()<br>
<span style="color: rgb(0, 127, 0);">‘如果用户已选择组合框中的项目或者在文本框中输入内容</span><br>
<span style="color: rgb(0, 127, 0);">‘那么启用查找按钮</span><br>
<span style="color: rgb(0, 0, 127);">If</span> Me.cmbFind.ListIndex &gt; -1 And Len(Me.txtFind.Text) &gt; 0 <span style="color: rgb(0, 0, 127);">Then</span><br>
EnableControls "tgFind"<br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
EnableControls "tgFind", <span style="color: rgb(0, 0, 127);">True</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span></p>
<p><span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> txtFind_Change()<br>
<span style="color: rgb(0, 0, 127);">If</span> Me.cmbFind.ListIndex &gt; -1 And Len(Me.txtFind.Text) &gt; 0 <span style="color: rgb(0, 0, 127);">Then</span><br>
EnableControls "tgFind"<br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
EnableControls "tgFind", <span style="color: rgb(0, 0, 127);">True</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span></p>
<p><span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> EnableControls(sTag <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span>, _<br>
<span style="color: rgb(0, 0, 127);">Optional</span> bDisable <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Boolean</span> = <span style="color: rgb(0, 0, 127);">False</span>)<br>
<span style="color: rgb(0, 0, 127);">Dim</span> ctl <span style="color: rgb(0, 0, 127);">As</span> Control<br>
<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> ctl <span style="color: rgb(0, 0, 127);">In</span> Me.Controls<br>
<span style="color: rgb(0, 0, 127);">If</span> ctl.Tag = sTag <span style="color: rgb(0, 0, 127);">Then</span><br>
ctl.Enabled = <span style="color: rgb(0, 0, 127);">Not</span> bDisable<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">Next</span> ctl<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span></p>
<p>查找按钮cmdFind的代码如下：</p>
<p><span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> cmdFind_Click()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> lCol <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> rFound <span style="color: rgb(0, 0, 127);">As</span> Range</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘因为组合框的ListIndex属性起始值为0,因此加1以确定搜索列</span><span style="font-family: Courier;"><br>
lCol = Me.cmbFind.ListIndex + 1</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘查找包含文本框中文本的第一个单元格</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 127, 0);">‘Lookat参数的值为xlPart表明不需要完全匹配</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> rFound = wksContacts.Columns(lCol).Find(What:=Me.txtFind.Text, _<br>
LookIn:=xlValues, _<br>
LookAt:=xlPart)</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘如果找到记录则改变滚动条到该记录</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 127, 0);">‘否则显示一条新记录</span><br>
<span style="color: rgb(0, 0, 127);">If</span> <span style="color: rgb(0, 0, 127);">Not</span> rFound <span style="color: rgb(0, 0, 127);">Is</span> <span style="color: rgb(0, 0, 127);">Nothing</span> <span style="color: rgb(0, 0, 127);">Then</span><br>
Me.scbContact.Value = rFound.Row - 1<br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
Me.scbContact.Value = Me.scbContact.Max<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span></p>
<p>至此，新增功能完成。当然，您可以按需要再添加其他功能，以丰富该窗体。</p>]]></description>
</item><item>
<title><![CDATA[Excel的条件格式技术(3)]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1079.html</link>
<author>fanjy</author>
<pubDate>2008-9-15 14:06:00</pubDate>
<description><![CDATA[<p>Excel的条件格式技术前面的文章链接：</p>
<ul><li><a href="http://www.excelperfect.com/2008/08/28/excelconditionformat1/" target="http://blog.excelhome.net/_blank">Excel的条件格式技术(1</a>)</li><li><a href="http://www.excelperfect.com/2008/09/10/excelconditionalformat2/" target="http://blog.excelhome.net/_blank">Excel的条件格式技术(2)</a></li></ul>
<p>本文的内容：近期在进行造价工程师考试的复习，其中有许多内容涉及到关于进度图表的，联想到Excel很方便制作这样的图表。这里，先使用条件格式来简单制作这样的图表，以后的文章将有专门使用Excel图表技术制作进度图（甘特图）的内容。<br>
<span style="color: rgb(0, 0, 255);">示例3：绘制进度图表</span><br>
灵活使用Excel的条件格式，可以绘制简单的工作进度图表。例如，要绘制如图12所示的进度图，其中开始和结束分别代表项目开始和结束的周。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart.png" title="http://blog.excelhome.net/ConditionalFormatByGanttChart"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart.png" alt="http://blog.excelhome.net/ConditionalFormatByGanttChart"></a><br>
图12：完成后的进度图效果。在项目之间增加了空行，使图示更清晰。<br>
完成图12的步骤如下：<br>
第1步：在工作表中输入数据，并进行相应的格式化操作。<br>
第2步：选择单元格区域D3：O15，单击“格式——条件格式”。<br>
第3步：在“条件格式”对话框中选择“公式”并输入下列公式：<br>
=AND(D$2&gt;=$B3,D$2&lt;=$C3)<br>
然后，单击“格式”按钮，应用相应的格式，如图13所示。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart1.png" title="http://blog.excelhome.net/ConditionalFormatByGanttChart1"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart1.png" alt="http://blog.excelhome.net/ConditionalFormatByGanttChart1"></a><br>
图13：设置条件格式<br>
单击“确定”按钮后，完成最终的进度图如图12所示。此时，如果在工作表中更改开始和结束时间，进度条会相应的更改。<br>
如果需要为不同项目的进度条应用不同的格式或颜色，则需要使用Excel 2007。在Excel 2007中提供了更为丰富的条件格式选择和更优美的界面，我们将详细探讨。这里，利用Excel 2007，为图12所示的进度图制作更丰富的效果。最终效果如图14所示。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart3.png" title="http://blog.excelhome.net/ConditionalFormatByGanttChart3"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart3.png" alt="http://blog.excelhome.net/ConditionalFormatByGanttChart3"></a><br>
图14：设置具有不同颜色的进度条<br>
完成图14的步骤如下：<br>
第1步：在Excel 2007工作表中输入数据，并进行相应的格式化操作。<br>
第2步：选择单元格区域D3：O3。在“开始”选项卡中选择“条件格式——管理规则”，打开“条件格式规则管理器”对话框。单击“新建规则”按钮，打开“新建格式规则”对话框。选择“使用公式确定要设置格式的单元格”，在“为符合此公式的值设置格式”中输入公式：<br>
=AND($B3&lt;=D$2,$C3&gt;=D$2)<br>
单击“格式”按钮，在“填充”选项卡中选择红色，单击“确定”按钮关闭“设置单元格格式”对话框。单击“确定”按钮关闭“新建格式规则”对话框，此时的对话框如图15所示。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart2.png" title="http://blog.excelhome.net/ConditionalFormatByGanttChart2"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformatbyganttchart2.png" alt="http://blog.excelhome.net/ConditionalFormatByGanttChart2"></a><br>
图15：设置规则<br>
第3步：对单元格区域D5：O5、D7：O7、D9：O9、D11：O11、D13：O13、D15：O15分别重复第2步的操作。但是，在输入公式时要针对具体的行进行修改，并对格式填充颜色进行相应的更改。<br>
完成后的进度图如图14所示。</p>]]></description>
</item><item>
<title><![CDATA[有趣的Excel图表——气泡图]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1078.html</link>
<author>fanjy</author>
<pubDate>2008-9-12 13:52:00</pubDate>
<description><![CDATA[下面的例子来源于John Walkenbach的《Excel 2007 Bible》，用气泡图绘制了一只老鼠的脸，非常的有趣。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/bubblechartmouse.png" title="http://blog.excelhome.net/BubbleChartMouse"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/bubblechartmouse.png" alt="http://blog.excelhome.net/BubbleChartMouse"></a><br>
在这里贴出来，让大家感受一下Excel图表的魅力。<br>
当然，若有制作出这只老鼠脸，要不断地调整表中的数据和气泡大小，且要调整颜色，才能达到良好的效果，还是要一番功夫的哟！<br>同时发表于<a target="_blank" href="http://www.excelperfect.com">完美Excel</a>:<a target="http://blog.excelhome.net/_blank" href="http://www.excelperfect.com">http://www.excelperfect.com</a><br>]]></description>
</item><item>
<title><![CDATA[Excel的条件格式技术(2)]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1077.html</link>
<author>fanjy</author>
<pubDate>2008-9-10 19:47:00</pubDate>
<description><![CDATA[本文接着<a href="http://www.excelperfect.com/2008/08/28/excelconditionformat1/" target="http://blog.excelhome.net/_blank">Excel的条件格式技术（1）</a>，再给大家进一步介绍Excel条件格式的强大功能。<br>
下面借用自已在学习中看到的关于条件格式的一些示例，对条件格式作进一步详细的介绍。<br>
<span style="color: rgb(0, 0, 255);">示例1：标识包含文本的单元格</span><br>
如图6所示，在单元格区域B2：C4中包含数字和文本，现在要对该区域中的文本应用特定的格式，以标识包含文本的单元格。选择B2：C4，单击“格式─—
条件格式”，在“条件格式”对话框最左侧的组合框中选择“公式”，在右侧输入公式“=ISTEXT(B2)”，单击“格式”，设置字体为粗体，底纹为灰
色。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformat5.png" title="http://blog.excelhome.net/DiffData0"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/conditionalformat5.png" alt="http://blog.excelhome.net/DiffData0"></a><br>
图6：对包含文本的单元格应用格式<br>
如果要对不同的单元格区域应用该条件格式，那么ISTEXT函数的参数应该是该区域左上角的单元格。<br>
<span style="color: rgb(0, 0, 255);">示例2：标识两个列表中不相同的数据</span><br>
有时，要比较两个列表区域中的不同数据，并将该数据所在的单元格标识出来。如图7所示，有两个列表区域A1：B12和D1：E12，现在要求找出区域D1：E12中与区域A1：B12有不同数据的单元格并在该单元格中标记为红色底纹。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata1.png" title="http://blog.excelhome.net/DiffData1"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata1.png" alt="http://blog.excelhome.net/DiffData1"></a><br>
图7：需要比较的两个列表区域<br>
现在，按下列步骤来完成上述要求：<br>
第1步：将单元格区域A2：B12命名为OldData。<br>
第2步：选择单元格区域D2：E12，单击菜单“格式——条件格式”。<br>
第3步：在“条件格式”对话框中，在“条件”组合框中选择“公式”，在右侧框中输入公式“=COUNTIF(OldData,D2)=0”。单击“格式”按钮，在弹出的对话框中选择图案为红色，如图8所示。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata2.png" title="http://blog.excelhome.net/DiffData2"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata2.png" alt="http://blog.excelhome.net/DiffData2"></a><br>
图8：设置条件格式<br>
第4步：单击“确定”按钮，此时如图9所示，该列表中与左侧列表含有不同的数据的单元格被标上红色底纹。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata3.png" title="http://blog.excelhome.net/DiffData3"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata3.png" alt="http://blog.excelhome.net/DiffData3"></a><br>
图9：条件格式应用后，标识出不同的单元格<br>
有时，可能列表在不同的单元格，如图10所示，要找出工作表Sheet2中与区域OldData中不同的数据单元格。与上述步骤3相同，选择工作表Sheet2中的单元格区域A2:B12，调出“条件格式”对话框，并作如图10所示的设置。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata4.png" title="http://blog.excelhome.net/DiffData4"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata4.png" alt="http://blog.excelhome.net/DiffData4"></a><br>
图10：选择区域A2：B12，设置条件格式<br>
单击“确定”按钮后，效果如图11所示，标识出了与工作表Sheet1中区域OldData不同的数据。这也充分展示了定义名称的好处。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata5.png" title="http://blog.excelhome.net/DiffData5"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/differentdata5.png" alt="http://blog.excelhome.net/DiffData5"></a><br>
图11：应用条件格式后，为与OldData区域不同的数据单元格标上底纹<br>
当然，本示例只是演示，数据很少。如果要比较大量的数据，光凭人工查找核对，费时费力且易出错，通过应用条件格式，将能够很快达到要求。<br>注：同时发表于<a target="_blank" href="http://www.excelperfect.com">完美Excel</a>:<a target="http://blog.excelhome.net/_blank" href="http://www.excelperfect.com">http://www.excelperfect.com</a><br>]]></description>
</item><item>
<title><![CDATA[链接用户窗体与工作表]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1076.html</link>
<author>fanjy</author>
<pubDate>2008-9-6 18:11:00</pubDate>
<description><![CDATA[<p><span style="font-weight: bold;"><span style="text-decoration: underline; color: rgb(0, 0, 255);">前言：</span></span>在使用Excel时，很多用户都希望有一个合适的数据输入窗体，在该窗体中输入数据后，这些数据会自动放置在工作表的相应单元格中，或者将工作表中的数据提取到窗体中。这里，我找到了Dick的一系列文章并将它们进行了整理，与大家分享。<span style="font-weight: bold; color: rgb(0, 0, 255);"><br>
演示——Excel的记录单</span><br>
Excel提供了一个名为“记录单”的功能，用来让用户在窗体中输入数据并将数据放入工作表相应位置。如图1所示，单击“数据——记录单”，调出相应的对话框。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet1.png" title="http://blog.excelhome.net/LinkUserformAndWorksheet1"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet1.png" alt="http://blog.excelhome.net/LinkUserformAndWorksheet1"></a><br>
图1：Excel的“记录单”<br>
此时，可以在对话框中输入相应的数据，单击“新建”按钮后，所输入的数据会放置到工作表中。然而，记录单有很大的局限，它限制用户能够做的事情并且不能完全定制。<br>
（注意，要调出“记录单”对话框，必须将活动单元格置于列表区域内。如果列表字段多于32个，将不能使用“数据——记录单”命令，用户必须直接在工作表中输入数据。<br>
此外，John Walkenback还开发了一个优秀的记录单增强版本，有兴趣的朋友可以在网上找到该插件。这个增强版本的记录单能够满足绝大多数Excel用户的需要。）<br>
下面介绍的不是一个通用目的的数据记录单，而是为特定的数据库建立的数据录入窗体。其主要目的是为了说明，用户可以使用用户窗体定制满足自身实际情况的输入窗体。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">创建用户窗体</span><br>
本示例的工作表如图1所示，包含着人员的联系信息。本示例的用户窗体如图2所示，用来输入和编辑信息。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet2.png" title="http://blog.excelhome.net/LinkUserformAndWorksheet2"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet2.png" alt="http://blog.excelhome.net/LinkUserformAndWorksheet2"></a><br>
图2：数据输入窗体设计<br>
将上面的窗体命名为UContact，其中各控件的名称和Tag属性分别为：<br>
名称（Tag属性）<br>
txtName(0)<br>
cmbXb(1)<br>
txtAddress(2)<br>
txtCity(3)<br>
cmbState(4)<br>
txtZip(5)<br>
scbContact()<br>
cmdSave()<br>
cmdClose()<br>
lblName()<br>
lblXb()<br>
lblAddress()<br>
lblCity()<br>
lblState()<br>
lblZip()<br>
其中，Tag属性指出了工作表中数据相对于列A的偏移量。例如，txtName的Tag属性为0，表明在其中输入的数据就在A列。括号中为空表明该控件没有设置Tag属性。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">装载用户窗体时</span><br>
下面的过程在用户窗体装载时，从工作表中读取数据并填充窗体中的相应控件。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> PopulateRecord()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> lRow <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> ctlInfo <span style="color: rgb(0, 0, 127);">As</span> Control</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘存储当前记录所在的行</span><span style="font-family: Courier;"><br>
lRow = Me.scbContact.Value</span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">With</span><span style="font-family: Courier;"> wksContacts.Range("A1")<br>
<span style="color: rgb(0, 127, 0);">‘遍历控件</span><br>
<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> ctlInfo In Me.Controls<br>
<span style="color: rgb(0, 127, 0);">‘如果Tag属性为数值，则该控件是数据输入控件</span><br>
<span style="color: rgb(0, 0, 127);">If</span> IsNumeric(ctlInfo.Tag) <span style="color: rgb(0, 0, 127);">Then</span><br>
<span style="color: rgb(0, 127, 0);">‘从工作表中获取数据</span><br>
ctlInfo.Text = .Offset(lRow, ctlInfo.Tag).Value<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">Next</span> ctlInfo<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">With</span></span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘标记清除的记录</span><span style="font-family: Courier;"><br>
Me.IsDirty = <span style="color: rgb(0, 0, 127);">False</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
其中，wksContacts为工作表的对象名称。使用Tag属性存储每个字段相对于列A的偏移量，并且使用IsNumeric函数进行测试，以方便以后对窗体的扩展，例如设置Tag属性为字符串型时。代码最后一行中的IsDirty将在随后的内容中讨论。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">将窗体数据输入到工作表中</span><br>
下面的过程与刚讲述的过程几乎相同，只是数据传输的方向相反，即将窗体中的数据输入到工作表相应的单元格中。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> SaveRecord(<span style="color: rgb(0, 0, 127);">Optional</span> <span style="color: rgb(0, 0, 127);">ByVal</span> lOffset <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span> = 0)<br>
<span style="color: rgb(0, 0, 127);">Dim</span> lRow <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> ctlInfo <span style="color: rgb(0, 0, 127);">As</span> Control</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘存储当前记录所在的行</span><span style="font-family: Courier;"><br>
lRow = Me.scbContact.Value + lOffset</span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">With</span><span style="font-family: Courier;"> wksContacts.Range("A1")<br>
<span style="color: rgb(0, 127, 0);">‘遍历控件</span><br>
<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> ctlInfo In Me.Controls<br>
<span style="color: rgb(0, 127, 0);">‘仅限于对数据输入控件</span><br>
<span style="color: rgb(0, 0, 127);">If</span> IsNumeric(ctlInfo.Tag) <span style="color: rgb(0, 0, 127);">Then</span><br>
<span style="color: rgb(0, 127, 0);">‘将值写入单元格</span><br>
.Offset(lRow, ctlInfo.Tag).Value = ctlInfo.Text<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">Next</span> ctlInfo<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">With</span></span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘重新初始化滚动条设置</span><span style="font-family: Courier;"><br>
DefineScroll</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘标记清除的记录</span><span style="font-family: Courier;"><br>
Me.IsDirty = <span style="color: rgb(0, 0, 127);">False</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
在代码中，初始化滚动条以便其值与工作表中的记录保持同步。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">重定义滚动条</span><br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> DefineScroll()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> rBottom <span style="color: rgb(0, 0, 127);">As</span> Range<br>
<span style="color: rgb(0, 0, 127);">Dim</span> lRecordCnt <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">With</span><span style="font-family: Courier;"> wksContacts<br>
<span style="color: rgb(0, 127, 0);">‘查找列A中最后的单元格</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> rBottom = .Range("A" &amp; .Rows.Count).End(xlUp)<br>
<span style="color: rgb(0, 127, 0);">‘如果数据库为空</span><br>
<span style="color: rgb(0, 0, 127);">If</span> rBottom.Row = 1 <span style="color: rgb(0, 0, 127);">Then</span><br>
lRecordCnt = 1 <span style="color: rgb(0, 127, 0);">‘设置一条记录-即新记录</span><br>
<span style="color: rgb(0, 0, 127);">Else</span><br>
<span style="color: rgb(0, 127, 0);">‘设置所有的记录数再加一条新记录</span><br>
lRecordCnt = .Range("A2", rBottom).Rows.Count + 1<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">With</span></span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘设置最小和最大值</span><span style="font-family: Courier;"><br>
Me.scbContact.Min = 1: Me.scbContact.Max = lRecordCnt<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
无论何时将数据写入工作表还是当窗体打开时从工作表中装载数据，我们都需要合适地设置滚动条的最小值和最大值。这样，能够确保从窗体中能够访问所有的记录，同时又能在工作表中添加新记录。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">确认记录是否发生了变化</span><br>
当用户窗体显示记录时，需要知道用户是否对该记录作出了修改，因为仅希望“保存”按钮在记录发生改变时启用。同时，在关闭没有保存的记录时，希望能够警告用户。<br>
这里使用了一个名为CControlEvents的类模块来完成这些任务。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Public</span> <span style="color: rgb(0, 0, 127);">WithEvents</span> gTextBox <span style="color: rgb(0, 0, 127);">As</span> MSForms.TextBox<br>
<span style="color: rgb(0, 0, 127);">Public</span> <span style="color: rgb(0, 0, 127);">WithEvents</span> gCombo <span style="color: rgb(0, 0, 127);">As</span> MSForms.ComboBox<br>
<span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> gCombo_Change()<br>
UContact.IsDirty = <span style="color: rgb(0, 0, 127);">True</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span><br>
<span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> gTextBox_Change()<br>
UContact.IsDirty = <span style="color: rgb(0, 0, 127);">True</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span><br>
</span><br>
不能够处理通用的控件对象，因此必须为每窗体中的每类控件（此处即文本框和组合框）创建一个变量。使用其Change事件来对记录作出标记。<br>
众所周知，用户窗体本身就是一个带有用户界面的内置类模块，这意味着能够从用户窗体中创建自定义属性。上面的事件代码使用了在用户窗体中创建的IsDirty属性。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> mbIsDirty <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Boolean</span><br>
<span style="color: rgb(0, 0, 127);">Property</span> <span style="color: rgb(0, 0, 127);">Get</span> IsDirty() <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Boolean</span><br>
IsDirty = mbIsDirty<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span><br>
<span style="color: rgb(0, 0, 127);">Property</span> <span style="color: rgb(0, 0, 127);">Let</span> IsDirty(bDirty <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Boolean</span>)<br>
mbIsDirty = bDirty<br>
Me.cmdSave.Enabled = bDirty<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span></span><br>
Property Get过程允许读取IsDirty的值。Property Let过程在模块级变量中存储记录的状态，同时修改保存按钮的Enabled的属性。除非记录发生了变化，否则我们不希望用户启用保存按钮。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">用户窗体的初始化事件</span><br>
下面，我们探讨用户窗体的初始化事件，例如当窗体开启时将会发生什么。首先，声明一个模块级的变量：<br>
Private mcControls As Collection<br>
然后，在用户窗体的Initialize事件代码中输入代码：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> UserForm_Initialize()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> ctlInfo <span style="color: rgb(0, 0, 127);">As</span> Control<br>
<span style="color: rgb(0, 0, 127);">Dim</span> clsEvents <span style="color: rgb(0, 0, 127);">As</span> CControlEvents</span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Set</span><span style="font-family: Courier;"> mcControls = <span style="color: rgb(0, 0, 127);">New</span> Collection</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘使用隐藏的工作表中的数据填充组合框</span><span style="font-family: Courier;"><br>
Me.cmbXb.List = wksData.Range("Xb").Value<br>
Me.cmbState.List = wksData.Range("States").Value</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘遍历窗体中的控件</span><span style="font-family: Courier;"><br>
<span style="color: rgb(0, 0, 127);">For</span> <span style="color: rgb(0, 0, 127);">Each</span> ctlInfo In Me.Controls<br>
<span style="color: rgb(0, 127, 0);">‘Tag属性为数值的控件是数据输入控件,是我们操作的控件</span><br>
<span style="color: rgb(0, 0, 127);">If</span> IsNumeric(ctlInfo.Tag) <span style="color: rgb(0, 0, 127);">Then</span><br>
<span style="color: rgb(0, 127, 0);">‘创建新类</span><br>
<span style="color: rgb(0, 0, 127);">Set</span> clsEvents = <span style="color: rgb(0, 0, 127);">New</span> CControlEvents<br>
<span style="color: rgb(0, 0, 127);">Select</span> <span style="color: rgb(0, 0, 127);">Case</span> TypeName(ctlInfo)<br>
<span style="color: rgb(0, 0, 127);">Case</span> "TextBox"<br>
<span style="color: rgb(0, 0, 127);">Set</span> clsEvents.gTextBox = ctlInfo<br>
mcControls.Add clsEvents, <span style="color: rgb(0, 0, 127);">CStr</span>(ctlInfo.Tag)<br>
<span style="color: rgb(0, 0, 127);">Case</span> "ComboBox"<br>
<span style="color: rgb(0, 0, 127);">Set</span> clsEvents.gCombo = ctlInfo<br>
mcControls.Add clsEvents, <span style="color: rgb(0, 0, 127);">CStr</span>(ctlInfo.Tag)<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Select</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">Next</span> ctlInfo</span></p>
<p><span style="font-family: Courier;">DefineScroll</span></p>
<p><span style="color: rgb(0, 127, 0); font-family: Courier;">‘以第一条记录开始</span><span style="font-family: Courier;"><br>
Me.scbContact.Value = Me.scbContact.Min<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span><br>
</span><br>
其中，wksData是存放组合框中所需要数据的工作表的对象名称，分别为性别组合框存储的数据的名称为“Xb”，为“省份”组合框存储的数据的名称为“States”。<br>
上述代码遍历用户窗体中的数据输入控件并创建类的实例，以便触发事件且修改IsDirty属性，同时设置滚动条的初始值。<br>
注意，此时会触发PopulateRecord过程执行两次，即执行DefineScroll过程时和为滚动条设置值时，都会触发滚动条的Change事件。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">滚动条的Change事件</span><br>
滚动条能够帮助用户在记录之间移动。当然，不一定需要滚动条。<br>
首先，声明一个模块级的变量：<br>
Private mlLastScrollValue As Long<br>
然后，在滚动条scbContact的Change事件中输入代码：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> scbContact_Change()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> sPrompt <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> sTitle <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span><br>
<span style="color: rgb(0, 0, 127);">Dim</span> lResp <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span></span></p>
<p><span style="font-family: Courier;">sPrompt = "保存修改"<br>
sTitle = "记录已经改变"</span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">If</span><span style="font-family: Courier;"> Me.IsDirty <span style="color: rgb(0, 0, 127);">Then</span><br>
lResp = MsgBox(sPrompt, vbYesNo, sTitle)<br>
<span style="color: rgb(0, 0, 127);">If</span> lResp = vbYes <span style="color: rgb(0, 0, 127);">Then</span><br>
SaveRecord <span style="color: rgb(0, 0, 127);">CLng</span>(Me.scbContact.Value &gt; mlLastScrollValue)<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span></span></p>
<p><span style="font-family: Courier;">PopulateRecord</span></p>
<p><span style="font-family: Courier;">mlLastScrollValue = Me.scbContact.Value<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
上述过程检查是否需要保存当前记录并给出提示信息，然后基于滚动条的当前值填充记录。模块级的变量mlLastScrollValue包含滚动条先前的
值，以便SaveRecord过程确定是否用户向上或向下滚动过。通常，必须知道是否保存前一条或后一条记录，因为滚动条的值已经变化。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">命令按钮的Click事件</span><br>
“关闭”按钮：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> cmdClose_Click()<br>
Unload Me<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
“保存”按钮：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Private</span> <span style="color: rgb(0, 0, 127);">Sub</span> cmdSave_Click()<br>
<span style="color: rgb(0, 0, 127);">If</span> Me.IsDirty <span style="color: rgb(0, 0, 127);">Then</span><br>
SaveRecord<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">If</span><br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">最后的成果</span><br>
下图3是最终的用户窗体运行后的效果：<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet3.png" title="http://blog.excelhome.net/LinkUserformAndWorksheet3"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/linkuserformandworksheet3.png" alt="http://blog.excelhome.net/LinkUserformAndWorksheet3"></a><br>
图3：自定义的用户输入窗体<br>
拖动右侧的滚动条可以在记录之间移动，当拖动到最下方时，可以新建记录。<br>
<span style="font-weight: bold; color: rgb(0, 0, 255);">实例扩展</span><br>
当然，您可以以上面的示例为基础，修改或扩展窗体，根据实际需要增强其应用功能。</p><p>注:<a href="http://www.excelperfect.com">完美Excel</a>整理,同时发表于<a href="http://www.excelperfect.com">完美Excel</a>:<a href="http://www.excelperfect.com">http://www.excelperfect.com</a><br></p>]]></description>
</item><item>
<title><![CDATA[如何定义类的默认属性]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1075.html</link>
<author>fanjy</author>
<pubDate>2008-9-5 13:16:00</pubDate>
<description><![CDATA[<p>在Excel中，许多对象都有一个默认的属性。如果在使用某对象时，没有专门指定属性，则会使用该对象的默认属性。例如，Range对象的Value属性是其默认属性，因此下列两行代码作用相同：<br>
Range(“A1”).Value=123<br>
Range(“A1”)=123<br>
然而，VBA并没有提供一种简单的机制用于为类指定默认属性，但是确实可以指定默认的属性，只不过需要“费一些周折”。<br>
假设有一个名为CMyClass的类，其代码如下：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Option</span> <span style="color: rgb(0, 0, 127);">Explicit</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Private</span><span style="font-family: Courier;"> pValue <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>
<span style="color: rgb(0, 0, 127);">Private</span> pName <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Property</span><span style="font-family: Courier;"> <span style="color: rgb(0, 0, 127);">Get</span> Value() <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span><br>
Value = pValue<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span><br>
<span style="color: rgb(0, 0, 127);">Property</span> <span style="color: rgb(0, 0, 127);">Let</span> Value(V <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">Long</span>)<br>
pValue = V<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span></span></p>
<p><span style="color: rgb(0, 0, 127); font-family: Courier;">Property</span><span style="font-family: Courier;"> <span style="color: rgb(0, 0, 127);">Get</span> Name() <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span><br>
Name = pName<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span><br>
<span style="color: rgb(0, 0, 127);">Property</span> <span style="color: rgb(0, 0, 127);">Let</span> Name(V <span style="color: rgb(0, 0, 127);">As</span> <span style="color: rgb(0, 0, 127);">String</span>)<br>
pName = V<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Property</span></span><br>
如果没有指定默认属性，下面的测试将失败，导致运行时错误438——对象不支持该属性或方法。<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Sub</span> test()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> MyClass <span style="color: rgb(0, 0, 127);">As</span> CMyClass<br>
<span style="color: rgb(0, 0, 127);">Set</span> MyClass = <span style="color: rgb(0, 0, 127);">New</span> CMyClass<br>
MyClass = 123<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span></span><br>
要使Value属性为默认属性，可按下列步骤进行。<br>
<span style="color: rgb(0, 0, 255);">步骤1：</span>保存工作簿。<br>
<span style="color: rgb(0, 0, 255);">步骤2：</span>在VBE编辑器中打开CMyClass模块。<br>
<span style="color: rgb(0, 0, 255);">步骤3：</span>单击“文件——移除CMyClass”。<br>
<span style="color: rgb(0, 0, 255);">步骤4：</span>当出现“在移除CMyClass之前是否将其导出”的信息提示框时，选择“是”，保存该模块。<br>
<span style="color: rgb(0, 0, 255);">步骤5：</span>在记事本或者其它文本编辑器中打开刚导出的文件CMyClass.cls。<br>
<span style="color: rgb(0, 0, 255);">步骤6：</span>找到Property Get Value()过程，并在第一行添加下列语句：<br>
Attribute Value.VB_UserMemId=0<br>
此时，该过程的完整代码如下（其中，加粗部分为刚添加的语句）：<br>
Property Get Value() As Long<br>
<span style="font-weight: bold;">Attribute Value.VB_UserMemId=0</span><br>
Value = pValue<br>
End Property<br>
<span style="color: rgb(0, 0, 255);">步骤7：</span>在记事本中保存该文件然后关闭。<br>
<span style="color: rgb(0, 0, 255);">步骤8：</span>在VBE中，选择“文件——导入文件”，将刚才修改的文件导入。<br>
注意，在VBE编辑器中看不到“Attribute”语句，它会读取并处理Attribute语句但是不会显示它们，也不会允许在编辑器中输入。<br>
现在，在标准模块中运行下列代码：<br>
<span style="font-family: Courier;"><span style="color: rgb(0, 0, 127);">Sub</span> test()<br>
<span style="color: rgb(0, 0, 127);">Dim</span> MyClass <span style="color: rgb(0, 0, 127);">As</span> CMyClass<br>
<span style="color: rgb(0, 0, 127);">Set</span> MyClass = <span style="color: rgb(0, 0, 127);">New</span> CMyClass<br>
MyClass = 123<br>
Debug.Print MyClass<br>
<span style="color: rgb(0, 0, 127);">End</span> <span style="color: rgb(0, 0, 127);">Sub</span><br>
</span><br>
运行正常。因为在Property Get过程中添加了Attribute语句后，编译器就会将其当作默认属性。<br>
（上述内容适合于Excel 2000及以后的版本）</p><p><a href="http://www.excelperfect.com">完美Excel</a>整理,同时发表于<a href="http://www.excelperfect.com">完美Excel</a>:<a href="http://www.excelperfect.com">http://www.excelperfect.com</a><br></p>]]></description>
</item><item>
<title><![CDATA[VBA类模块初步]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1074.html</link>
<author>fanjy</author>
<pubDate>2008-9-4 14:19:00</pubDate>
<description><![CDATA[<p>这里简单地介绍VBA中的类模块，使大家能够在应用程序中创建并使用简单的类。<br>
类是对象的“模板”。对象可以是任何事物，而类不会做任何事情，也不会占用内存，只有当类成为对象并使用Set语句和New关键字实例化为具体对象后，才能做事情并占用内存。实例化类为具体对象的语法为：<br>
Dim C As Class1<br>
Set C=New Class1<br>
上述语句创建了一个名为C的对象，该对象的数据类型为定义的类Class1。<br>
在详细介绍类之前，让我们先看看VBA的用户自定义数据类型，即使用Type关键字定义的变量。例如，下面的Type变量定义了雇员的信息：<br>
Type Employee<br>
Name As String<br>
Address As String<br>
Salary As Double<br>
End Type<br>
上面的语句定义了变量Employee，包含元素Name、Address和Salary。接着，您可以声明一个Employee型的变量，并为其中的每个元素赋值：<br>
Sub test()<br>
Dim Fan As Employee<br>
Fan.Name = “fanjy”<br>
Fan.Address = “YiChang”<br>
Fan.Salary = 1000<br>
End Sub<br>
用户自定义类型是很有用的，但是有三个主要的局限：<br>
1、在编译时必须声明所有的自定义类型变量。虽然可以使用动态数组来处理多个自定义类型，但必须使用Redim Preserve关键词。并且，不能在运行时添加新的自定义类型变量。<br>
2、不能控制赋给自定义类型中元素的值。例如，在上述代码中，有可能给Salary元素赋一个负值。<br>
3、自定义类型不做任何事情，只是静态地存储数据。<br>
用户自定义类型被广泛用于在对Windows API函数调用时，除此之外，使用类模块是更好的选择。类克服了用户自定义类型的局限。<br>
1、使用New关键字，可以创建任意数量的类的新实例，并且能够将其存储在Collection对象中。<br>
2、使用Property Let/Set/Get语句，可以编写代码验证赋给类元素的值，并且可以编写当值改变时执行的相应代码。例如，能够编写代码确保Salary的值不为负值。<br>
3、类可以定义方法（使用Sub过程和Function过程），执行某项动作。<br>
下面，让我们将自定义类型Employee转换为类。首先，在VBE编辑器中插入一个类模块，并将其重命名为CEmployee，如图1所示。（类模块由属性和方法组成，类本身类似于名词；属性可以当作形容词，用来描述类；方法则为动词，执行操作。）<br>
CEmployee类应该有三个属性：Name、Address和Salary。在类模块的声明部分声明三个Private变量来存储这些值，属性的实际值被存储在这三个私有变量中。<br>
Private pName As String<br>
Private pAddress As String<br>
Private pSalary As Double<br>
因为这些变量都被声明为私有的，因此仅能在类内部访问，在类的外部是不可见的。如何为这些变量赋值呢？这就是Property Let语句要做的工作。每个私有变量都有相应的Property Let语句。<br>
Property Let Name(S As String)<br>
pName = S<br>
End Property</p>
<p>Property Let Address(S As String)<br>
pAddress = S<br>
End Property</p>
<p>Property Let Salary(D As Double)<br>
pSalary = D<br>
End Property<br>
Property Let语句用于给属性赋值，即将值引入类。在上例中，简单地将引入的值赋给私有变量。由于Property
Let语句中能够包含代码，因此能够编写用于数据验证的代码。例如，改写Property Let Salary函数中的代码，使之不允许接受负值：<br>
Property Let Salary(D As Double)<br>
If D &gt; 0 Then<br>
pSalary = D<br>
Else<br>
‘错误提示<br>
MsgBox “薪水怎能为负呢?”<br>
End If<br>
End Property<br>
与Property Let函数相对应的是Property Get函数，用于从类中获取属性的值。在CEmployee类中，相应的Property Get语句为：<br>
Property Get Name() As String<br>
Name = pName<br>
End Property</p>
<p>Property Get Address() As String<br>
Address = pAddress<br>
End Property</p>
<p>Property Get Salary() As Double<br>
Salary = pSalary<br>
End Property<br>
Let语句和Get语句的数据类型必须相匹配。例如，Let Salary接受Double类型的值作为其参数，这意味着其返回的相应的Get属性的值必须是Double。如果数据类型不一致，就会导致编译错误。<br>
这些Get语句简单地将三个属性向外公开。要创建只读属性，则忽略Property Let语句而仅使用Property Get语句。例如，WithholdingTax属性是只读的，在Get语句中的代码计算合适的值并将其公开，但避免从外部改变该属性的值：<br>
Property Get WithholdingTax() As Double<br>
WithholdingTax = some_tax_calculation<br>
End Property<br>
该属性没有对应的Let语句，因此该属性只读，没有办法将值赋给WithholdingTax。<br>
类模块能够包含方法，例如CEmployee类有一个用于雇员复核薪水的方法：<br>
Public Sub PrintPaycheck()<br>
‘放置打印复核的实际代码<br>
End Sub<br>
好了，我们已经完成了CEmployee类的初步定义，如图1所示。<br>
<a href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/classexample1.png" title="http://blog.excelhome.net/classexample1"><img src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/classexample1.png" alt="http://blog.excelhome.net/classexample1"></a><br>
图1：CEmployee类<br>
下面，在标准模块的代码中实例化类，并使用其属性和方法。首先，在VBE编辑器中插入一个模块，声明一个CEmployee类型的变量。（注意，在复杂的应用程序中，在类模块中声明并实例化另一个类是完全合法的）<br>
Dim Emp As CEmployee<br>
接下来，实例化该类，创建一个可用来工作的实际对象，如下列语句：<br>
Set Emp = New CEmployee<br>
上述语句创建了一个名为Emp的对象，能够使用CEmployee类中的属性来引用特定的雇员信息，例如：<br>
Emp.Name = “fanjy”<br>
Emp.Address = “YiChang”<br>
Emp.Salary = 1000<br>
这三个语句调用在CEmployee类中声明的Property Let语句来赋值给类中的私有变量。我们能够使用下列代码读取对象的属性的值：<br>
Debug.Print Emp.Name<br>
Debug.Print Emp.Address<br>
Debug.Print Emp.Salary<br>
上述语句调用类模块中的Property Get语句并获取数据。我们也能读取类中的只读属性WithholdingTax：<br>
Debug.Print Emp.WithholdingTax<br>
由于WithholdingTax属性没有相应的Let语句，因此不能给该属性赋值。如果试图赋值：<br>
Emp.WithholdingTax = 4000<br>
则会导致：“编译错误：不能给只读属性赋值”。<br>
也能够调用方法来执行操作：<br>
Emp.PrintPaycheck<br>
<span style="font-weight: bold;">在集合中存储类的多个实例</span><br>
如果到运行时还不知道有多少个雇员，那么能够在运行时按需要创建多个Emp对象，每创建一个Emp对象之后将其存储在集合中。例如：<br>
Dim Coll As New Collection<br>
Dim Ndx As Long<br>
Dim Emp As CEmployee</p>
<p>For Ndx = 1 To NumberOfEmployees<br>
Set Emp = New CEmployee<br>
‘设置Emp对象的属性<br>
Coll.Add Item:=Emp, Key:=Emp.Name<br>
Next Ndx<br>
上面的For…Next循环将创建CEmployee类的NumberOfEmployees个实例，具体数量由运行时决定，并将其存储在名为Coll的集合对象中。之后，能够使用For Each循环从Coll集合中获取每个雇员信息或执行操作：<br>
For Each Emp In Coll<br>
Emp.PrintPaycheck<br>
Next Emp<br>
<span style="font-weight: bold;">类的Instancing属性</span><br>
类的Instancing属性决定其可见性（或称作作用域），默认属性值为1-Private，意味着类仅能在包含该类的工程中创建和访问。其他工程不能基于该类创建对象。对于绝大多数应用程序来说，Private是足够了。<br>
Instancing属性的另一个值是2-PublicNotCreatable，表明其他工程能够将变量声明为该类，但是不能使用Set语句创建该类的实例。<br>
<span style="font-weight: bold;">在多个工程间使用类</span><br>
如果一个工作簿需要使用定义在另一个工作簿中的类，则需要在包含类模块的工作簿中编写代码导出类到另一个工程。该类的Instancing属性必须是2-PublicNotCreatable。<br>
假设Book1.xls工作簿中包含一个名为Class1的类模块，Book2.xls需要使用该类。首先，将Book1工作簿的工程名称从缺省的
“VBAProject”修改为唯一的名称，例如MyProject。然后，在VBE编辑器中激活Book2工作簿的界面，设置对Book1工作簿的引
用，即在VBE中选择“工具——引用”，然后在列表中选择“MyProject”。然后，在Book2中，创建如下声明：<br>
Public C As MyProject.Class1<br>
因为Instancing的属性值为PublicNotCreatable，所以可以声明一个Class1类的变量，但不能创建该类的实例。因此，需要在Book1中编写一个函数来创建Class1的新实例，并返回该实例给Book2。在Book1中，创建下面的过程：<br>
Public Function GetClass1() As Class1<br>
Set GetClass1 = New Class1<br>
End Function<br>
然后，在Book2中设置公共变量C为上述函数的结果，例如：<br>
Set C=MyProject.GetClass1()<br>
现在，C被设置为Class1的新实例。<br>
好了，上面只是对类模块的一些初步介绍，还有一些知识未讲述，例如Property Set语句，留待以后在慢慢整理。</p>
<p>&lt;<a href="http://www.excelperfect.com">完美Excel</a>整理，仅供参考！同时发表于<a href="http://www.excelperfect.com">完美Excel</a>:<a href="http://www.excelperfect.com">http://www.excelperfect.com</a>&gt;</p>]]></description>
</item><item>
<title><![CDATA[非固定电脑限制文件使用期限]]></title>
<link>http://blog.excelhome.net/user1/gvntw/archives/2008/1073.html</link>
<author>gvntw</author>
<pubDate>2008-9-4 13:47:00</pubDate>
<description><![CDATA[<DIV>文件只能在固定的一台电脑上使用，非本电脑，限制使用天数。</DIV>
<DIV>
<P>Sub Auto_Open()<BR>&nbsp;&nbsp;&nbsp; Dim fs, d, s<BR>&nbsp;&nbsp;&nbsp; Set fs = CreateObject("Scripting.FileSystemObject")<BR>&nbsp;&nbsp;&nbsp; Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(ThisWorkbook.Path)))<BR>&nbsp;&nbsp;&nbsp; s = d.serialnumber&nbsp;&nbsp;&nbsp; '磁盘序列号<BR>&nbsp;&nbsp;&nbsp; If s = 要使用的电脑磁盘序列号 Then Exit Sub&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; Dim FirstDate, de, days<BR>&nbsp;&nbsp;&nbsp; FirstDate = Date<BR>&nbsp;&nbsp;&nbsp; de = GetSetting("XXX", "YYY", "date", "")&nbsp; '从注册表取值<BR>&nbsp;&nbsp;&nbsp; If de = "" Then&nbsp;&nbsp; '如果取不到值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SaveSetting "XXX", "YYY", "date", FirstDate&nbsp; '把日期保存到注册表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "本文件可使用60天，今天是第1次使用", , "提示"<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; days = Date - CDate(de)&nbsp; '计算文件使用的天数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If days &gt; 60 Then&nbsp;&nbsp;&nbsp; '如果文件使用超过60天<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "已超过使用期限，本文件将自杀", , "警告"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisWorkbook.ChangeFileAccess xlReadOnly&nbsp; '改为只读属性<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Kill ThisWorkbook.FullName&nbsp; '自杀<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisWorkbook.Close False&nbsp; '关闭不保存<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "本文件已使用" &amp; days &amp; "天，还有" &amp; 60 - days &amp; "天可使用", , "提示"<BR>&nbsp;&nbsp;&nbsp; End If<BR>End Sub</P></DIV>附件下载：<A href="http://blog.excelhome.net/UploadFiles/2008-9/49796.39613895.rar">UploadFiles/2008-9/49796.39613895.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[图解VSTO安装]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1072.html</link>
<author>fanjy</author>
<pubDate>2008-9-2 20:44:00</pubDate>
<description><![CDATA[<DIV>近日，本本出了问题，没办法，只好重新安装了系统和一系列必备的软件，例如Microsoft Office 2003、Microsoft Office 2007、Visual Studio 2005等。记得很久以前，我在EH的博客上发表了一篇关于VSTO安装的贴子后，有朋友问过我关于VSTO安装的疑问，特别是如何配置Visual Studio和Office，使VSTO能够正常工作。趁这次重装系统的机会，我将配置VSTO的详细过程记录了下来，供参考。<BR>1.安装Microsoft Office 2003。<BR>2.安装Microsoft Office 2007。（两者可同时安装在同一台机子上哦，只不过在双击具体文档启动时可能有点“不理想”）<BR>3.安装Visual Studio 2005。在Visual Studio 2005中自带有Microsoft Visual Studio 2005 Tools for the Microsoft Office System Runtime、Microsoft Visual Studio 2005 Tools for the Microsoft Office System Runtime语言包、以及Office System 2003主互操作程序集。<BR>在安装程序完成后，会出现如图1所示的界面。<BR><A title=VS2005Install1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install1.png"><IMG alt=VS2005Install1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install1.png"></A><BR>图1：VS2005安装完成页<BR>如果您安装的是Microsoft Office 2003 SP2或SP3，不需要理会这里面列出的警告，直接单击“完成”按钮即可。<BR>4.在“控制面板”中单击“添加/删除程序”。在“添加或删除程序”列表中找到“Microsoft Office Professional Edition 2003”并单击其右侧的“更改”按钮。<BR>如图2所示，在“Microsoft Office 2003安装”中，选取“选择应用程序的高级自定义”前的复选框，单击“下一步”。<BR><A title=VS2005Install2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install2.png"><IMG alt=VS2005Install2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install2.png"></A><BR>图2：Microsoft Office 2003安装界面1<BR>5.如图3所示，单击所选Office应用程序前面的下拉箭头，找到.NET可编程性支持并选择“从本机运行”。<BR><A title=VS2005Install3 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install3.png"><IMG alt=VS2005Install3 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install3.png"></A><BR>图3：Microsoft Office 2003安装界面2<BR>完成后，单击“更新”按钮，出现更新Office的界面。更新完成后，弹出如图4所示的对话框。<BR><A title=VS2005Install4 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install4.png"><IMG alt=VS2005Install4 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install4.png"></A><BR>图4：Microsoft Office 2003安装界面3<BR>6.开启Visual Studio 2005，选择“新建项目”命令，选择“Office”节点及相应的模板，单击“确定”，如图5所示。<BR><A title=VS2005Install5 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install5.png"><IMG alt=VS2005Install5 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install5.png"></A><BR>图5：Visual Studio 2005新建项目<BR>出现如图6所示的对话框，单击“确定”按钮。<BR><A title=VS2005Install6 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install6.png"><IMG alt=VS2005Install6 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install6.png"></A><BR>图6：VSTO项目向导<BR>此时，会出现如图7所示的警告信息，单击“确定”按钮。否则，将不能成功创建项目。<BR><A title=VS2005Install7 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install7.png"><IMG alt=VS2005Install7 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install7.png"></A><BR>图7：第一次创建VSTO项目时的警告信息<BR>7.成功创建的Excel项目如图8所示。<BR><A title=VS2005Install8 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install8.png"><IMG alt=VS2005Install8 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install8.png"></A><BR>图8：创建成功的Excel项目<BR>在Office 2007发布后不久，Microsoft又发布了VSTO 2005 SE，用于创建支持Office 2007的项目。<BR>8.安装Office 2007 Primary Interop Assembly（即Office 2007主互操作程序集）。<BR>9.安装VSTO 2005 SE，安装界面如图9所示。注意，如果您使用的是中文版的Visual Studio，那么要下载中文的安装包。<BR><A title=VS2005Install9 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install9.png"><IMG alt=VS2005Install9 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install9.png"></A><BR>图9：安装Visual Studio 2005 Tools for Office Second Edition<BR>10. 在“控制面板”中单击“添加/删除程序”。在“添加或删除程序”列表中找到“Microsoft Office Enterprise 2007”并单击其右侧的“更改”按钮。在图10所示的界面中，选择“添加或删除功能”，单击“继续”按钮。<BR><A title=VS2005Install11 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install11.png"><IMG alt=VS2005Install11 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install11.png"></A><BR>图10：修改Microsoft Office Enterprise 2007安装<BR>11.与前述步骤5一样，启动.NET可编程性支持，如图11所示。<BR><A title=VS2005Install12 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install12.png"><IMG alt=VS2005Install12 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install12.png"></A><BR>单击“继续”。<BR>12.重新启动Visual Studio 2005，此时的Office节点界面除图5所列的模板外（在Office节点上单击时列出），还增加了外接程序模板，如图12所示。<BR><A title=VS2005Install10 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install10.png"><IMG alt=VS2005Install10 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/09/vs2005install10.png"></A><BR>图12：VS 2005 SE中新增的模板<BR>好了！大致过程就这些，可能各人的机子稍有不同，灵活设置吧！</DIV>
<DIV>注:同时发表于<A href="http://www.excelperfect.com">完美Excel</A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></DIV>]]></description>
</item><item>
<title><![CDATA[Excel的条件格式技术(1)]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1071.html</link>
<author>fanjy</author>
<pubDate>2008-8-28 22:12:00</pubDate>
<description><![CDATA[<DIV>条件格式可以在很大程度上改进电子表格的设计和可读性，允许指定多个条件来确定单元格的行为，根据单元格的内容自动地应用单元格的格式。可以设定多个条件，但Excel只会应用一个条件所对应的格式，即按顺序测试条件，如果该单元格满足某条件，则应用相应的格式规则，而忽略其他条件测试。<BR><SPAN style="COLOR: #ff0000">（以下内容适合于Excel 2003及其以前版本）<BR></SPAN>在使用条件格式时，首先选择要应用条件格式的单元格或单元格区域，然后单击菜单“格式─—条件格式”，出现如图1所示的“条件格式”对话框。在Excel 2003及以前的版本中，条件格式最多只能设置三个条件。<BR><A title=conditionalformat href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat.png"><IMG alt=conditionalformat src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat.png"></A><BR>图1：选择“单元格数值”时的条件格式对话框<BR>此时，若在第一个组合框中选择“单元格数值”，则右侧的组合框中将提供“介于”、“未介于”、“等于”、“不等于”、“大于”、“小于”、“大于或等于”、“小于或等于”等选项，并且在其右侧的输入框中可以输入相应的数值，也可以选择工作表中的单元格。然后，单击“格式”按钮，设置当条件为真时所应用的格式。<BR>其中，选择“介于”时，包括设置的最大值和最小值，而选择“未介于”时，不包括设置的最大值和最小值。<BR>若在第一个组合框中选择“公式”，则“条件格式”对话框如图2所示。<BR><A title=conditionalformat1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat1.png"><IMG alt=conditionalformat1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat1.png"></A><BR>图2：选择“公式”时的条件格式对话框<BR>此时，可在右侧的输入框中输入公式或者选择含有公式的单元格。注意，公式的值必须返回True或False。当公式返回True时，将应用条件格式；否则，不会应用设定的格式。这也从另一个侧面可以看出，对Excel公式与函数掌握的熟练程度，有助于灵活运用条件格式。换句话说，正是由于公式的强大功能，才使得条件格式才能发挥其真正的魅力。<BR><SPAN style="http://blog.excelhome.net/COLOR: #0000ff">关于条件格式，请注意下面的几点：</SPAN><BR>（1）复制单元格并将其粘贴到包含条件格式的单元格或者单元格区域中，将会删除该单元格或单元格区域中的条件格式，Excel不会给您任何警告信息。如果非得使用粘贴，并且要保留条件格式，那么可使用“选择性粘贴”功能。<BR>（2）当复制一个包含条件格式的单元格时，将同时复制该单元格的条件格式。在包含条件格式的单元格区域中插入行或者列时，在新的单元格中将有相同的条件格式。<BR>（3）如果要删除条件格式，仅在含有条件格式的单元格中按Delete键，不会删除条件格式。要删除条件格式，需要使用“编辑─—清除─—格式”命令或者“编辑─—清除─—全部”命令。还可以使用“条件格式”对话框，删除其中的条件。<BR>（4）复制某单元格到含有条件格式的单元格中，也将清除条件格式。<BR>（5）要快速查看所有包含条件格式的单元格，使用Excel的“定位”对话框，单击“定位条件”按钮，在“定位条件”中选择“条件格式”选项，如图3所示。<BR><A title=conditionalformat4 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat4.png"><IMG alt=conditionalformat4 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat4.png"></A><BR>图3：利用“定位条件”中的“条件格式”选项选择所有包含条件格式的单元格<BR>下面是《Escape From Excel Hell》一书中关于条件格式的两个示例，供参考。<BR><SPAN style="http://blog.excelhome.net/COLOR: #0000ff">示例1：</SPAN>在条件格式中使用公式且公式引用另一个单元格中的内容，如图4所示。<BR><A title=conditionalformat2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat2.png"><IMG alt=conditionalformat2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat2.png"></A><BR>图4：条件公式中引用另一单元格中的内容<BR>对单元格区域C6：D20应用条件格式，三个条件公式的含义分别为，其左侧B列相应单元格的值若大于且等于1，则单元格底纹为粉红色且字体加粗；若大于0，则单元格底纹为靛蓝色；若小于且等于0，则单元格底纹为浅灰色且字体为斜体。<BR><SPAN style="http://blog.excelhome.net/COLOR: #0000ff">示例2：</SPAN>在条件中使用其他工作表或工作簿中的内容<BR>在应用条件格式时，通常不能直接引用其他工作表或工作簿，但如果为需要引用的单元格区域定义了名称，那么可以在条件中通过名称来引用其他工作表或工作簿中的内容。如下图5所示。<BR><A title=conditionalformat3 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat3.png"><IMG alt=conditionalformat3 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/conditionalformat3.png"></A><BR>图5：通过定义名称来在条件格式中引用另一工作表中的数据<BR>如图5，在工作表SearchAnExternalWorksheet中内容为“Trans 01”的单元格中应用了条件格式，在条件公式中引用了另一个工作表LookupTable中名称为MyLookupTable的单元格区域中的内容，如果相应的收益（损失）值大于1000则该单元格内容使用绿底斜体字显示，若小于-1000则该单元格内容使用红底粗体字显示。<BR>还有一种方法来引用其他工作表中的单元格。例如在需要使用条件格式的工作表中的某单元格中输入公式来引用其他工作表中的单元格，然后在条件格式中引用此单元格。<BR>&lt;未完待续……&gt;</DIV>
<DIV>注:同时发表于<A href="http://www.excelperfect.com">完美Excel</A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></DIV>]]></description>
</item><item>
<title><![CDATA[Excel Hacks #4：避免表面上不必要的提示]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1070.html</link>
<author>fanjy</author>
<pubDate>2008-8-27 12:29:00</pubDate>
<description><![CDATA[<DIV>Excel总会提示您确认您刚才要求Excel执行的操作，退出该会话并让Excel回去执行操作。<BR>我们探讨的提示类型是询问您是否想启用宏，或者是否确定想删除工作表。这里，介绍如何坚决地去除最常见的提示。<BR><SPAN style="COLOR: #0000ff">当没有任何宏时提示启用宏<BR></SPAN>当用于在工作簿中录制宏时，Excel的记忆象钢夹一样。不幸的是，即使您通过VBE编辑器删除了一个或多个宏，宏的记忆却不会“消失”。因此，当您重新打开该工作簿时，Excel仍然会提示您是否启用宏，即使没有什么宏。<BR>当然，如果您将安全性设置为“不通知而禁用所有宏”，则不会出现是否启用宏的提示。<BR>当录制宏时，Excel会插入一个VB模块来包含命令和自定义函数。在打开工作簿时，Excel检查模块的存在，是否为空或者有宏。删除工作簿的宏仅删除模块内的任何代码，而不是模块本身。要避免不必要的宏提示，需要删除模块。下面介绍如何实现。<BR>打开VBE编辑器，您将看到如图1所示的图。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/45010.52488885.png" border=0></DIV>
<DIV>图1：工程资源管理器中的模块（示例）<BR>在工程资源管理器中找到工作簿，并单击其左侧的加号（+）展开该工作簿的组件，特别是如果模块没有显示时。依次右键单击每个模块并从菜单中选择“移除模块”。建议导出模块。在删除可能包含有用的代码的模块前，依次双击每个模块确保您不再需要它们。<BR><SPAN style="COLOR: #0000ff">提示保存不存在的变化</SPAN><BR>您可能已经注意到了，有时简单地打开工作簿并且没有对该工作簿作过实质的修改，但仍会触发Excel提示您去保存对您的个人宏工作簿的修改。无论您是否知道，在个人宏工作簿中有一个易失性函数。<BR>个人宏工作簿是第一次录制宏时创建的隐藏工作簿（单击“开发工具”─—“代码”─—“录制宏”，在“录制新宏”对话框的“保存在”下拉菜单中指定“个人宏工作簿”）。每次使用Excel都会打开该工作簿。易失性函数（或公式）每次在Excel执行几乎任何操作时都会自动重新计算，包括打开和关闭工作簿或整个应用程序。最常见的两个易失性函数是Today()和Now()函数。<BR>因此，虽然您可能相信您没有对工作簿作出过任何修改，但这些易失性函数可能在后台正在运行。这会被当作对工作簿作出了修改，并且触发Excel提示保存这些不可见的变化。<BR>如果您想Excel停止提示您保存实际上没有做出修改的工作簿，您要开启一些选项。最明显的是首先不要在个人宏工作簿中存储易失性函数，并且删除任何已经存在于该工作簿的易失性函数，您能够使用下面所示的相当简单的代码欺骗Excel认为在其打开时已保存个人宏工作簿，从而绕开检查：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Workbook_BeforeClose(Cancel <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.Saved = <SPAN style="COLOR: #00007f">True</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR>上面的代码必须放置在个人宏工作簿的ThisWorkbook模块中。要达到此目的，选择“视图─—窗口─—取消隐藏”，从“取消隐藏工作簿”中选择“Personal.xlsb”并单击“确定”。打开VBE编辑器并输入上述代码。<BR>当然，如果有希望重新计算的易失性函数并且希望保存修改，那么需要明确地告诉Excel这样做：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Workbook_BeforeClose(Cancel <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Me.Saved<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR>这个宏将在每次打开工作簿时自动保存个人宏工作簿。<BR><SPAN style="COLOR: #0000ff">为所录制的宏停止Excel的警告提示<BR></SPAN>录制的宏的缺陷之一是，虽然在摸仿几乎任何命令方面都相当好，但是却忽略了响应提示的操作。删除一个工作表时，将会出现需要确认的提示；运行相同功能的宏，仍然会被提示。让我们避开这些提示吧。<BR>选择“开发工具─—代码─—宏”或者按“Alt+F8”组合键打开“宏”对话框，确保“位置”下拉列表中选择“所有打开的工作簿”，选择相应的宏并单击“编辑”按钮，在过程代码的第一行添加下列语句：<BR>Application.DisplayAlerts = False<BR>在代码结束前，即过程代码段的结尾，添加下列语句：<BR>Application.DisplayAlerts = True<BR>此时，该宏应该如下：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Sub</SPAN> MyMacro()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘MyMacro Macro</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘Deletes the Active worksheet</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.DisplayAlerts = <SPAN style="COLOR: #00007f">False</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;ActiveSheet.Delete<BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.DisplayAlerts = <SPAN style="COLOR: #00007f">True</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR>注意，在宏结束时应该恢复警告，以重新启用在Excel操作时标准的Excel提示。否则，您将再不会看到Excel给您的一些重要提示。<BR>好了，现在您知道如何在使用Excel时避免提示的方法了，但是要小心，因为这些提示的出现都是有其缘故的。在关闭提示之前，您应该完全确保理解了提示的目的。</DIV>
<DIV>注：初译自《Excel Hacks》，仅供参考。</DIV>
<DIV>同时发表于<A href="http://www.excelperfect.com">完美Excel</A>:<A href="http://www.excelperfect.com">http://www.excelperfect.com</A></DIV>]]></description>
</item><item>
<title><![CDATA[在保护的工作表上使用自动筛选功能]]></title>
<link>http://blog.excelhome.net/user1/qingfeng/1067.html</link>
<author>qingfeng</author>
<pubDate>2008-8-25 15:33:00</pubDate>
<description><![CDATA[在保护工作表对话框中，提供了允许“使用自动筛选”的功能。相应的在保护工作表的Protect方法中，也存在一个对应的<SPAN style="COLOR: #0000ff">AllowFiltering</SPAN>参数。
<P>Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, <SPAN style="COLOR: #0000ff">AllowFiltering</SPAN>, AllowUsingPivotTables)</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是事实上，如果需要在保护的工作表上使用自动筛选功能，需保证工作表处于自功筛选模式（必须先在工作表中显示自动筛选下拉箭头）。</P>
<P>以下代码允许在保护工作表后使用自动筛选功能。</P>
<P>Sub ProtectWithFiltering()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With ActiveSheet<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If .AutoFilterMode = False Then&nbsp;&nbsp; '如果工作表不处于自动筛选模式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("A1").AutoFilter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在指定区域切换自动筛选下拉箭头<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Protect AllowFiltering:=True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '保护工作表并允许使用自动筛选功能<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End With<BR>End Sub</P>]]></description>
</item><item>
<title><![CDATA[不打开工作簿搜索包含工作表名称的工作簿文件]]></title>
<link>http://blog.excelhome.net/user1/qingfeng/archives/2008/1066.html</link>
<author>qingfeng</author>
<pubDate>2008-8-25 15:27:00</pubDate>
<description><![CDATA[<P>大家都知道,通过执行4.0宏命令可以实现不打开工作簿获取其中工作表中指定单元格的数据。<BR>如: x=Application.ExecuteExcel4Macro("'D:\Temp\[Test.xls]Sheet1'!R1C1")<BR>获得D:\Temp\Test.xls工作簿文件中Sheet1工作表中A1单元格的数值并保存在变量x中。</P>
<P>下面的SheetInWorkbook函数扩展该方法功能实现不打开工作簿文件而判断指定工作簿中是否存在指定名称的工作表，如果存在工作表结果返回True，否则返回结果False。</P>
<P>Function SheetInWorkbook(ByVal sPath As String, ByVal WbName As String, ByVal ShtName As String) As Boolean<BR>&nbsp;&nbsp;&nbsp; Dim x As String<BR>&nbsp;&nbsp;&nbsp; Dim str4Macro As String<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; If Right(sPath, 1) &lt;&gt; "\" Then sPath = sPath &amp; "\"<BR>&nbsp;&nbsp;&nbsp; str4Macro = "'" &amp; sPath &amp; "[" &amp; WbName &amp; "]" &amp; ShtName &amp; "'!R65536C256"<BR>&nbsp;&nbsp;&nbsp; x = Application.ExecuteExcel4Macro(str4Macro)<BR>&nbsp;&nbsp;&nbsp; If Err.Number = 13 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SheetInWorkbook = False<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SheetInWorkbook = True<BR>&nbsp;&nbsp;&nbsp; End If<BR>End Function</P>
<P>参数说明：</P>
<P>sPath ： 一个字符串，指定工作簿路径。<BR>WbName： 一个字符串，工作簿名称（带扩展名）。<BR>ShtName：一个字符串，需要查找的工作表名称。</P>
<P>* 使用该函数需要确保：<BR>1、存在指定的工作簿文件；<BR>2、指定的单元格不包含错误类型或文本。（为规避错误,指定单元格为R65536C256即IV65536.通常情况下不会把工作表都填满并且最后一个单元格还是一个错误类型吧?呵呵）</P>
<P>下面Test1过程判断D盘根目录下的ll.xls工作簿中是否包含名称为Sheet1的工作表。</P>
<P>Sub Test1()<BR>&nbsp;&nbsp; MsgBox SheetInWorkbook("D:", "ll.xls", "Sheet1")<BR>End Sub</P>
<P>通过以上函数的实现原理，可以实现搜索指定路径下是否存在指定工作表名称的工作簿文件，以下过程巧妙的实现在指定路径下搜索存在指定工作表名称的工作簿文件,并在立即窗口中打印工作簿文件名称。</P>
<P>Public Sub SheetExistSpecialPath(ByVal sPath As String, ByVal sShtName As String)<BR>&nbsp;&nbsp;&nbsp; Dim rtn, x As String<BR>&nbsp;&nbsp;&nbsp; If Right(sPath, 1) &lt;&gt; "\" Then sPath = sPath &amp; "\"<BR>&nbsp;&nbsp;&nbsp; rtn = Dir(sPath &amp; "*.xls")<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; sPath = "'" &amp; sPath &amp; "["<BR>&nbsp;&nbsp;&nbsp; Do While Len(rtn) &gt; 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wb = rtn &amp; "]"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = Application.ExecuteExcel4Macro(sPath &amp; wb &amp; sShtName &amp; "'!R65536C256")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Err.Number &lt;&gt; 13 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Print rtn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rtn = Dir<BR>&nbsp;&nbsp;&nbsp; Loop<BR>End Sub</P>
<P>参数说明：<BR>sPath：&nbsp;&nbsp; 一个字符串，指定工作簿路径。<BR>sShtName：一个字符串，需要查找的工作表名称。</P>
<DIV>测试:</DIV>
<DIV>Sub Test2()<BR>&nbsp;&nbsp;&nbsp; SheetExistSpecialPath "D:", "Sheet1"<BR>End Sub<BR></DIV>]]></description>
</item><item>
<title><![CDATA[专注与实践]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1065.html</link>
<author>fanjy</author>
<pubDate>2008-8-24 22:59:00</pubDate>
<description><![CDATA[<DIV>最近在看两本书，一本名为《求医不如求已》，中里巴人著，是关于医学和健康方面的书藉；一本名为《.NET 2.0面向对象编程揭秘》，金旭亮著，是一本关于计算机编程技术方面的书。两本书的内容大相径庭，但看书的过程中，两位作者的思想和观点都给我很大的启发。<BR><SPAN style="COLOR: #0000ff"><STRONG>专注<BR></STRONG></SPAN>《求医不如求已》一书讲述了很多利用人体自身来治疗、养生、保健的实用妙法，很值得大家研读，并在平时加以使用，毫不夸张地说，这些会为自已的健康带来极其巨大的帮助。在阅读该书，感受到一件件奇妙的事物的同时，也有一些其它的感受。我是指与学习知识有关的感受，例如看看该书第一章中的“7.必须学会与疾病切磋”中的最后一段：<BR>“举这些不经意间治疗成功的例子是想告诉您，不要把治病搞成很繁琐的事。有的朋友每天要按摩很多穴位，还要刮痧、拔罐、练功，总觉得运用的方法越多，治疗的效果越好。其实并非如此，我们的气血就那么多，我们需集中力量，逐个解决身体的问题；切不可将气血分散各处，无的放矢，这样越治问题会越多，终将失去信心和耐心。记住：简单才有效，顺势才迅捷。”<BR>我想，治疗身体如此，平时的学习知识和做事情又何偿不是呢。我们所需要做的就是，集中于一点，各个突破，这样才会有收获。也就是说，无论干什么事情，我们需要的是专注，否则，什么都想要，什么都抓，结果什么都得不到，反倒身心俱惫。<BR><SPAN style="COLOR: #0000ff"><STRONG>实践</STRONG></SPAN><BR>“请读者牢记：学习软件技术的最终目的是应用它来解决现实生活中的实际问题。我们不要当一个’C#语法手册’（在这点上人脑比得过电脑？），也不要当一个只会记忆知识的’两脚书橱’（只顾着吸收知识而不去消化，知识越多，头脑就越僵化），要主动应用知识通过实践去创造真正的价值，以让我们的生活过得更好！”<BR>这是金老师在他的《.NET 2.0面向对象编程揭秘》一书的前言中写下的一段话，非常的中肯，能够让沉迷在理想的技术世界中的人眼前一亮。是的，唯有实践，边学习边实践，在实践中进一步学习，才能积累更多更好的经验，也能体现学习的价值。<BR><SPAN style="COLOR: #0000ff"><STRONG>乐趣</STRONG></SPAN><BR>“我不喜欢那种满纸术语、满页公式、一脸严肃的技术书籍，那总让我回想起令人痛苦的学生阶段——硬着头皮学枯燥无味的教科书，被考试压得透不过气来。<BR>学习不应该变得如此枯燥，探索未知的世界应该是一件有趣的事。尤其是编程，更是一件好玩的事，一件很让人有成就感的事。”<BR>这也是金老师在他的《.NET 2.0面向对象编程揭秘》一书的前言中的话语。在学习中找到乐趣，在乐趣中学习！<BR><SPAN style="COLOR: #0000ff"><STRONG>附链接</STRONG></SPAN><BR>金旭亮老师在CSDN中的博客：<A href="http://blog.csdn.net/bitfan" target=_blank>http://blog.csdn.net/bitfan</A><BR>金旭亮老师在新浪中的博客：<A href="http://blog.sina.com.cn/bitfan" target=_blank>http://blog.sina.com.cn/bitfan<BR></A>中里老师的网站：<A href="http://www.mr2dr.com/" target=_blank>http://www.mr2dr.com/</A><BR>中里老师的博客：<A href="http://jinjiduli.blog.hexun.com/" target=_blank>http://jinjiduli.blog.hexun.com/</A></DIV>]]></description>
</item><item>
<title><![CDATA[奥运北京之行]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1064.html</link>
<author>chrisfang</author>
<pubDate>2008-8-21 20:32:00</pubDate>
<description><![CDATA[<DIV>8月16日到8月20日，我趁着北京奥运会的大好时光，去北京旅游观光看比赛，亲身去体验火热的奥运气氛。带着我新买的佳能450D，同时也要用相机来代表我的眼睛好好看看这个光彩夺目的新北京。</DIV><BR>
<DIV>5天时间行程排的满满的，照片也拍了近1000张，但上传速度有限，只能挑选几张来粗略地展示一下此番北京之行：</DIV><BR>
<DIV>16号第一天去的是长城，长城上到处彩旗飘扬，One World One Dream的巨大广告牌搭建在城墙边的山脊上。不过我还是觉得国旗映衬下的长城更漂亮：</DIV><BR>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SKzfkop4RfI/AAAAAAAAACI/muoHuKqEcNU/IMG_0404.JPG" border=0></DIV><BR><BR>
<DIV>17号去了北海，在路上碰见了之前在电视新闻里见过的奥运甲壳虫（宣传北京奥运的甲壳虫车队，一共有6辆），怎么样，车子很漂亮吧。正巧被我撞见，运气真不错：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKzhrfq7Q5I/AAAAAAAAACU/wj2pDjegRno/IMG_0627.JPG" border=0></DIV><BR><BR>
<DIV>下午赶往鸟巢，可惜没有当天比赛门票的游客只能从铁丝网外远眺鸟巢：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SKzjqLAiIuI/AAAAAAAAACc/uPc3N_VR9Wk/IMG_0667.JPG" border=0></DIV><BR><BR>
<DIV>或是试图从天桥上一窥鸟巢的全貌：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SKzmUJEbosI/AAAAAAAAACw/51HAyAZB8-k/IMG_0682.JPG" border=0></DIV><BR>
<DIV>鸟巢北面是挺拔的盘古酒店，火炬型的顶部造型和巨大的电子显示屏幕是它的两大亮点，如果能到那上面俯瞰鸟巢，倒也是非常不错的视角：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SKzk6xpD5VI/AAAAAAAAACo/X9ffCY_x1zY/IMG_0671.JPG" border=0></DIV><BR><BR>
<DIV>鸟巢外面倒票的人很多，大多是当天的田径门票，17号当天下午没有什么特别的项目，最大的亮点可能也就是女子100米的决赛，但是这样门票还是炒到了1500。问了一下男子110米栏半决赛那天的票，价格是6000元！</DIV>
<DIV>正在失望中的时候，遇见一位急于出手的500元叫卖两张男子佩剑团体决赛门票，太好了，真是天赐良机，有了门票就能进场与鸟巢亲密接触了，此时距离佩剑比赛开场只有50分钟了：（照片的背景就是水立方）</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKznaUGPekI/AAAAAAAAAC8/fiw6j2-uXY4/IMG_0691.JPG" border=0></DIV><BR><BR>
<DIV>门口的引导牌，“国家体育场”就是鸟巢，田径和足球决赛将在这里举行。“国家游泳中心”就是水立方，跳水和游泳项目的比赛场地。“国家体育馆”主要进行体操和蹦床的比赛。“国家会议中心击剑馆”<BR>就是我现在要去的击剑场馆：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SKzor-EOpWI/AAAAAAAAADE/IvLC-DyPceA/IMG_0698.JPG" border=0></DIV><BR><BR>
<DIV>周围到处都是满脸开心和满足的人群，最开心的莫过于孩子：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SKztjR9O_XI/AAAAAAAAADQ/fXUPGXFVdG0/IMG_0706.JPG" border=0></DIV><BR><BR>
<DIV>终于可以近距离观察鸟巢，此时已经接近下午6点，天色渐晚，鸟巢十分自然地与远处的天色相融合，但外表强健的钢筋骨架依然显得苍劲有力：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKz0m4k1pnI/AAAAAAAAADw/YWACLmihl9Q/IMG_0723.JPG" border=0></DIV><BR>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKzyXgTuVjI/AAAAAAAAADk/gc-m0iLGH3s/IMG_0713.JPG" border=0></DIV><BR>
<DIV>再靠近一些，广场灯柱的造型也十分别致：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKzvl4XZTqI/AAAAAAAAADc/QlrfEB_QvbA/IMG_0710.JPG" border=0></DIV><BR><BR><BR>
<DIV>熊熊燃烧的圣火：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKz4Gwqxf-I/AAAAAAAAAEE/0V9YtkoF1Dc/IMG_0731.JPG" border=0></DIV><BR><BR>
<DIV>这是鸟巢对面的水立方，白天看上去是不是像一个温室大棚：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SKz2YLul00I/AAAAAAAAAD4/c5mhBee94wk/IMG_0724.JPG" border=0></DIV><BR><BR><BR>
<DIV>当天晚上的击剑场馆里有两场比赛，一场是俄罗斯和意大利的三四名决赛，另一场则是美国和法国的冠军争夺战。击剑比赛对摄影真是一个考验，要让快门赶上闪电般的出剑速度，还要应付黑暗的场馆背景。银光剑舞：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SKz5pjFrqPI/AAAAAAAAAEM/c7vttdmjTBc/IMG_0740.JPG" border=0></DIV><BR><BR>
<DIV>这是美国选手斯马特（Keeth Smart），这位双亲早早去世的黑人运动员参赛之前身患血液重疾，能够站上赛场就是一场胜利。美国队看台上的亲友和队友们经常响亮地呼喊着他的名字，为他加油。</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SKz7FiQ5ebI/AAAAAAAAAEY/aA7MKYIqWrw/IMG_0861.JPG" border=0></DIV><BR><BR>
<DIV>最后一轮比赛在斯马特和法国选手皮耶（Julien Pillet，个人佩剑第四名）之间进行，这是最后一剑：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SKz8opqSy8I/AAAAAAAAAEg/7SVDv1M4uTM/IMG_0904.JPG" border=0></DIV><BR><BR>
<DIV>双方比方就此定格，新的冠军产生：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SKz-X3B3CqI/AAAAAAAAAEs/msZxweX-X-E/IMG_0910.JPG" border=0></DIV><BR><BR>
<DIV>法国队登上领奖台：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0E87MeCSI/AAAAAAAAAFI/-Y-mATN9Yoc/IMG_0952.JPG" border=0></DIV><BR><BR>
<DIV>出现在击剑比赛现场的中国击剑队主教练鲍埃尔：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0AkQ3NzII/AAAAAAAAAE0/LNIxFucgfjg/IMG_0916.JPG" border=0></DIV><BR><BR>
<DIV>看得出来这位志愿者的背后都有谁的签名吗？谭雪、黄海洋。</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0C6L0q1yI/AAAAAAAAAFA/3xJRxVJUxwI/IMG_0940.JPG" border=0></DIV><BR><BR>
<DIV>看完击剑比赛出来的时候，已经是晚上。听很多北京人说起过，晚上的鸟巢才是最漂亮的鸟巢：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK0Hj1woGhI/AAAAAAAAAFU/3zp8-0zkJiM/IMG_1001.JPG" border=0></DIV><BR>
<DIV>被红色灯火点亮的鸟巢：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0OQ4welSI/AAAAAAAAAFw/c5nRA9v7fOQ/IMG_1031.JPG" border=0></DIV><BR><BR>
<DIV>圆月、圣火和鸟巢：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0J8NSCBuI/AAAAAAAAAFc/k_pQIRH3hx0/IMG_1003.JPG" border=0></DIV><BR><BR>
<DIV>我也来过把手握祥云的瘾：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0Ma_vLEGI/AAAAAAAAAFo/VPavWSchaJ8/IMG_1027.JPG" border=0></DIV><BR><BR>
<DIV>晶莹透亮的水立方：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK0PvxWwdgI/AAAAAAAAAF8/dTbSKnD9x64/IMG_1040.JPG" border=0></DIV><BR><BR>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK0RMLsolVI/AAAAAAAAAGE/7T2y8F80nsk/IMG_1048.JPG" border=0></DIV><BR>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0SmYyczEI/AAAAAAAAAGQ/kjCroYDrW80/IMG_1050.JPG" border=0><BR><BR></DIV>
<DIV>再来对比一下鸟巢旁的玲珑塔，白天看上去普普通通，晚上却会幻化出五彩六色：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0awrakXcI/AAAAAAAAAPU/A1kf8tmjgmM/%E6%97%8B%E8%BD%AC%20IMG_0730.JPG" border=0></DIV><BR><BR>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK03Tl2sEYI/AAAAAAAAALI/dY8jeXOJt6w/%E6%97%8B%E8%BD%AC%20IMG_0980.JPG" border=0></DIV><BR><BR>
<DIV>18号没有准备去看比赛，就去圆明园和天坛逛了逛，这是在出租车上拍到的未来国贸CBD的标志性建筑——CCTV大楼，有北京人称之为“裤衩”。据说建造的时候经常有附近居民向相关部门报告这两幢楼造歪了。这两栋楼的钢材消耗比鸟巢还多出一个数量级，据说两幢楼对接时的施工必须选择在太阳升起以前，否则光照的热量会让钢筋变形而产生偏差：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK1iXop72dI/AAAAAAAAAOo/crmKOTfxfe8/IMG_0244.JPG" border=0></DIV><BR><BR>
<DIV>这是圆明园绮春园门口的铜兽首喷水池，是依照当年大水法的喷水池仿建的，真正的十二生肖铜兽首也由保利集团和何鸿燊先生从海外购回，现正在园内展出：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK0TwfPPu7I/AAAAAAAAAGY/RQqGDe76T20/IMG_1071.JPG" border=0></DIV><BR><BR>
<DIV>19号上午有两场女排1/4决赛的比赛要去看，这是朋友送的票，可惜中国队的比赛要到晚上才进行，这是首都体育馆：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0zLuw_Q-I/AAAAAAAAAJI/FVctMjVd6mE/IMG_1644.JPG" border=0></DIV><BR><BR>
<DIV>这是当天的赛程安排，我要看的两场分别是古巴对阵塞尔维亚，巴西对阵日本。当时我就预测，今天的欧洲球队都将出局，果然一天下来，塞尔维亚、俄罗斯和意大利都分别被淘汰出局。</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK0U-jA9cEI/AAAAAAAAAGk/gKSHheEdBBs/IMG_1320.JPG" border=0><BR></DIV>
<DIV><BR><BR><BR>第一场是古巴对阵塞尔维亚，双方实力相差较大。古巴队4号位进攻：<BR><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0WtSSkBAI/AAAAAAAAAGs/VYk0RWnqFtc/IMG_1409.JPG" border=0></DIV><BR><BR>
<DIV>塞尔维亚跳发球：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0cxfBk1WI/AAAAAAAAAHY/aG5kCvVmEoQ/IMG_1411.JPG" border=0></DIV><BR><BR>
<DIV>古巴队2号桑托斯在2号位的扣球：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0eu9T-4EI/AAAAAAAAAHk/aLi8Lt1Ovjk/IMG_1468.JPG" border=0></DIV><BR><BR>
<DIV>这是双方第三局比赛的最后一球，古巴队本场比赛的赛点。塞尔维亚队4号位的进攻：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0g353fZzI/AAAAAAAAAHs/Py3sgx2fQmc/IMG_1477.JPG" border=0></DIV><BR><BR>
<DIV>古巴队双人拦网成功，3:0结束整场比赛，晋级4强：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK0jC8vdsGI/AAAAAAAAAH4/rITPS6zju04/IMG_1478.JPG" border=0></DIV><BR><BR>
<DIV>第二场是巴西对阵日本，这是赛前练习：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK0lFgxKRUI/AAAAAAAAAIA/B3kCCNJF_Og/IMG_1497.JPG" border=0></DIV><BR><BR>
<DIV>看台上热情的巴西球迷：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK0nqj1l2AI/AAAAAAAAAIM/ZEFqcH4yq9M/IMG_1501.JPG" border=0></DIV><BR><BR>
<DIV>巴西队3号，主攻手玛丽安妮在2号位的重扣，弹跳高度惊人，威力巨大。</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK0pjynxYtI/AAAAAAAAAIU/mFt5q2tSUTg/IMG_1512.JPG" border=0></DIV><BR><BR>
<DIV>日本队里有两位高个“美女”，这个是12号木村纱织，据说出生地是上海：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK0rnrizh_I/AAAAAAAAAIg/YkR3FGBWsy0/IMG_1574.JPG" border=0></DIV><BR><BR>
<DIV>这个是1号栗原 惠，身高1米86，主攻手：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK0tayGYihI/AAAAAAAAAIo/Dbd6cbX62PU/IMG_1615.JPG" border=0></DIV><BR><BR>
<DIV>再来一张栗原 惠：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK0vgn8xsgI/AAAAAAAAAI0/kW5AJ2sdW_0/IMG_1626.JPG" border=0></DIV><BR><BR>
<DIV>日本队面对强大的巴西对也没能坚持多久，比方很快定格在0:3。</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK0w7WN55iI/AAAAAAAAAI8/4YaGpDRSo7A/IMG_1637.JPG" border=0></DIV>
<DIV><BR>&nbsp;</DIV>
<DIV><BR>从排球场馆出来后，去了故宫。神武门“神武”的朱漆大门：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK1GrVLI9DI/AAAAAAAAANU/kYV3woWhrRg/%E6%97%8B%E8%BD%AC%20IMG_0655.JPG" border=0></DIV><BR><BR>
<DIV>太和殿修葺一新，金碧辉煌的大门：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK07FiKDWnI/AAAAAAAAAN0/qsiB9NJgqN4/%E6%97%8B%E8%BD%AC%20IMG_1799.JPG" border=0></DIV><BR><BR>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK1HnscKRNI/AAAAAAAAANY/0F5qoc8paws/%E6%97%8B%E8%BD%AC%20IMG_1800.JPG" border=0></DIV><BR><BR>
<DIV>故宫里的漂亮洋妞：</DIV>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK04iedws3I/AAAAAAAAALM/xz3vInrwLAY/%E6%97%8B%E8%BD%AC%20IMG_1662.JPG" border=0></DIV><BR><BR>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK05dJWrgZI/AAAAAAAAANw/c9vz-BxKF9M/%E6%97%8B%E8%BD%AC%20IMG_1668.JPG" border=0></DIV>
<DIV><BR>&nbsp;</DIV>
<DIV>天安门前留影的人很多，警卫战士依旧神情严肃：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK00yRJGYTI/AAAAAAAAAJQ/dLXCqvfhnRY/IMG_1917.JPG" border=0></DIV><BR><BR><BR>
<DIV>这是我比较满意的角度：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK1IR1jcLlI/AAAAAAAAANc/IxbRM5re5JA/%E6%97%8B%E8%BD%AC%20IMG_1936.JPG" border=0></DIV><BR>
<DIV><IMG alt="" src="http://lh3.ggpht.com/chrisfang1978/SK1I2dWkIXI/AAAAAAAAANg/tzKXiczocPw/%E6%97%8B%E8%BD%AC%20IMG_1943.JPG" border=0></DIV><BR><BR>
<DIV>再换个角度：</DIV>
<DIV><IMG alt="" src="http://lh5.ggpht.com/chrisfang1978/SK1JTEwjfTI/AAAAAAAAANk/Oe_BBIftapA/%E6%97%8B%E8%BD%AC%20IMG_1948.JPG" border=0></DIV><BR><BR><BR>
<DIV>20号终于踏上回程，这是著名的T3航站楼：</DIV>
<DIV><IMG alt="" src="http://lh6.ggpht.com/chrisfang1978/SK0102TVD6I/AAAAAAAAAJc/wrfyNHfjCAw/IMG_1985.JPG" border=0></DIV><BR><BR>
<DIV>候机厅顶层的天花板很有特色，据说不同的区域有不同的颜色：</DIV>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK1J9sjIQaI/AAAAAAAAANo/Tyfwu6lkyUk/%E6%97%8B%E8%BD%AC%20IMG_1977.JPG" border=0></DIV><BR><BR>
<DIV><IMG alt="" src="http://lh4.ggpht.com/chrisfang1978/SK1KiK3KQTI/AAAAAAAAANs/mkEALrSBQJ0/%E6%97%8B%E8%BD%AC%20IMG_1988.JPG" border=0></DIV><BR><BR>
<DIV>看图说话到此为止，真是一次令人兴奋的北京之旅。<BR>&nbsp;</DIV>]]></description>
</item><item>
<title><![CDATA[在工作表中动态添加窗体控件]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1063.html</link>
<author>fanjy</author>
<pubDate>2008-8-19 8:38:00</pubDate>
<description><![CDATA[<DIV>下面的内容及程序代码模仿自《Excel 2007 VBA Programmer’s Reference》，可能在某些情形下极其有用，因此特辑录于此，供参考。<BR>如下图所示，双击工作表Sheet1的列A中的任一单元格，将出现一组合框，允许用户选择其中的项目。当用户选取某项目后，将自动输入到该单元格，并在该单元格右侧的单元格中输入相应的价格数字，组合框同时消失。<BR><A title=addcomboxdynamic1 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/addcomboxdynamic1.png"><IMG alt=addcomboxdynamic1 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/addcomboxdynamic1.png"></A><BR>下面是程序代码。在工作表Sheet1的代码模块中输入BeforeDoubleClick事件代码：</DIV>
<DIV><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Worksheet_BeforeDoubleClick(<SPAN style="COLOR: #00007f">ByVal</SPAN> Target <SPAN style="COLOR: #00007f">As</SPAN> Range, Cancel <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: #00007f">If</SPAN> <SPAN style="COLOR: #00007f">Not</SPAN> Intersect(Target, Columns(”A”)) <SPAN style="COLOR: #00007f">Is</SPAN> <SPAN style="COLOR: #00007f">Nothing</SPAN> <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: #00007f">Call</SPAN> AddDropDown(Target)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cancel = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN><BR></SPAN>在任一模块中，输入下面的代码：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Sub</SPAN> AddDropDown(Target <SPAN style="COLOR: #00007f">As</SPAN> Range)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> ddBox <SPAN style="COLOR: #00007f">As</SPAN> DropDown<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> vProducts <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Variant</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> i <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Integer</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘创建产品数组</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;vProducts = Array(”香蕉”, “苹果”, “菠萝”, “葡萄”)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘在目标单元格中添加下拉控件</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">With</SPAN> Target<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> ddBox = Sheet1.DropDowns.Add(.Left, .Top, .Width, .Height)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">With</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘定义执行的宏并填充列表</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">With</SPAN> ddBox<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.OnAction = “EnterProdInfo”<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">For</SPAN> i = <SPAN style="COLOR: #00007f">LBound</SPAN>(vProducts) <SPAN style="COLOR: #00007f">To</SPAN> <SPAN style="COLOR: #00007f">UBound</SPAN>(vProducts)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.AddItem vProducts(i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Next</SPAN> i<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">With</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN>
<DIV></DIV>
<DIV><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> EnterProdInfo()<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> vPrices <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Variant</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘创建价格数组</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;vPrices = Array(6, 8, 5, 4)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘输入所选项到相应的单元格</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">With</SPAN> Sheet1.DropDowns(Application.Caller)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TopLeftCell.Value = .List(.ListIndex)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TopLeftCell.Offset(0, 1).Value = vPrices(.ListIndex + <SPAN style="COLOR: #00007f">LBound</SPAN>(vPrices) - 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘删除</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Delete<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">With</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></DIV></SPAN></DIV>
<DIV><BR><SPAN style="FONT-FAMILY: Verdana">如下图所示：</SPAN><BR><A title=addcomboxdynamic2 href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/addcomboxdynamic2.png"><IMG alt=addcomboxdynamic2 src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/addcomboxdynamic2.png"></A></DIV>
<DIV><SPAN style="FONT-FAMILY: Courier"></SPAN>&nbsp;</DIV>
<DIV><SPAN style="FONT-FAMILY: Courier">注:同时发表于<A href="http://www.excelperfect.com">完美Excel</A></SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[Excel Hacks #3：阻止用户执行某些操作]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1060.html</link>
<author>fanjy</author>
<pubDate>2008-8-16 19:54:00</pubDate>
<description><![CDATA[<P><SPAN style="COLOR: #0000ff"><STRONG>虽然Excel为工作簿和工作表提供了全面的保护，但是这种“生硬的”工具没有限制用户的“特权”，除非您使用一些技巧。<BR></STRONG></SPAN>通过监控和响应事件，您能够管理电子表格与用户的交互。事件是处理工作簿和工作表时所发生的操作。一些常见的事件包括打开工作簿、保存工作簿和关闭工作簿。当触发这些事件中的任一事件时，您能告诉Excel自动执行一些VB代码。<BR><SPAN style="COLOR: #0000ff">提示：用户能够通过完全禁用宏，从而避免所有保护。单击Office按钮─—Excel选项─—信任中心─—信任中心设置，按“宏设置”按钮，如果安全性被设置为“禁用所有宏，并且不通知”，那么在打开含有宏的工作簿时将没有机会运行宏。<BR></SPAN><STRONG><SPAN style="COLOR: #0000ff">阻止工作簿“另存为…”<BR></SPAN></STRONG>通过选择Office按钮─—保存─—工具按钮─—常规选项，然后选中“建议只读”复选框，这样可以指定任何工作簿被保存为只读。这能阻止用户对该文件保存所做的任何修改，除非将其保存为不同的名称或者在不同的位置保存该文件。<BR>然而，有时您可能想阻止用户使用或者不使用不同的名称在另一个目录或文件夹中保存工作簿副本。换句话说，您想用户能够在现有文件中保存，而不是在其他地方保存另一个副本。当多个人对某个工作簿保存修改时，这特别方便，此时不会存在保存在不同文件夹中相同工作簿的多个副本。<BR>自从Excel 97后，就可以使用“保存前”事件了。正如其名称所述，该事件在工作簿被保存之前发生，能够在事实发生之前捕获用户、发出警告，以及阻止Excel保存。<BR>要插入代码，打开工作簿并选择“开发工具─—Visual Basic”，双击工程资源管理器中的ThisWorkbook，在VBE中输入下面的代码，如图1所示，然后返回工作簿，再保存工作簿：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Workbook_BeforeSave(<SPAN style="COLOR: #00007f">ByVal</SPAN> SaveAsUI <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>, Cancel <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> lReply As <SPAN style="COLOR: #00007f">Long</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> SaveAsUI = <SPAN style="COLOR: #00007f">True</SPAN> <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lReply = MsgBox(”对不起,不允许您以其它名称保存本工作簿.” &amp; _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;”您希望保存本工作簿吗?”, vbQuestion + vbOKCancel)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cancel = (lReply = vbCancel)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> Cancel = <SPAN style="COLOR: #00007f">False</SPAN> <SPAN style="COLOR: #00007f">Then</SPAN> Me.Save<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cancel = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR><A title=beforesave href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/beforesave.png"><IMG height=326 alt=beforesave src="http://blog.excelhome.net/UploadFiles/2008-8/71926.8285899.png" width=594 border=0></A><BR>图1：输入到ThisWorkbook中的代码<BR>此时，选择“Office按 钮─—保存”，该工作簿将按预料的那样保存。然而，在选择“Office按钮─—另存为”时，Excel将通知您不能以其它的名称保存该工作簿，除非您禁用宏。<BR><SPAN style="COLOR: #0000ff">提示：当在Excel 2007中保存工作簿时，如果该工作簿包含宏或代码，那么应该将工作簿保存为启用宏的工作簿（*.xlsm），而不能保存为标准的Excel文件格式（ *.xlsx）。</SPAN><BR><STRONG><SPAN style="COLOR: #0000ff">阻止用户打印工作簿<BR></SPAN></STRONG>可能您想阻止用户打印您的工作簿，此时使用Excel的“打印前”事件。在VBE中输入下面的代码：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Workbook_BeforePrint(Cancel <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Cancel = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;MsgBox “对不起,您不能打印本工作簿.”, vbInformation<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR>如果希望仅阻止用户打印工作簿中特定的工作表，使用下列代码：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Workbook_BeforePrint(Cancel <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Select</SPAN> <SPAN style="COLOR: #00007f">Case</SPAN> ActiveSheet.Name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Case</SPAN> “Sheet1″, “Sheet2″<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cancel = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox “对不起,您不能打印本工作簿中的这个工作表.”, vbInformation<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Select</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR>注意，您指定阻止打印工作表“Sheet1”和“Sheet2”。当然，可以修改为工作簿中的任何工作表的名称。要添加工作表，只需在代码后面加上逗号，然后在双引号中输入该工作表的名称。<BR><STRONG><SPAN style="COLOR: #0000ff">阻止用户插入更多的工作表<BR></SPAN></STRONG>Excel可以保护工作簿的结构以便用户不能删除工作表、重新排列它们出现的顺序、重新命名它们，等等。但是，有时希望仅阻止添加更多的工作表，而仍然允许其它的结构更改。<BR>可以使用下列代码：<BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN> Workbook_NewSheet(<SPAN style="COLOR: #00007f">ByVal</SPAN> Sh <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Object</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.DisplayAlerts = <SPAN style="COLOR: #00007f">False</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;MsgBox “对不起,不能对工作簿添加任一工作表.”, vbInformation<BR>&nbsp;&nbsp;&nbsp;&nbsp;Sh.Delete<BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.DisplayAlerts = <SPAN style="COLOR: #00007f">True</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN></SPAN><BR>上述代码首先显示消息框，然后在用户单击消息框中的确定按钮后立即删除新添加的工作表。Application.DisplayAlerts = False语句的阻止标准的Excel警告，即要求用户是否想删除工作表。<BR>另一种阻止用户添加工作表的方法是，选择“审阅─—更改─—保护工作簿”，然后按下“保护结构和窗口”。然而，正如本技巧开始所述，Excel的工作表保护是相当“生硬的”工具，它会同时阻止了许多其它的Excel功能。</P>
<DIV>注：初译自《Excel Hacks》，仅供参考。同时发表于<A href="http://www.excelperfect.com">完美Excel</A>.</DIV>
<br/>]]></description>
</item><item>
<title><![CDATA[Excel Hacks #2：同时输入数据到多个工作表]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1059.html</link>
<author>fanjy</author>
<pubDate>2008-8-14 13:18:00</pubDate>
<description><![CDATA[<DIV>经常需要在多个工作表中重复某些数据。可以使用Excel的组合工具，使得在某工作表中输入数据时能够同时将数据输入到多个工作表中。然而，也有更快速且灵活的方式，即使用VBA代码。<BR>在Excel中，有一项能使数据一次放置在多个位置的功能，称之为组。其操作是通过将工作表组合在一起，以便它们在工作簿内建立链接。<BR>手工组合工作表<BR>要手工使用组的功能，只需简单地单击将要输入数据的工作表，并在单击想要放置数据的工作表的标签名时按住Ctrl键。此时，当在工作表的任意单元格中输入数据时，这些数据也将自动输入到已组合的其它工作表中。<BR>要取消工作表组合，只需单击除组合的工作表之外的其它任一工作表标签，或者在工作表标签中单击右键，选择“取消组合工作表”命令。<BR>提示：当将工作表组合在一起时，能够看到标题栏中在工作簿名称后面添加了一对方括号，其中显示“工作组”。这能很方便地查看工作表是否是组合的。建议在完成同步输入数据操作后，取消工作表组合。<BR>虽然上面介绍的方法很容易，但也意味着需要记住工作表是否处于组合状态，并且在不需要时取消组合，否则将存在覆盖其它工作表数据的风险。例如，您可能想仅对某特定的单元格区域同步输入数据，如果在其它区域输入数据时，忘记取消工作表组合则可能覆盖掉其它工作表中已存在的数据或者输入不需要的数据。<BR>自动组合工作表<BR>能够通过使用一些非常简单的VBA代码克服上述缺点。要使这些代码能够工作，必须将它们放置在Sheet对象的私有模块中。即在VBE中右击工作表名称，选择“查看代码”或者双击工作表名称。然后，使用Excel的工作表事件之一，并将代码放置在事件过程中。<BR>首先命名希望成组的单元格区域，以便在其它工作表中自动显示数据。然后，在工作表模块中输入下面的代码：<BR>Private Sub Worksheet_SelectionChange(ByVal Target As Range)<BR>If Not Intersect(Range(”MyRange”), Target) Is Nothing Then<BR>‘有目的的将工作表Sheet5放置在第一位,使之成为活动工作表<BR>Sheets(Array(”Sheet5″, “Sheet3″, “Sheet1″)).Select<BR>Else<BR>Me.Select<BR>End If<BR>End Sub<BR>在代码中，使用了命名的区域MyRange，可以将MyRange修改为您工作表中使用的单元格区域名称，同时修改代码中三个工作表名称为希望组合的工作表名称。<BR><A title=syncode href="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/syncode.png"><IMG alt=syncode src="http://www.excelperfect.com/wordpress/wp-content/uploads/2008/08/syncode.png"></A><BR>图：自动组合工作表的代码<BR>注意，代码中在数组中使用的第一个工作表名必须是包含代码的工作表，并且您将在该工作表中输入数据。<BR>一旦编写好代码，每次选择工作表中的任意单元格时，代码就会检查是否所选的单元格在命名区域MyRange中。如果在该区域，那么代码将自动组合你希望组合的工作表。如果不在，将通过激活正处理的工作表而取消组合。这项技巧的优点是不需要人工组合工作表，因而没有因为忘记取消组合而造成的危险，同时节省了时间并避免产生障碍。<BR>如果希望在其它工作表中显示相同的数据，但不是出现在相同的单元格地址，那么使用如下的代码：<BR>Private Sub Worksheet_Change(ByVal Target As Range)<BR>If Not Intersect(Range(”MyRange”), Target) Is Nothing Then<BR>With Range(”MyRange”)<BR>.Copy Destination:=Sheets(”Sheet3″).Range(”A1″)<BR>.Copy Destination:=Sheets(”Sheet1″).Range(”D10″)<BR>End With<BR>End If<BR>End Sub<BR>上面的代码也需要放置在Sheet对象的模块中，具体操作与前面内容相同。</DIV>
<br/>
<DIV>注:：初译自《Excel Hacks》，仅供参考。同时发表于<A href="http://www.excelperfect.com" target=_blank>完美Excel</A>。</DIV>]]></description>
</item><item>
<title><![CDATA[汇总文件夹内所有工作簿的所有工作表记录]]></title>
<link>http://blog.excelhome.net/user1/gvntw/archives/2008/1057.html</link>
<author>gvntw</author>
<pubDate>2008-8-13 10:51:00</pubDate>
<description><![CDATA[<P>Private Sub CommandButton1_Click()<BR>&nbsp;&nbsp;&nbsp; Dim d As New Dictionary, arr(), i%, j%<BR>&nbsp;&nbsp;&nbsp; Dim cn As New ADODB.Connection<BR>&nbsp;&nbsp;&nbsp; Dim rst As New ADODB.Recordset<BR>&nbsp;&nbsp;&nbsp; Dim cat As New Catalog<BR>&nbsp;&nbsp;&nbsp; Dim sql$, MyPath$, MyFiles$, TWb$<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; On Error GoTo Err<BR>&nbsp;&nbsp;&nbsp; Cells = Empty&nbsp;&nbsp; '清空单元格数据<BR>&nbsp;&nbsp;&nbsp; TWb = ThisWorkbook.Name<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; MyPath = ThisWorkbook.Path<BR>&nbsp;&nbsp;&nbsp; MyFiles = Dir(MyPath &amp; "\*.xls")<BR>&nbsp;&nbsp;&nbsp; Do While MyFiles &lt;&gt; ""<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If TWb &lt;&gt; MyFiles Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.Add MyFiles, 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = j + 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyFiles = Dir<BR>&nbsp;&nbsp;&nbsp; Loop<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; If j = 0 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "没有文件可合并", , "gvntw"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; arr = d.Keys: d.RemoveAll</P>
<P>&nbsp;&nbsp;&nbsp; For i = 0 To UBound(arr)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cn.Open "Provider=Microsoft.Jet.OleDb.4.0;Extended Properties=Excel 8.0;Data Source=" &amp; MyPath &amp; "\" &amp; arr(i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set cat.ActiveConnection = cn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each Tabs In cat.Tables<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql = "Select """ &amp; Replace(arr(i), ".xls", "") &amp; """ as 单位,""" &amp; Replace(Tabs.Name, "$", "") &amp; """ as 月份,* From [Excel 8.0;DATABASE=" &amp; MyPath &amp; "\" &amp; arr(i) &amp; "].[" &amp; Tabs.Name &amp; "]"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.Add sql, 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cn.Close<BR>&nbsp;&nbsp;&nbsp; Next</P>
<P>&nbsp;&nbsp;&nbsp; sql = Join(d.Keys, " UNION ALL ")<BR>&nbsp;&nbsp;&nbsp; sql = "SELECT&nbsp; * from (" &amp; sql &amp; ") order by 姓名,月份"<BR>&nbsp;&nbsp;&nbsp; cn.Open "Provider=Microsoft.Jet.OleDb.4.0;Extended Properties=Excel 8.0;Data Source=" &amp; arr(0)<BR>&nbsp;&nbsp;&nbsp; Set rst = cn.Execute(sql)</P>
<DIV>&nbsp;&nbsp;&nbsp; For i = 1 To rst.Fields.Count<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cells(1, i) = rst(i - 1).Name<BR>&nbsp;&nbsp;&nbsp; Next<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Range("a2").CopyFromRecordset rst<BR>&nbsp;&nbsp;&nbsp; rst.Close: Set rst = Nothing<BR>&nbsp;&nbsp;&nbsp; cn.Close: Set cn = Nothing: Set d = Nothing<BR>&nbsp;&nbsp;&nbsp; MsgBox "表格已汇总完成", , "gvntw"<BR>&nbsp;&nbsp;&nbsp; Exit Sub<BR>Err:<BR>MsgBox Err.Description, , "错误报告"<BR>End Sub</DIV>
<DIV><BR>&nbsp;</DIV>示例附件：<A href="http://blog.excelhome.net/UploadFiles/2008-8/39307.2392123.zip">UploadFiles/2008-8/39307.2392123.zip</A><BR>]]></description>
</item><item>
<title><![CDATA[Excel Hacks #1：创建工作簿的个性化视图]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1055.html</link>
<author>fanjy</author>
<pubDate>2008-8-12 13:10:00</pubDate>
<description><![CDATA[<DIV><STRONG><SPAN style="COLOR: #0000ff">在Excel中，能够同时显示多个工作簿，并且可以有在不同窗口排列的工作簿自定义视图，然后将视图工作区保存为.xlw文件并在需要时使用它们。<BR></SPAN></STRONG>有时，当在Excel中进行操作时，可能需要在屏幕中打开多个工作簿，使之更容易使用或者从多个工作簿中查看数据。下面介绍如何以整洁且有组织的方式进行这项操作。<BR>首先，打开所有需要的工作簿。<BR><SPAN style="COLOR: #0000ff">技巧：要一次打开多个工作簿，选择“Office按钮─—打开”，在“打开”对话框中，在按住Ctrl键的同时选择想要打开的工作簿，然后单击“打开”按钮。</SPAN><BR>从任一工作簿中选择“视图─—窗口─—全部重排”，如果“当前活动工作簿的窗口”复选框已选中，则取消选中，然后选择窗口排列方式并单击“确定”。<BR>如果选择“平铺”，将以平铺的形式显示工作簿，如图1所示。<BR>选择“水平并排”使得一个工作簿在另一个工作簿的顶部，如图2所示。<BR>选择“垂直并排”使得一个工作簿紧挨着另一个工作簿，如图3所示。<BR>选择“层叠”将使一个工作簿在另一个工作簿的上方，如图4所示。</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/47514.75373171.png" border=0></DIV>
<DIV>图1：平铺方式排列的四个工作簿<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/47555.13871072.png" border=0></DIV>
<DIV>图2：水平排列的四个工作簿</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/47598.23200411.png" border=0></DIV>
<DIV>图3：垂直排列的四个工作簿</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/47631.64893717.png" border=0></DIV>
<DIV>图4：层叠的四个工作簿<BR>一旦工作簿按预想的视图显示后，就很容易在工作簿之间移动数据，例如复制、粘贴、拖放等。<BR>如果需要反复创建某个视图，那么能够将其保存为工作区（workspace），即选择“视图─—窗口─—保存工作区”，在“文件名”中输入工作区的文件名，单击“确定”。当保存工作区时，文件的扩展名为.xlw而不是.xlsx。要将某工作簿恢复为完整的窗口，只需双击标题栏。<BR>无论何时需要打开这些同样的工作簿，只需简单地打开.xlw文件。任何对在.xlw文件中的工作簿所作的变化都将在关闭工作区时自动保存，或者可以单独保存工作簿。<BR>如果花些时间为需要在多个打开的工作簿中重复操作而设置自定义视图，将会发现这些操作将更容易管理。可以为不同的重复任务使用不同的视图，这取决于具体的任务或者您的感觉。
<P>注：初译自《Excel Hacks》，仅供参考。</P></DIV>]]></description>
</item><item>
<title><![CDATA[术有专攻 日益精进]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1053.html</link>
<author>fanjy</author>
<pubDate>2008-8-11 13:27:00</pubDate>
<description><![CDATA[<P>这是周靖老师在其所译的著作《C#本质论》（英文名《Essential C# 2.0》）的译者序所使用的题目。在序中，有一段话很好，特摘录于此，共勉之！<BR><SPAN style="COLOR: #0000ff">—————————————————</SPAN><BR>最近在看《史记 孔子世家》，撷取孔子学琴一则与各位共勉：<BR>孔子学鼓琴师襄子，十日不进。师襄子曰：“可以益矣。”孔子曰：“丘已习其曲矣，未得其数也。”有间，曰：“已习其数，可以益矣。”孔子曰：“丘未得其志也。”有间，曰：“已习其志，可以益矣。”孔子曰：“丘未得其为人也。”有间，有所穆然深思焉。曰：“丘得其为人，黯然而黑，几然而长，眼如望羊，如王四国，非文王其谁能为此也！”师襄子辟席再拜，曰：“师盖云文王操也。”<BR>这则故事的大意为孔子向师襄子学琴，学了十天并不要求学习新的东西。尽管师襄子一再敦促可以增加新的内容，但孔子坚信，不达到三个境界，不能继续学习新的东西：学习常握演奏的技巧，领会其中的志趣，熟悉乐曲的作者。最终，孔子领悟到乐曲作者的心境，使师襄子叹服不已。<BR>每学习一种新东西，都离不开这三个境界，正所谓“昨夜西风凋碧树，独上高楼，望尽天涯路”，此境界一也；“衣带渐宽终不悔，为伊消得人憔悴”，此境界二也；“众里寻他千百度，回头蓦见，那人正在，灯火阑珊处”，此境界三也。<BR>从事技术图书的翻译多年，经常有读者来信问：“我想学习编程，如何入手？”对待这种问题，我往往会勉励他们，万丈高楼平地起，首先要搭建好整个学习框架，梳理整个学习层次，然后选择合适的入门书夯实基础，完全掌握之后再按照已经搭建好的框架逐一填充各个学习模块。<BR>……</P>]]></description>
</item><item>
<title><![CDATA[佳能450D试机照]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1052.html</link>
<author>chrisfang</author>
<pubDate>2008-8-11 10:40:00</pubDate>
<description><![CDATA[<DIV>上周刚刚新买了一台单反Canon450D+Sigma18-200mm F3.5-6.3 DC OS，周末去试了一下机器，拍了一些照片，以长焦端为主。</DIV>
<DIV>由于博客限制文件大小为2M，因此上传之前还是进行了一些压缩。</DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/33805.59394581.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/31694.31383361.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/35267.28531924.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/84731.84524563.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/83866.31156219.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/82923.13722427.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1024 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/79745.73556368.jpg" width=1280 border=0></DIV><BR>
<DIV><IMG height=1280 alt="" src="http://blog.excelhome.net/UploadFiles/2008-8/85515.94298657.jpg" width=1024 border=0></DIV>]]></description>
</item><item>
<title><![CDATA[从关闭的工作簿中取值]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1046.html</link>
<author>fanjy</author>
<pubDate>2008-8-7 13:19:00</pubDate>
<description><![CDATA[<DIV>有许多种从关闭的工作簿中取值的方法，下面是其中之一。下面的VBA代码从关闭的工作簿中获取值。</DIV>
<DIV>&nbsp;</DIV<FONT New face="Courier"><SPAN style="COLOR: #00007f">Sub</SPAN> ExtractDataFromClosedWorkBook()<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.ScreenUpdating = <SPAN style="COLOR: #00007f">False</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'创建链接来从关闭的工作簿中获取数据</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'可以将相关代码修改为相应的路径和单元格</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">With</SPAN> [Sheet1!A1:B4]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Value = "='" &amp; ActiveWorkbook.Path &amp; "\[testDataWorkbook.xls]Sheet1'!A1:B4"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: #007f00">'删除链接</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Value = .Value<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">With</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;Application.ScreenUpdating = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN><BR></FONT>其中，可以将代码中的路径修改为需要从中获取值的工作簿的路径，单元格也作相应的修改。</DIV>]]></description>
</item><item>
<title><![CDATA[接力问答游戏]]></title>
<link>http://blog.excelhome.net/user1/kevin/archives/2008/1044.html</link>
<author>Kevin</author>
<pubDate>2008-7-31 19:50:00</pubDate>
<description><![CDATA[<DIV>今天被陈希章同学在MSN上点名了，发现现在居然流行这么一种游戏。</DIV>
<DIV>其实人生也就是一场游戏，但如果你想玩得精彩，就得认真地玩、真诚地玩。</DIV><BR>
<DIV>****************************************************************************************************</DIV>
<DIV>游戏的规则：<BR>A. 被点到的要在自己的博客里写下自己的答案，然后去掉一个你最不喜欢的问题再加上一个你的问题，仍然组成20个问题，传给其他8个人。列出8个需要回答问题的人的名字，还要通知对方"你被点名了"，<BR>B. 这8个人要在自己的博客里注明是从哪里接到的，并且再传给其他8个人，让游戏继续下去，不得回传。被点到名字的人将会得到大家的祝福，并且所有美好的愿望都会在不久的将来实现。 <BR>*******************************************************************************************************</DIV>
<DIV><STRONG><SPAN style="COLOR: #0000cd">1. 喜欢的季节和颜色 </SPAN></STRONG></DIV>
<DIV><SPAN style="COLOR: #0000cd">初夏<BR>我觉得每种颜色都是美丽的</SPAN></DIV>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">2. 最近在听的，有能说出你心事的歌么，写句歌词给我？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">最近不常听歌</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">3. 异性的什么是最吸引你的？为什么？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">性情</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">4. 你最希望从朋友（不包括爱人）那里得到的是什么？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">坦诚和理解&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">5. 说说你去过的最难忘的一个地方？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">有点怕”最“这个字，感觉这个问题像学生时代的作文题目。令人难忘的地方有很多，可以因为各种原因而难忘，三亚的碧海蓝天、厦门的环岛路、杭州的西湖、SFO的金门大桥……</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">6. 推荐一家你认为好吃又实惠的美食店。 </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">自从有了LP，似乎很久没在外面吃了，以前吃过的地方也没有符合此标准的。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">7. 你的星座是什么？比较欣赏哪个星座？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">天秤座。星座是人的只读属性，和出生日期相关，有什么必要谈欣赏不欣赏？</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">8. 遇到喜欢的人，你是勇敢表白还是默默关注？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">我这种人似乎不太会一见钟情，哈哈。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">9. 说出点你名的人的3个优点（不可删除题） </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">我和希章在MSN和邮件上说的话似乎比实际生活中说的话更多。<BR>这位仁兄是充满智慧、勤奋而又真诚的人。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">10. 什么事情会让你觉得很幸福？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">爱与被爱</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">11. 你最想回到哪一年重新开始？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">如果真要回，那就从娘胎开始吧，也许可以体验另一种完全不同的人生。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">12. 计划过自己的将来么，有的话说说。&nbsp; </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">稳定的事业，平静温馨的家庭生活。<BR>&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">13. 你对你的近况满意吗？有什么需要改变？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">满意，但还需要继续努力。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">14. 有想过以后家里会养一个或几个宠物吗？会选择养那种呢？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">想过养只小狗，可是LP不喜欢，而我也很可能没有精力照顾它。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><SPAN style="COLOR: #0000cd"><STRONG>15. 你最讨厌的一件事是什么？</STRONG> </SPAN></P>
<P><SPAN style="COLOR: #0000cd">遇到完全意外的事件打乱计划。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">16. 最喜欢的旅游地？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">去的地方还不够多，特别是真的当作旅游的地方还太少。希望最近两年有机会去黄山或者云贵川。<BR>&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">17. 在过去的时光里，你为自己最感到骄傲的一件事情是什么？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">建设了Excel Home这样的平台，现在每天有数以万计的Office用户在上面交流和学习。</SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">18.你有没为自己的目标奋斗过？ </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">有，一直在奋斗 </SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">19. 此时此刻的一个小愿望? </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">希望Excel Home的原创图书能有不错的成绩。 </SPAN></P>
<P><SPAN style="COLOR: #0000cd">&nbsp; </SPAN></P>
<P><STRONG><SPAN style="COLOR: #0000cd">20. 你希望有个怎样的人生? </SPAN></STRONG></P>
<P><SPAN style="COLOR: #0000cd">淡定，做自己喜欢做的事情，和自己喜欢的人在一起。</SPAN></P>
<P> </P>
<P><STRONG>游戏接力： </STRONG></P>
<P><STRONG>========================================================================================================== </STRONG></P>
<P><STRONG>增加的题目是：你觉得自己有什么不足？ </STRONG></P>
<P><STRONG>删除的题目是：你的星座是什么？比较欣赏哪个星座？&nbsp; </STRONG></P><BR>
<DIV>终于做完了，还真的费了不少脑筋，相当于认真思考了一下自己目前的生活。</DIV>
<DIV>轮到我点名了，不好点，因为并不是每个人都有写博客，呵呵。</DIV><BR>
<DIV>xiebaby、Grace、Shirley、ZJ、LW、Rose、fanjy、果果、gvntw</DIV>]]></description>
</item><item>
<title><![CDATA[Excel应用程序开发心得(一)]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1043.html</link>
<author>fanjy</author>
<pubDate>2008-7-31 19:52:00</pubDate>
<description><![CDATA[<P>近期正在利用Excel开发一套工作管理系统，已初步有了结果，并开始使用。前不久，在一篇博客文章中，我贴出了该系统的主界面。在这里，随便谈谈在开发过程中的一些心得体会，供大家参考。</P>
<UL>
<LI><SPAN style="COLOR: #0000ff"><STRONG>不要将所有任务全部集中在一个工作簿中</STRONG></SPAN> </LI></UL>
<P>在同一工作簿中不要试图处理所有需要实现的任务。当然，如果您的系统只需实现少有的几项功能，在一个工作簿中集中实现这几项功能是简单方便的。但是，如果需要实现多项任务，特别是需要处理大量数据的情形下，建议将任务进行整合分类，分别放在不同的工作簿中来实现这些任务。<BR>此时，需要规划好各工作簿要实现的功能任务，合理设计各个工作簿之间的关系，理顺各工作簿之间的数据调用，并且使用一个主工作簿来调用各个工作簿，这样使得系统非常灵活、精简，也不致于因使用而致使工作簿体积快速不断增大。<BR>要注意的是，对于存在数据调用的工作簿，一定要清楚调用的顺序，避免因为某一工作簿数据的更换而影响其他相关工作簿数据的准确性。例如，工作簿B需要调用工作簿A中的数据，如果工作簿A中的数据发生变化，那么要及时更新工作簿B中的数据。</P>
<UL>
<LI><SPAN style="COLOR: #0000ff"><STRONG>利用工作簿的自定义属性来确定工作簿</STRONG></SPAN> </LI></UL>
<DIV>为工作簿添加自定义文档属性（即CustomDocumentProperties<BR>属性），从而利用该属性来查找工作簿，或者判断是否为要查找的工作簿，或者能够合并同类工作簿。特别是在有大量名称会发生变化的工作簿时。<BR>单击菜单“文件”─—“属性”，选择“自定义”选项卡，在“名称”中输入相应的名称，在“取值”中输入“Yes”，然后单击“添加”按钮加入属性，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/71650592156.png" border=0></DIV>
<DIV>这样，在多个工作簿相互调用时，可以避免因工作簿名称改变而出现的无法找到工作簿的错误。</DIV>
<UL>
<LI><SPAN style="COLOR: #0000ff"><STRONG>避免无谓的循环</STRONG></SPAN> </LI></UL>
<P>记得及早、适时地退出循环，特别是在存在大量数据而不得不逐一进行循环时。例如，下面的代码，必须在工作表中的第3行至第31行、第2列至第32列依次循环，当满足特定条件后，使用Exit Sub语句退出，从而避免继续循环。如果在更大范围内循环时更应如此。<BR><SPAN style="FONT-FAMILY: Courier">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">For</SPAN> i = 3 <SPAN style="COLOR: #00007f">To</SPAN> 31<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘循环每一列</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">For</SPAN> j = 2 <SPAN style="COLOR: #00007f">To</SPAN> 32<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> Target.Value = “” <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> iTotalRow &gt; 1 <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">For</SPAN> k = 2 <SPAN style="COLOR: #00007f">To</SPAN> iTotalRow<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> Target.Row = Worksheets(”Data”).Range(”A” &amp; k) And Target.Column = Worksheets(”Data”).Range(”B” &amp; k) <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Worksheets(”Data”).Rows(k).EntireRow.Delete<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bDecide = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Exit</SPAN> <SPAN style="COLOR: #00007f">Sub</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Next</SPAN> k<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Next</SPAN> j<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Next</SPAN> i</SPAN></P>
<UL>
<LI><STRONG><SPAN style="COLOR: #0000ff">记得清除垃圾</SPAN></STRONG> </LI></UL>
<P>有时，需要在工作表中反复汇总或操作来自另一工作表或工作簿中的数据。记住，在将其他地方的数据复制到工作表中之前，记得清除以前的数据，避免产生重复数据或带来错误。</P>
<UL>
<LI><STRONG><SPAN style="COLOR: #0000ff">积累通用代码，方便调用，提高开发效率</SPAN></STRONG> </LI></UL>
<DIV>在我们编写程序的过程中，总有些代码适合于不同的程序开发。我们可以将这些程序代码做成通用程序，当需要时直接调用，从而节省时间，便于组织，提高了开发效率。这里，举几个例子。<BR><SPAN style="COLOR: #0000ff">（1）判断某文件是否存在<BR></SPAN><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #007f00">‘判断文件是否存在</SPAN><BR><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Function</SPAN> FileExists(fname) <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘如果存在则返回True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;FileExists = (Dir(fname) &lt;&gt; “”)<BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Function</SPAN></SPAN><BR><SPAN style="COLOR: #0000ff">（2）判断工作表是否存在<BR></SPAN><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #007f00">‘判断工作表是否存在</SPAN><BR><SPAN style="COLOR: #00007f">Private</SPAN> <SPAN style="COLOR: #00007f">Function</SPAN> SheetExists(sName) <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #007f00">‘如果当前工作簿中存在该工作表则返回True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> x <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Object</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">On</SPAN> <SPAN style="COLOR: #00007f">Error</SPAN> <SPAN style="COLOR: #00007f">Resume</SPAN> <SPAN style="COLOR: #00007f">Next</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> x = ActiveWorkbook.Sheets(sName)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> Err = 0 <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SheetExists = <SPAN style="COLOR: #00007f">True</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Else</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SheetExists = <SPAN style="COLOR: #00007f">False</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Function</SPAN><BR></SPAN><BR><SPAN style="COLOR: #0000ff">（3）返回满足查找条件的所有单元格组成的区域</SPAN><BR><SPAN style="FONT-FAMILY: Courier"><SPAN style="COLOR: #007f00">‘通用的查找函数</SPAN><BR><SPAN style="COLOR: #00007f">Function</SPAN> FindAll(SearchRange <SPAN style="COLOR: #00007f">As</SPAN> Range, FindWhat <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Variant</SPAN>, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Optional</SPAN> LookIn <SPAN style="COLOR: #00007f">As</SPAN> XlFindLookIn = xlValues, <SPAN style="COLOR: #00007f">Optional</SPAN> LookAt <SPAN style="COLOR: #00007f">As</SPAN> XlLookAt = xlWhole, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Optional</SPAN> SearchOrder <SPAN style="COLOR: #00007f">As</SPAN> XlSearchOrder = xlByRows, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Optional</SPAN> MatchCase <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">Boolean</SPAN> = <SPAN style="COLOR: #00007f">False</SPAN>) <SPAN style="COLOR: #00007f">As</SPAN> Range<BR><SPAN style="COLOR: #007f00">”””””””””””””””””””””””””””””””””””””””””””””</SPAN><BR><SPAN style="COLOR: #007f00">‘ 返回SearchRange区域中含有FindWhat所代表的值的所有单元格组成的Range对象</SPAN><BR><SPAN style="COLOR: #007f00">‘ 其参数与Find方法的参数相同</SPAN><BR><SPAN style="COLOR: #007f00">‘ 如果没有找到单元格,将返回Nothing.</SPAN><BR><SPAN style="COLOR: #007f00">”””””””””””””””””””””””””””””””””””””””””””””</SPAN><BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> FoundCell <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> FoundCells <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> LastCell <SPAN style="COLOR: #00007f">As</SPAN> Range<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Dim</SPAN> FirstAddr <SPAN style="COLOR: #00007f">As</SPAN> <SPAN style="COLOR: #00007f">String</SPAN><BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">With</SPAN> SearchRange<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> LastCell = .Cells(.Cells.Count)<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">With</SPAN><BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> FoundCell = SearchRange.Find(what:=FindWhat, after:=LastCell, _<BR>&nbsp;&nbsp;&nbsp;&nbsp;LookIn:=LookIn, LookAt:=LookAt, SearchOrder:=Search<SPAN style="COLOR: #00007f">Or</SPAN>der, MatchCase:=MatchCase)<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> <SPAN style="COLOR: #00007f">Not</SPAN> FoundCell <SPAN style="COLOR: #00007f">Is</SPAN> <SPAN style="COLOR: #00007f">Nothing</SPAN> <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> FoundCells = FoundCell<BR>&nbsp;&nbsp;&nbsp;&nbsp;FirstAddr = FoundCell.Address<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Do</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> FoundCells = Application.Union(FoundCells, FoundCell)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> FoundCell = SearchRange.FindNext(after:=FoundCell)<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Loop</SPAN> <SPAN style="COLOR: #00007f">Until</SPAN> (FoundCell <SPAN style="COLOR: #00007f">Is</SPAN> <SPAN style="COLOR: #00007f">Nothing</SPAN>) Or (FoundCell.Address = FirstAddr)<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">If</SPAN> FoundCells <SPAN style="COLOR: #00007f">Is</SPAN> <SPAN style="COLOR: #00007f">Nothing</SPAN> <SPAN style="COLOR: #00007f">Then</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> FindAll = <SPAN style="COLOR: #00007f">Nothing</SPAN><BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Else</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #00007f">Set</SPAN> FindAll = FoundCells<BR>&nbsp;&nbsp;<SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">If</SPAN><BR><SPAN style="COLOR: #00007f">End</SPAN> <SPAN style="COLOR: #00007f">Function</SPAN></SPAN><BR>大家在平时可以积累这些程序，既方便学习，又可以重用。</DIV>
<DIV>注:本文同时发表于<A href="http://www.excelperfect.com">完美Excel</A>.</DIV>]]></description>
</item><item>
<title><![CDATA[茉莉香自SunShine来（二）]]></title>
<link>http://blog.excelhome.net/user1/kevin/archives/2008/1042.html</link>
<author>Kevin</author>
<pubDate>2008-7-30 21:04:00</pubDate>
<description><![CDATA[<DIV>谢天谢地，我可怜的茉莉终于安然活下来了。</DIV>
<br/>
<DIV>LP说，茉莉是好，可是难道一年只开一次花吗？而且花期还这么短。如果养一年才开几天花，真是……</DIV>
<br/>
<DIV>我不记得以前家里的茉莉一年开几次花，赶紧GG一下，查得一年应该开花两到三次：第一次开花在小满到夏至，第二次开花在小暑到处暑，第三次开花在白露到秋分。那么，就等着它再度开花吧，可是，曾经开过花的花托基本都枯死了，从哪里再开出新花来呢？</DIV>
<br/>
<DIV>本来打算慢慢等，但不久前去Amily家玩过一次后，让我改变了想法。她家的茉莉在阳台上迎风摇曳，枝头分明已经长着一颗颗饱满的花蕾。没道理呀，同一家店买的花，相同品种，只隔着一个小区，咋差距就这么大咧！</DIV>
<br/>
<DIV>肯定是我的养护还有问题。</DIV>
<br/>
<DIV>继续GG（呵呵，这年头要是没了GG该怎么办？），这次是认真的阅读每篇茉莉养护文章的每句话，而不是以前泛泛的浏览，然后对比自己的情况，希望找到问题的根源。</DIV>
<br/>
<DIV>我想我找到了，两个大问题：</DIV>
<DIV>1、茉莉是喜欢超阳光的，应该尽可能让它多晒太阳，但不能在正午阳光下暴晒。俗话说“晒不死的茉莉，阴不死的珠兰”，可是我现在的阳台，因为朝向的关系，放花的位置不太容易晒到太阳。茉莉天天和我的吊兰呆在一起，能长得好吗？</DIV>
<br/>
<DIV>2、施肥太少。虽然我每天定时定量浇水，可是光有水没有肥，这花很容易就营养不良啊。瞧我这主人当的，只顾自己吃肉，却以为别人是食素的，咳咳。</DIV>
<br/>
<DIV>找到原因，就好解决了。</DIV>
<br/>
<DIV>第一，每天清晨起床后，用淘米水浇花，然后把茉莉移到厨房的窗台上享受和煦的阳光；8点钟左右再移到阳光东侧的纸箱上面享受阳光；10点钟左右移到阳光南侧近阳光的地方。</DIV>
<br/>
<DIV>第二，经常往叶面上喷水，保持相对湿度。</DIV>
<br/>
<DIV>第三，十天左右施一次花肥。淘宝买的，5元一小袋。施肥的时候也不能偷懒，要先把表面的土翻动，弄松，撒下去后和土进行掺和，以利于吸收。</DIV>
<br/>
<DIV>于是，每天都多了一个让我早起的动力，因为清晨的阳光热度适中，而且这时候喝水也会让它很舒服。把花在家里移来移去，费不了什么力气，但让我多了到处走动的动因，减少一直在电脑前呆坐的可能。</DIV>
<br/>
<DIV>功夫不负有心人，三天以后，我的茉莉就有了明显不同，叶片比以前更厚更绿，也更有生气。一周以后，已经可以看到每个枝头都有新芽了。可惜都是侧生的，因为原来的位置被上期花的残留花茎占了。</DIV>
<br/>
<DIV>到现在，一株茉莉已经长到有原来两株那么茂盛，而且开始陆续开花了。花朵明显比上次更饱满，更香气四溢。</DIV>
<br/>
<DIV>上PP:</DIV>
<br/>
<br/>
<br/>
<br/>
<DIV><IMG src="http://blog.excelhome.net/UploadFiles/2008-7/77641.7598226.jpg"></DIV>
<br/>
<br/>
<DIV>再来张特写，是不是看着就很香？<BR></DIV>
<br/>
<DIV><IMG src="http://blog.excelhome.net/UploadFiles/2008-7/77761.78413848.jpg"></DIV>
<br/>
<br/>
<DIV>最后来张全家福，噢不，还有一位在镜头上方挂着，没拍下来，呵呵。<BR>&nbsp;</DIV>
<DIV><IMG src="http://blog.excelhome.net/UploadFiles/2008-7/77829.41676930.jpg"><BR></DIV>
<DIV><STRONG>小结：</STRONG></DIV>
<DIV><STRONG>1、做任何事情应该因势利导，才能充分发挥对方的潜力。当然，首先得花时间了解对方的势，了解前因后果，如果一窍不通，就不存在导了，失败是完全正常的，成功是捡了狗屎运。</STRONG></DIV>
<DIV><STRONG>2、要多走出去看看，坐井观天的结果只能是自己永远不知道自己的不足。</STRONG></DIV>]]></description>
</item><item>
<title><![CDATA[茉莉香自SunShine来（一）]]></title>
<link>http://blog.excelhome.net/user1/kevin/archives/2008/1041.html</link>
<author>Kevin</author>
<pubDate>2008-7-30 19:55:00</pubDate>
<description><![CDATA[<DIV>自小就很喜欢闻茉莉花香。</DIV>
<DIV>小时候，家里在阳台上就养了茉莉，每每在夏夜乘凉之时，会随着微风闻到一阵阵淡淡的清香，泌人心脾，顿时觉得整个人也清凉了起来。</DIV>
<DIV>某个冬天，第一次从父亲的茶叶罐中，再度闻到夹杂在茶香中的茉莉花香，才知道原来此物还是可食的。泡上一杯，花香更甚，仿佛又把人带到了盛夏。</DIV><BR>
<DIV>儿时忙于学业，毕业后四处转战，一直没有养过花。如今算是在此地暂时停下了脚步，有安顿之意了，于是也想实现一个夙愿——亲自与花交个朋友。</DIV><BR>
<DIV>母亲是爱花之人，因此家里的花是从来不少的，只是每每为了来看我，担心无人照顾，送掉了不少。以前在家时，极少帮她打理这些花，但是喜欢看，呵呵。想来自己应该也是爱花之人，只是比较懒。</DIV><BR>
<DIV>现在的这盆茉莉是和Amily一起从花鸟市场买来的，除了它，还买了一盆金边吊兰。</DIV><BR>
<DIV>第一次养花，有点兴奋，甚至有点紧张，非常担心因为自己的问题让这些美丽的生命过早凋谢。卖花的人说，茉莉是非常容易伺弄的，完全不必担心，是吗？反正我不是特别有信心。通过GG学习了半小时，对它们的生活习性有了简单的了解，照着资料上讲的，确实不需要花特别的心思，就能够养好它们了。</DIV><BR>
<DIV>买来后不久就进入了它的花期，白色小花一朵接一朵竞相绽放，真的让人很开心。茉莉花是很不结实的，风大一些，就会把它们吹落。不过，也不用等它们被吹落，就会被等不及的我，摘了放在书桌上和床头，以便于更长时间满足我的鼻子，呵呵。</DIV><BR>
<DIV>Amily家有自己的空中花园，养了不少花，想来她比我更有经验。她告诉我说，直接买来的花，因为养在营养土里面，而这种土很难保留水份，所以浇花浇透后，渗出来的水到托盘后，最好不要倒掉，这样才可以帮助这些土继续吸水。</DIV>
<DIV>这道理很容易懂，乍一听还特别有道理，于是我就马上应用到实践中去了。</DIV><BR>
<DIV>悲剧很快上演了，第三天，就有一枝的叶片开始枯黄，第五天，这一枝就彻底死掉了。更可怕的是，这像疾病一样的事物仍然在蔓延。于是赶紧打电话向老妈求救，终于弄清楚，这不是什么病，而是因为这个花盆比较小，茉莉的根已经长到盆的最低部，而我故意留在托盘中的水，可以直接浸泡到根。茉莉花是经不起这样泡根的，所以……</DIV><BR>
<DIV>虽然再也不犯类似的错误，但并不能阻止可怕的事情继续发生。照老妈说的，一盆花会有好几株，每株有自己的根，根死了，这一株就都活不成了。只能祈求其它的株没有受到水泡的摧残吧。</DIV><BR>
<DIV>不久，一盆花枯得只剩下一半了，另一半也没什么精神。一旁的吊兰倒是长势喜人。下狠心，把花盆里面的土松开，彻底检查一下，终于弄清楚我盆里的茉莉一共两株，估计一株已经不行了，那么就及早处理掉吧，免得影响另外一株的生长。于是我挖掉了坏掉的这株的所有根系和枝干，重新加了些新土到花盆里，默默祈祷剩下的这株可以更好的生长。</DIV><BR>
<DIV><STRONG>小结：这似乎有点像小马过河的故事。任何理论都不应该简单地拿来主义，因为具体情况之间有着千差万别，如果不懂得原理，只会照搬，就很可能会栽跟头。Amily家的茉莉养在一个大盆里，有我这个2倍大小，所以即使在托盘中盛水，也是不可能泡到根的。无论她那个理论正确与否，对她家的茉莉都起码不会有坏的影响。我只知其一， 不知其二，遭殃的是我的花……</STRONG></DIV>]]></description>
</item><item>
<title><![CDATA[在Excel中创建动态列表]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1040.html</link>
<author>fanjy</author>
<pubDate>2008-7-29 21:02:00</pubDate>
<description><![CDATA[<DIV>在Excel中，我们可以使用“数据有效性”功能来创建下拉列表，供用户从中选择。例如，如下图所示：</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/75907.61636362.png" border=0></DIV>
<DIV>①选择主数据工作表中的B列。<BR>②调出“数据有效性”对话框，选择“允许”下拉列表框中的“序列”。<BR>③在“来源”中输入要提供用户选择的文本，例如：请假,出差,年休。<BR>④单击“确定”后，在主数据工作表的B列中任一单元格单击，出现带有数据的可供选择的列表，如下图。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/75955.48132172.png" border=0></DIV>
<DIV>当然，也可以将需要提供的数据放置在工作表中的某单元格区域内，然后在“来源”中输入该单元格区域地址。<BR>上述方法对于固定的或者说事先知道在列表中提供的数据时，非常合适。然而，如果下拉列表中的数据需要不断增加，或者需要调整，仍然按照上述方法的话，则需要重复上述步骤。<BR>下面提供一种方法，能够动态改变列表中的数据，而无需每次调出“数据有效性”对话框。先看看下图：</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/75991.42350388.png" border=0></DIV>
<DIV>①在基础数据工作表中，在列A单元格中依次输入想要显示在下拉列表中的数据，如“请假”、“出差”、“换休”。<BR>注：将这些数据输入在单独的工作表中，能够避免在主工作表中操作时无意中修改这些数据。<BR>②调出“新建名称”对话框，在“名称”中输入“List”。<BR>③在“范围”列表中选择“工作簿”。<BR>④在“备注”中输入一些说明文字。<BR>⑤在“引用位置”输入公式“=OFFSET(基础数据!$A$1,0,0,COUNTA(基础数据!$A:$A),1)”。<BR>现在，回到主数据工作表，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/76027.58144010.png" border=0></DIV>
<DIV>①选择列C。<BR>②调出“数据有效性”对话框，选择“允许”下拉框中的“序列”。<BR>③在“来源”中输入公式“=List”，即与前面定义的名称连接。<BR>此时，单击列C中的任一单元格，将出现下拉列表框，包括在基础数据工作表中列A的数据，如下图所示。</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/76074.13423695.png" border=0></DIV>
<DIV>现在，您在基础数据表中添加数据，如加班，此时在主数据工作表的列C中单元格的下拉列表中会自动出现添加的“加班”项，如下图所示。</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/76114.22184467.png" border=0></DIV>
<DIV><STRONG>本文同时发表于<A href="http://www.excelperfect.com">完美Excel</A>.</STRONG></DIV>]]></description>
</item><item>
<title><![CDATA[再次重温<亮剑精神>]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1039.html</link>
<author>fanjy</author>
<pubDate>2008-7-28 21:02:00</pubDate>
<description><![CDATA[<DIV>这个星期在参加管理培训，重温了一下&lt;亮剑精神&gt;，贴出来，让大家也重温一下。</DIV>
<OBJECT height=300 width=400><PARAM NAME="movie" VALUE="http://www.tudou.com/v/Gp9I20vt8S8"><PARAM NAME="allowScriptAccess" VALUE="always"><PARAM NAME="wmode" VALUE="transparent">
<embed src="http://www.tudou.com/v/Gp9I20vt8S8" type="http://blog.excelhome.net/application/x-shockwave-flash" width="400" height="300" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></OBJECT>]]></description>
</item><item>
<title><![CDATA[办公室定律]]></title>
<link>http://blog.excelhome.net/user1/gvntw/archives/2008/1036.html</link>
<author>gvntw</author>
<pubDate>2008-7-27 14:32:00</pubDate>
<description><![CDATA[<SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="FONT-FAMILY: Times New Roman; mso-list: Ignore"><SPAN style="FONT-SIZE: 12pt">
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">一、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">矛盾定律：人人都明白一朝天子一朝臣，因此跟领导走得太近了不行，离得太远也不行。跟得太近了怕站错了队，一旦大树倒掉了，大难就会临头；离得太远了，好处永远轮不到，坏事少不了。左也不是，右也不是，此及机关人员挥之不去的烦恼。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">二、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">尴尬定律：苦干的不如巧干的，还有所谓干的不如看的，看的不如捣蛋的。因而上去的不一定是能力强的，原地踏步的不一定是低能的。对此，你不服不行。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">三、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变脸定律：见到上司唯唯诺诺，这是逼出来的；见到同级嘻嘻哈哈，这是装出来的；见到群众凶凶巴巴，这是情感的自然流露。学会随机应变，因人而异，看风使舵，是机关的立身之本、生存之道。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">四、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">活跃定律：领导在办公室的时候，气氛永远是“团结、紧张、严肃”不“活泼”；而领导不在的时候，气氛会变得异常活跃，可以海阔天空，说说笑笑、吹吹牛皮、聊聊足球、侃侃新闻、议议女人……无所不及。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">五、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不公定律：能干的总有干不完的活，不能干的总是没有活干。干得多的人犯错误的几率就高，到头来往往吃力不讨好。少干或不干的人，往往不犯或少犯错误，给领导的印象却是个好同志。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">六、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加班定律：“月亮走我也走”，领导到了下班时间不走，下属就不能理直气壮地走。加班等于敬业，至于效率可以不闻不问。而领导不在的时候，加班等于白加。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">七、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新官定律：新上任的领导不管见到谁都是笑容可掬，亲切有加。如果你认为新来的头儿平易近人，联系群众，没有架子，那就大错特错了。</SPAN><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">天过后，大都原形毕露，眼睛朝上，目无群众，再也找不到上任伊始的影子，倒是官腔十足，架子不小。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">八、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">趋同定律：领导的爱好，往往会成为办公室成员的共同爱好，即爱好者领导的爱好，幸福着领导的幸福，快乐着领导的快乐。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">九、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">转移定律：领导的领导批了领导，作为被领导的你就得小心领导拿你当做“出气筒”。你要觉得窝火，可以再找被你领导的人发一通脾气，指责他“怎么搞的！”如果没有，那就打落门牙往肚子里咽。有经验的老婆、孩子发现其脸上阴到多云，一般都会知趣地走开。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">十、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关系定律：有本事没关系的吃苦饭，没本事有关系的跟着吃，有本事又有关系的不愁吃，没本事又没关系的看别人吃。问题在于自认为有本事的人未必能得到领导的认可，因此，有本事和没本事的，都要拼命地找关系，有了关系的则不惜绞尽脑汁巩固好关系。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">十一、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">竞争定律：能写的往往不如能跑的，能干的往往不如能吹的，能说的往往不如会送的。忠实本分的不如善长张扬的，遵守制度的不如听话的，坚持原则的不如会变通的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">十二、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">忌讳定律：在办公室通常听不到牢骚怪话，比如摄氏上登出某地又揪出了一个贪官，你只能选择腹讲，恨在心里。如大放厥词、口无遮拦地进行猛烈抨击，有人会认为你是在含沙射影、指桑骂槐。曲高和寡。你在表明自己爱和恨的同时，实际上是在孤立自己，很有可能成为他人尤其是领导设防的对象。要议论就议论美国的克林顿、伊拉克的萨达姆。所以经过办公室的历练后，人人都会把握住“说古不说今，说外不说中，说远不说近”原则的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 7.8pt 0cm; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"><SPAN lang=EN-US style="mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">十三、<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">归因定律：凡是职务上不去的，众口一词就是不会拉关系，朝中无人没后台，没有人认为自己的能力素质不够。这是最体面的理由。但在领导面前却从来不会说自己是怀才不遇。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 22.7pt; mso-list: l0 level1 lfo1"></SPAN></SPAN></SPAN></P>]]></description>
</item><item>
<title><![CDATA[《循序渐进学Excel》系列视频课程免费下载！]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1035.html</link>
<author>gvntw</author>
<pubDate>2008-7-27 11:54:00</pubDate>
<description><![CDATA[<DIV><A href="http://club.excelhome.net/display.asp?UID=30306&amp;TID=1">Excel初学者有福啦，Excel Home出品的《循序渐进学Excel》系列视频课程免费下载！</A></DIV>
<DIV>《Excel高效办公》系列图书是Excel Home多位专家全力打造的Excel与职场应用相结合的学习教材，在该系列图书中，除了配备有管理专家与Excel高手奉献的多部《职场对话》视频节目（<B><A href="http://dl2.excelhome.net/ec01/Excelhomezc080516.torrent" target=_blank>点击下载</A></B>）以外，还收录了由Excel Home站长、资深微软全球最有价值专家Kevin亲自主讲的一套Excel学习教程——《循序渐进学Excel》。</DIV>
<P><A href="http://club.excelhome.net/display.asp?UID=30306&amp;TID=1">《循序渐进学Excel》系列视频教程</A>共分6集，约6小时，系统地介绍了Excel各方面功能的基础知识，还专门分享了许多Excel高手的学习经验，是广大Excel初级用户不可多得的理想学习资料。</P>
<P>为了感谢EH众多会员长期以来对网站的支持与帮助，此套视频教程将从即日起与大家免费分享，您可以下载或者在线观看，当然，因为文件大小与网络带宽的问题，从《Excel高效办公》系列图书的配套光盘上可以得到最清晰的版本。</P>]]></description>
</item><item>
<title><![CDATA[Excel工作表界面设计]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1034.html</link>
<author>fanjy</author>
<pubDate>2008-7-26 0:14:00</pubDate>
<description><![CDATA[<DIV>最近，使用Excel VBA开发了一套工作管理系统，效果不错，极大地简化了工作，提高了工作效率。当然，还不是太完善，需要在使用过程中进一步优化。下图是这套系统的界面设计：</DIV>
<DIV><A href="http://www.excelperfect.com"><IMG alt="http://blog.excelhome.net/" src="http://blog.excelhome.net/UploadFiles/2008-7/988.648284415.png" border=0></A></DIV>
<DIV>在Excel工作表中使用图片，不仅用于导航，而且也能创造出良好的视觉效果。<BR>当然，在开发过程中，有许多心得体会，以后再和大家慢慢分享。</DIV>]]></description>
</item><item>
<title><![CDATA[Excel条件格式的简单应用]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1033.html</link>
<author>fanjy</author>
<pubDate>2008-7-24 19:09:00</pubDate>
<description><![CDATA[<DIV>Excel条件格式功能是一项十分强大且便利的功能。下面介绍自已在使用Excel过程中，利用条件格式功能的其中一个应用场景。<BR>在一个工作表中，有许多条记录，如何使Excel自动标识出满足特定条件的记录呢？<BR>例如：下图所示的工作表中有多条记录，要求当字段“是否完成”列中为“否”时，突出标识该行（本例中将该行突出显示为红色），使用户清楚没有完成的工作；当为“是”时，突出标识的背景色自动消失。</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/69064.55860676.png" border=0></DIV>
<DIV>现在开始实现这样的效果，先看看下图：<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/69099.05949404.png" border=0></DIV>
<DIV>①选择工作表的A列至E列。<BR>②单击菜单“格式”——“条件格式”。<BR>③在“条件格式”对话框中，选择“条件1”下拉框中的“公式”项。<BR>④在“公式”框右侧的文本框中输入公式“=$E1=”是””。<BR>⑤单击下方的“格式”按钮，在“单元格格式”对话框的“图案”选项卡中，选择颜色，这里是红色。<BR>⑥单击“确定”按钮，关闭“条件格式”对话框。此时的效果如下图：<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-7/69136.35988145.png" border=0></DIV>
<DIV>此时，当将E列中单元格的数据改为“是”时，该行的红色底纹会自动消失；如果为“否”，则该行会自动加上红色底纹。</DIV>]]></description>
</item><item>
<title><![CDATA[良好的学习习惯]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1032.html</link>
<author>fanjy</author>
<pubDate>2008-7-21 23:24:00</pubDate>
<description><![CDATA[<DIV><EM>摘自CSDN博客，留于此，供参考。</EM></DIV>
<DIV><STRONG>&nbsp;一直以来伴随我的一些学习习惯</STRONG></DIV>
<P><SPAN style="FONT-SIZE: 12pt">1. Google&amp;Wiki（遇到问题做的第一件事情，也是学习某个东西做功课（homework）最先用到的东西。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">2. 看书挑剔，</SPAN><A href="http://www.douban.com/doulist/46003/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">只看经典</SPAN></A><SPAN style="FONT-SIZE: 12pt">。如何选择经典，可以到网上做做功课，看看评价，综合分析一下。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">3. 做读书笔记。一是将自己阅读的时候的思考（包括闪念）总结下来，二是将书中的好例子摘抄下来。（这个习惯是一年前才养成的，发现受益极大。）有了google note，笔记可以加上tag，非常便于回顾，加深理解。我觉得，人与人学习的差距不在资质上，而在花在思考的时间和思考的深度上（后两者常常也是相关的）。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">4. 提到思考，我有一个小习惯。利用走路和吃饭的时候思考，还有睡觉前必然要弄一个问题放在脑子里面，在思考中迷糊入睡。发现这样一来往往在不知不觉中多出来大量的思考时间。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">4a. 将思考成为习惯还有一个很大的好处——避免焦虑。卡耐基用</SPAN><A href="http://www.douban.com/subject/2281382/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">一整本书</SPAN></A><SPAN style="FONT-SIZE: 12pt">讲了一个有效的做法来避免焦虑——底线思考。然而实际上还有另一个有效的做法，就是投入地做另一件事情。不去想"喜马拉雅山上的猴子"的方法并不是使劲的告诉自己不去想"喜马拉雅山上的猴子"，因为那样等于就是脑袋里想了那只猴子，正确的做法是真的不去想那猴子，而是想别的。用别的东西充满工作记忆，其他的神经活动自然会被抑制（神经科学基本事实）。所以，感到焦虑的时候不妨思考吧，甚至完全可以去理性分析和思考导致焦虑的问题本身，将其拆解，分析来源，在不知不觉中，大脑的工作重心就从情绪模块转向了推理模块了，而且这思考也可能顺带更有效地解决了导致焦虑的问题呢:)</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">5. 重要的事情优先（详见史蒂芬·柯维的</SPAN><A href="http://www.douban.com/subject/1048007/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">《高效能人士的七个习惯》</SPAN></A><SPAN style="FONT-SIZE: 12pt">或</SPAN><A href="http://www.douban.com/subject/1028372/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">《要事优先》</SPAN></A><SPAN style="FONT-SIZE: 12pt">）。尽量避免琐事骚扰，不重要的事情能不做就不做。有时候，紧急的事情往往只是当事人觉得必须马上做完才显得紧急或者干脆就是紧他人之急，最糟糕的就是纯属性格上原因觉得每件事情都得第一时间完成，很多看上去紧急的事情实际上并不是真的"不能再拖了"，有的干脆就并不需要或值得去做。有很多事情都是可以先放一放甚至完全let go的，否则的话就整天被所谓"紧急"的事情牵着鼻子走了。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">6. 重要的事情营造比较大的时间块来完成。比如一本好书，或者一个重要的知识点，最好不要切得太琐碎了看，否则看了后面忘了前面。不利于知识的组织&amp;联系。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">7. 多看</SPAN><A href="http://www.douban.com/doulist/46003/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">心理学</SPAN></A><SPAN style="FONT-SIZE: 12pt">与</SPAN><A href="http://www.douban.com/doulist/127649/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">思维</SPAN></A><SPAN style="FONT-SIZE: 12pt">的书，因为它们是跨学科的。知识分两种，一是我们通常所谓的知识，即领域知识。二是关于我们的大脑吸收知识的机制的知识，后者不妨称为元知识。虽说这也是领域知识，但跟其它的领域知识不同的是，它指导着我们学习其它所有的领域知识。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">8. 学习一项知识，必须问自己三个重要问题：1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">9. 获得的多少并不取决于读了多少，而取决于思考了多少、多深。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">10. 善于利用小块时间，也就是《奇特的一生》中所说的“时间下脚料”，如何利用前面有几个方法。同时，也善于创造整块时间（如通过要事优先）。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">11. 关于习惯的养成，必须要说明的：经常看到有些人评论说，说说容易，做起来哪有那么容易啊（另一个无关习惯的“说起来容易做起来难”则是因为纸上谈兵不可能算计到所有现实中的因素，但那是另一个问题）。对此我要说的是，做起来当然不容易，所谓江山易改，本性难移。人的性格和认识事物的框架是长期积累养成的，并且人们非常珍视自己的信念（英语里面表达不相信某个东西叫做“I don't buy it”）。从进化心理学上这是有依据的，一个经过时间检验的信念往往是更靠谱的。只不过可惜的是靠谱不代表最佳，一个信念能让你活下来并不代表能让你活得最好（详见</SPAN><A href="http://www.douban.com/subject/1128662/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">《Mene Genes》</SPAN></A><SPAN style="FONT-SIZE: 12pt">，更多的例子参见</SPAN><A href="http://www.douban.com/subject/2383735/" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">《How we know what isn't so》</SPAN></A><SPAN style="FONT-SIZE: 12pt">）。我们评判一个信念的标准是</SPAN><A href="http://en.wikipedia.org/wiki/Satisficing" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">satisficing</SPAN></A><SPAN style="FONT-SIZE: 12pt">原则（即足够，能行就好，这个术语不是我提的，是大牛</SPAN><A href="http://en.wikipedia.org/wiki/Herbert_A._Simon" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">Herbert Simon</SPAN></A><SPAN style="FONT-SIZE: 12pt">提的），并不是optimizing原则。话说回来，为什么说起来容易做起来难，是因为“说”只是理性上承认正确，并没有考虑到我们每个人大脑中居住的那个非理性自我。这个<A href="http://www.douban.com/subject/1193622/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">自我</SPAN></A>以强大的情绪力量为动机，以习惯为己任，每时每刻都<A href="http://www.douban.com/subject/2990015/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">驱使着</SPAN></A>我们的行为。因为它掌握了“情绪”这个武器，所以我们只能时时拿它当大爷。不记得是哪位哲学家说的了，理性是感性的奴隶。那么，是不是就是说无法克服既有习惯了？以我的经验（以及观察到的别人的经验），还是可以的。第一条就是认识到习惯的改变绝不是一天两天的事情，承认它的难度。第二条就是如果你真想改掉习惯，就需要在过程中常常注意观察自己的行为，否则习惯会以一种你根本觉察不到的方式左右你的行为让你功亏一篑。有一个认知技巧也许可以缓解更改习惯过程中的不适：即把居住在内心的那个非理性自我当成你自己的孩子（你要去培养他），或者你的对手（你要去打败他）也行。总之不能当成自己，因为每个人都不想改变自己。这里转一个认知技巧的例子：李笑来老师在</SPAN><A href="http://www.xiaolai.net/?p=484" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">《把时间当作朋友》</SPAN></A><SPAN style="FONT-SIZE: 12pt">（顺便也推荐这本开放电子书）中</SPAN><A href="http://www.xiaolai.net/?p=463" target=_blank><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966">提到</SPAN></A><SPAN style="FONT-SIZE: 12pt">他一个朋友用另一个认知技巧来克服背单词的枯燥的：</SPAN></P>
<BLOCKQUOTE>
<P><SPAN style="FONT-SIZE: 12pt">因为，一共要搞定20,000个单词，而因此可能获得的奖学金是每年40,000美元左右——并且连续四年没有失业可能（后来的事实是，他直到五年之后才获得了博士学位）。当时的美元兑换人民币的汇率差不多是8:1，所以，大约应该相当于320,000元人民币。而如果一年的税后收入是320,000元人民币的话，那么税前就要赚取差不多400,000元人民币。那么，每个单词应该大约值20元人民币——这还只不过是这算了一年的收入而已。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">所以，他终于明白背单词是非常快乐的。他每天都强迫自己背下200个单词。而到了晚上验收效果的时候，每在确定记住了的单词前面画上一个勾的时候，他就要想象一下刚刚数过一张20元人民币的钞票。每天睡觉的时候总感觉心满意足，因为今天又赚了4000块！</SPAN></P></BLOCKQUOTE>
<P><SPAN style="FONT-SIZE: 12pt">注意，这跟自我欺骗不同。一来，我们的情绪系统只能这般对付（<A href="http://www.douban.com/subject/2345245/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">《Synaptic Self》</SPAN></A>中提到，大脑中的新皮层（neocortex，所谓“理性”居住的地方，尤其是前额叶）在进化历史上是较为新近的年代才进化出来的，跟底层较原始的模块（如主管情绪的杏仁核）之间的神经网络沟通并不是合作无间，这就解释了为什么有些事情我们明明知道是对的，但就是不能说服自己，情绪还是在那里不依不挠的驱使你去做另一样事情）。二来，我们知道在干什么，所以不能算欺骗:P 总之，对于习惯的更改，除了最重要的一日三省，加上一些认知技巧（其实每个人都是自己的心理学家，你可以自己看看能不能想出什么法子）。其实是没有什么速效银弹的。但是，知难而不退嘛，值得做的事情几乎总是如此:)</SPAN></P>
<DIV><SPAN style="FONT-SIZE: 12pt">我也不知道这会有几个parts，总结到哪是哪吧:)</SPAN></DIV>
<br/>
<DIV>
<P><SPAN style="FONT-SIZE: 12pt">接着<A href="http://blog.csdn.net/pongba/archive/2008/07/08/2625115.aspx" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">上次</SPAN></A>的写。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">1. <STRONG>学习和思考的过程中常问自己的几个问题</STRONG>：</SPAN></P>
<OL>
<LI><SPAN style="FONT-SIZE: 12pt">你的问题到底是什么？（提醒自己思考不要偏离问题。）</SPAN> 
<LI><SPAN style="FONT-SIZE: 12pt">OK，到现在为止，我到底有了什么收获呢？（提醒自己时不时去总结，整理学习的东西）。</SPAN> 
<LI><SPAN style="FONT-SIZE: 12pt">设想自己正在将东西讲给别人听（有声思考；能否讲出来是判断是否真正理解的最佳办法）。<BR>3.1 设想需要讲给一个不懂的人听。（迫使自己去挖掘知识背后最本质、往往也是最简单的解释）。</SPAN> 
<LI><SPAN style="FONT-SIZE: 12pt">时常反省和注意自己的思维过程。尤其是当遇到无法理解或解决的问题之后，最需要将原先的思维过程回顾一遍，看看到底哪个环节被阻塞住了妨碍了理解。问题到底出在哪里。并分析以后需要加强哪方面的思维习惯，才能够不在同样或类似的时候被绊住。对此，将思维的大致脉络写下来是一个很好的习惯。</SPAN> 
<LI><SPAN style="FONT-SIZE: 12pt">养成反驳自己的想法的习惯：在有一个想法的时候，习惯性地去反驳它，问自己“这个难道就一定成立吗？”、“有没有反例或例外？”、“果真如此吗？”之类的问题。（参见<A href="http://en.wikipedia.org/wiki/Critical_Thinking" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">Critical Thinking</SPAN></A>）</SPAN>&nbsp; 
<LI><SPAN style="FONT-SIZE: 12pt">人的思维天生就是极易流于表面来理解事物的（参见<A href="http://www.douban.com/subject/2845839/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">《Psychology of Problem Solving》</SPAN></A>第11章）。觉得自己理解了一个问题了么？条件反射性地问自己：你真的理解了吗？你真的理解了问题的本质了？问题的本质到底是什么？目前我的理解是什么？我对这个理解感到满意吗？这样的理解到底有什么建设性呢？等等。</SPAN></LI></OL>
<P><SPAN style="FONT-SIZE: 12pt">2. <STRONG>重视知识的本质</STRONG>：对于程序员来说这一点尤其重要，程序员行业的知识芜杂海量，而且总是在增长变化。很多人感叹跟不上新技术。应对这个问题的办法只能是：抓住不变量。大量的新技术其实只是一层皮，背后的支撑技术其实都是十来年不变的东西。底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。</SPAN> 
<P><SPAN style="FONT-SIZE: 12pt">3. <STRONG>重视积累的强大力量，</STRONG></SPAN><A href="http://www.xiaolai.net/?p=458"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 12pt; COLOR: #669966"><STRONG>万事提前准备</STRONG></SPAN></A><SPAN style="FONT-SIZE: 12pt">：计划订长一点，自然就可以多获得准备的时间。设想你若干年后会在做什么事情，需要哪些技能，现在就开始准备。一个5年计划便可以让你获得从现在开始的5年准备时间。5年中每天腾出半个到一个小时专心于某一件事情，认准一个方向，每次走一点，其实不要说5年，两年就会发现会起到宏大的效应。长期订阅我的Blog的朋友们也一定注意到我基本上不写东西，一般一个月写上2篇就算多的了。但总结一段时间的学习和思考的习惯却一直都没有停止（博客文章对我来说是学习和思考的副产品，我并不为写文章而写文章），所以5年下来竟也写了不少东西。所以这就是一个简单的例子。你大致还可以从我的Blog看出来我一段时间关注的东西，一般来说，一段比较长的时间（少则半年至一年——譬如对心理学与思维的关注；多则几年——譬如对编程技术的关注），在这段时间内，我的业余时间会被一个主题所充斥。反之，如果不知道目的是什么，就不知道往哪个方向上使劲，就容易产生无用功。</SPAN> 
<P><SPAN style="FONT-SIZE: 12pt">4. <STRONG>抬起头来</STRONG>：人的思维是非常容易只见树木不见森林的（否则这个成语从哪来的呢？）。时不时抬起头来审视一下自己正在做的事情，问一问它（对现在或未来）有什么价值，是不是你真正希望做的。你学到的东西到底是什么？它们重要吗？你需要在这个时候学习这些吗？（见第2条）。你的时间就是你的资源，你投入这些资源来掌握知识，所以到底用来掌握哪些知识是一个很重要的问题。仅仅遵循兴趣是不够的，<A href="http://blog.csdn.net/pongba/archive/2008/03/03/2143245.aspx" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">人会对很多次要的东西产生兴趣</SPAN></A>，并一头钻进去浪费好多时间。所以<STRONG>判断</STRONG>一个东西值不值得学习是很重要的。</SPAN> 
<P><SPAN style="FONT-SIZE: 14pt"><STRONG>杂项</STRONG></SPAN> 
<P><SPAN style="FONT-SIZE: 12pt">1.&nbsp;<STRONG>退订RSS</STRONG>：RSS Reader是个时间黑洞。就算mark all as read，在有大量feed的情况下，也会无形中消耗掉大量的时间。<STRONG>我们一旦订阅了某个RSS之后就会倾向于不肯退订它</STRONG>，心想也许某天有个重要的信息会从那里得到。这其实是源于人不肯"关上一扇门（即便门内的收益概率极小）"的心理（参见<A href="http://www.douban.com/subject/2990015/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">《Predictably Irrational》</SPAN></A>）；而实际上，关上一扇门，有时能够增大收益期望。仔细观察一下reader里面的feeds，有哪些是真正有价值的，把那些没价值的或者价值很小乃至于不值得每天被它骚扰的，全都退订掉。不要舍不得，那些一个星期都没出现让你眼睛一亮的内容的feed，很大的可能是永远也不会出现。就算可能，也别担心你会漏掉什么宝贵信息，<STRONG>真正宝贵的信息，在其他来源你也会接触到的</STRONG>。一开始我的Greader里面每天都有大量的新内容，每天都是1000+，但一段时间之后发现除了信息焦虑，实际上有价值的内容不多，现在，我很高兴地发现自己摆脱了这种状况，我持续不断地退订feeds，留下的内容越来越少，也越来越精，带来的阅读焦虑也越来越少。（顺便推荐一个东西，<A href="http://www.aiderss.com/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">aideRSS</SPAN></A>，初步使用，感觉对订阅reddit这样的每天更新大量内容的feed很有用）。</SPAN> 
<P><SPAN style="FONT-SIZE: 12pt">2.&nbsp;<STRONG>有时间吗？总结总结最近得到的新知识吧。</STRONG>一般来说，我在一段时间内学习的一些东西总是会在这段时间内一直在脑子里打转，一有时间空隙（譬如走路，吃饭）它们就会自己蹦出来，促使我去进一步思考和总结。永远不要认为对一个知识的把握足够深刻，“理解”的感觉很多时候只是假象。学会反问自己对知识到底把握了多少，是很有价值的。（如何反问，前面的总结中有提到）。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">3. <STRONG>有时间吗？看本书吧。</STRONG>（传统的）阅读和思考永远优于所谓的在互联网上汲取新知识，后者往往浅表、不系统、乃至根本没价值。</SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt">4.&nbsp;<STRONG>制定简要的阅读计划</STRONG>：选出最近认为对你最有价值的书，先总览一下，决定阅读的顺序（哪些章节可以优先阅读）。然后每天看一点。并利用走路、吃饭、乘车或其他不适合带着书和笔的时间来总结看过的内容，建立知识结构，抽取知识本质，与以往的大脑中的知识建立联系。（参见<A href="http://www.douban.com/subject/1115353/" target=_blank><SPAN style="http://blog.excelhome.net/COLOR: #669966">《奇特的一生》</SPAN></A>）</SPAN></P></DIV>]]></description>
</item><item>
<title><![CDATA[循环引用的妙用]]></title>
<link>http://blog.excelhome.net/user1/gouweicao78/archives/2008/1031.html</link>
<author>gouweicao78</author>
<pubDate>2008-7-15 20:30:00</pubDate>
<description><![CDATA[<DIV>Excel循环引用可以算是函数功能VBA化的一个中间过程，借助迭代运算的设置，可以实现意想不到的功能。如：</DIV>
<DIV>1、多次单步查找替换，达到分离数字与文本、替换字符等功能：</DIV>
<br/>
<DIV><A title=用公式将混合数字和字母的分开 href="http://club.excelhome.net/dispbbs.asp?BoardID=3&amp;ID=337952&amp;replyID=&amp;skin=0" target=_blank>用公式将混合数字和字母的分开</A> </DIV>
<br/>
<DIV><A title=急：让某数字代表某个含义（文字） href="http://club.excelhome.net/dispbbs.asp?BoardID=3&amp;ID=336975&amp;replyID=&amp;skin=0" target=_blank>急：让某数字代表某个含义（文字）</A></DIV>
<br/>
<DIV>2、将多笔数据代入某固定的复杂算法之中，套算出结果</DIV>
<br/>
<DIV><A title=[求助]如何将待测数据按要求分批代入求值，高手看过来！！ href="http://club.excelhome.net/dispbbs.asp?BoardID=3&amp;ID=337981&amp;replyID=&amp;skin=0" target=_blank>[求助]如何将待测数据按要求分批代入求值，高手看过来！！</A> <BR></DIV>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>]]></description>
</item><item>
<title><![CDATA[那抹夜色里的清影~]]></title>
<link>http://blog.excelhome.net/user1/guoguo/1030.html</link>
<author>guoguo</author>
<pubDate>2008-7-8 10:06:00</pubDate>
<description><![CDATA[<P><SPAN style="COLOR: #800080">在不知名的机器轰鸣声中，我醒了。你竟然第一个跳进脑海里，让我思绪如三月风中的柳絮，什么时候开始的？</SPAN></P>
<P><SPAN style="COLOR: #800080">如往常般，我轻轻坐在你的脚边，看着你出神：想你是否也望着我出过神呢？你曾经努力的将我拥入怀中的情景，浮现在我眼前，那么甜蜜的将我的心掏走。就这样沉沦吧，我想。</SPAN></P>
<P><SPAN style="COLOR: #800080">你悄悄的变成了空气，没有实体，没有具体形态，却成为我生活中不可少的一部分，想着这些，有点令我抓狂，你时时包围着我，刻刻拥抱着我，我却无法将你留住，捧你在我手心。</SPAN></P>
<P><SPAN style="COLOR: #800080">我低头走在去食堂的道路上，脚边多情的小草尽情的向我招手挥舞，天上白晃晃的太阳刺得我无法睁眼，想你就藏在太阳光的背后，默默的望着我，即使我想扑向你，却无法张眼找寻方向……</SPAN></P>
<P><SPAN style="COLOR: #800080">大雨总是出现在乌云漫天之后，蜻蜓低空飞舞时，站在屋檐下，深深的吸上一口气，却发现有着你的气息，慢慢侵入我的胸腔，驻留在我的心上，令我如被大雨洗刷过的街道，干净得坦然。</SPAN></P>
<P><SPAN style="COLOR: #800080">你是如何留下那道清影在我心底呵，曾经沧海的我，以为不会再有桑田的出现，原来只要有合适的空气、阳光、雨的滋润，桑田就会抽绿，而且，还大片、大片的。</SPAN></P>
<P><SPAN style="COLOR: #800080">你似涨潮的海水，以迅雷不及掩耳之势，将我卷进汹涌里，我以十分难看的姿势扑腾着，你却毫无顾及的从我七窍中奔涌而至，迅速占据了我的每个角落，我却心甘情愿睁着双眼，欣喜着这种变化。</SPAN></P>
<P><SPAN style="COLOR: #800080">你成功的占据了整个的我，我渴望能抓住你的头发，让你疼痛感受到我的存在；我渴望能捧你在我眼前，让你滑进我眼底感受到我的希冀；我渴望着所有，距离却让这一切变成了泡沫。</SPAN></P>
<P><SPAN style="COLOR: #800080">你说这样有着一种朦胧美，距离总是产生美，我想你的想法是正确的。可那个可望不可及的清影，总会在我忙碌的余暇、稍微一愣神里，肆无忌惮的闯入我的私人空间，翻江倒海的扰乱我思绪。</SPAN></P>
<P><SPAN style="COLOR: #800080">我望着灿烂如罂花的你，禁不住偷偷的闻了你，不期然的中了你的毒，你在我的瞎跑乱撞中，不经意的吞噬了我。找寻你的踪迹成了我唯一的解药，可每每扑空的感觉却让我的毒瘾加深，我想着控制自己，我才是我的主宰，却有点惘然。</SPAN></P>
<P><SPAN style="COLOR: #800080">我想，你也是在抗拒的，并不想如此沉沦下来，不想在这片虚幻的夜色里找寻那抹清影。虽然那抹清影多么希望能与你一起同坐在夜色的街边， 两个精致的人影，举杯同饮，但是那抹清影只是点缀。</SPAN></P>
<P><SPAN style="COLOR: #800080">给一点绿色就青菜的我，拉着那道长长的带点清冷的影子，犹如星海里的一粒尘埃，独自摇曳在空旷的夜里……</SPAN></P>
<P><SPAN style="COLOR: #800080">我想记录下快乐的画面，使用开心的文字，可那些文字如你一样都藏了起来，我遍搜无果。你藏在路边的小草里吗？你藏在太阳的背后吗？你藏在遥远山坡的树林里吗？还是藏在星海的妖怪里？</SPAN></P>
<P><SPAN style="COLOR: #800080">不要扔下禁不住你诱惑的我，无论这抹清影能否陪你抵达哪个里程碑，你可愿意与她一起走在这虚幻的夜色里？即使走破那双鞋~</SPAN></P>]]></description>
</item><item>
<title><![CDATA[你也许未曾见过这样的TEXT函数用法]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1027.html</link>
<author>chrisfang</author>
<pubDate>2008-6-20 13:15:00</pubDate>
<description><![CDATA[<P>不少朋友都会使用Text函数，它的用法在很多人看来就是自定义单元格格式的函数版。结合不同的格式代码及条件，可以让对象显示不同的格式效果。然而在我看来，Text函数的作用远不止如此，与自定义单元格格式的代码和功能相比，Text函数可以做的更多、走的更远。Text函数是Excel在字符处理函数中少有的几个具有丰富想像力的Excel函数之一。在某些情况下，text函数还可以替换if函数、替代choose函数，还可以生成内存数组。</P>
<DIV><BR>下面就跟随几个简单的例子，来看看Text函数究竟还能为我们做些什么。</DIV><BR>
<DIV><A href="http://blog.excelhome.net/UploadFiles/2008-6/74181.77434942.rar">UploadFiles/2008-6/74181.77434942.rar</A><A href="http://blog.excelhome.net/UploadFiles/2008-6/47887.88174017.rar"></A></DIV><BR>
<DIV><A href="http://club.excelhome.net/display.asp?tid=3&amp;uid=142590&amp;B=3&amp;t=331382">在论坛中查看此帖</A><BR></DIV><BR>]]></description>
</item><item>
<title><![CDATA[高效办公职场对话系列视频课程 免费下载]]></title>
<link>http://blog.excelhome.net/user1/gvntw/1026.html</link>
<author>gvntw</author>
<pubDate>2008-6-17 14:06:00</pubDate>
<description><![CDATA[<DIV><SPAN style="FONT-SIZE: 14pt; COLOR: #0000cd"><A href="http://club.excelhome.net/display.asp?UID=30306&amp;TID=1" target=_blank>Excelhome献给职场人士的大礼：Excel高效办公职</A></SPAN></DIV>
<DIV><SPAN style="FONT-SIZE: 18pt; COLOR: #0000cd"><SPAN style="FONT-SIZE: 14pt"><A href="http://club.excelhome.net/display.asp?UID=30306&amp;TID=1" target=_blank>场对话系列视频课程 免费下载</A></SPAN> </SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[mmult的经典用法]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1025.html</link>
<author>chrisfang</author>
<pubDate>2008-6-14 15:48:00</pubDate>
<description><![CDATA[<P>countif、sumif、subtotal等函数都是运用于条件求和、条件计数等统计需求的常用函数，但这些函数都要求其第一参数为单元格区域的直接引用。当问题比较复杂、统计条件比较多的情况下，有些时候就无法直接使用这些函数进行条件统计，而使用mmult函数可以很好地替代这些函数，在复杂条件下的数组统计上进行运用。</P>
<P>应该说，mmult函数是数组条件统计的一大利器，用好mmult函数可以简化许多复杂问题的公式解决方案。</P>
<P>论坛上之前也有一些针对mmult函数的介绍和讲解专帖，本帖中不再对mmult的原理进行过多的介绍，而是着重结合具体问题如何使用mmult函数进行一些详细的分解。</P>
<P>下面的这个附件以一些简化的案例模型来针对mmult的不同使用方法进行了一些探讨，同时也引用了一些论坛上已有的具体案例，希望可以给大家提供一些参考意见，同时也欢迎大家参与讨论。<BR></P>
<DIV><A href="http://blog.excelhome.net/UploadFiles/2008-6/57279.98710616.rar">UploadFiles/2008-6/57279.98710616.rar</A></DIV>
<DIV><BR>&nbsp;</DIV>
<DIV><A title=在论坛中查看此帖 href="http://club.excelhome.net/display.asp?tid=3&amp;uid=142590&amp;B=3&amp;t=329106">在论坛中查看此帖</A></DIV>]]></description>
</item><item>
<title><![CDATA[窗体组合框和选项按钮的使用]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1024.html</link>
<author>fanjy</author>
<pubDate>2008-6-11 21:13:00</pubDate>
<description><![CDATA[<P>本例使用了组合框和选项按钮跟踪和调整物品的状态，如下图所示。当在组合框中选择相应的物品后，下面的方框上方的文字会相应改变为该组合框物品名称，方框中的选项按钮根据该物品是否充足进行相应的选择。同时，在组合框中选择物品后，如果更改方框中选项按钮的状态，则下方库存状态列表中的文字也相应更改。单元格区域B11：C18为物品及相应的库存状态列表。<BR>例如，在组合框中选择物品“潜水泵”，单元格B5会显示“潜水泵 充足还是不充足？”，因为在B11：C18中的潜水泵库存状态为充足，所以方框中名为“充足”的选项按钮被选中。此时，若将选项按钮更改为名为“不足”的选项按钮，那么B11：C18中潜水泵所对应的库存状态也会更改为“不足”。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/76543.01477528.png" border=0><BR>下面来看看这个示例是如何实现的。<BR>第一步：在工作表中放置一个组合框、两个选项按钮，并调整格式如上图。在B11：C18区域录入数据，当然可以将数据录入到工作表的其他区域或其他工作表中，并且可以为区域命名，以方便调用和扩展。在本例中，为了演示方便，将数据区域与窗体控件放置在一起。<BR>第二步：设置组合框，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/76564.34839665.png" border=0>&nbsp;<BR>第三步：设置选项按钮，将选项按钮的单元格链接为C8。<BR>第四步：设置单元格B5，使之显示相关的提示信息。在单元格B5中输入公式：<BR>=INDEX(B12:B18,D3) &amp; " 充足还是不充足?"<BR>第五步：编写组合框和选项按钮相关联的代码。在VBE的标准模块中输入下面的代码：<BR>Sub GetStates()<BR>&nbsp;&nbsp;&nbsp; Dim ws As Worksheet<BR>&nbsp;&nbsp;&nbsp; Dim iWPNumber As Integer<BR>&nbsp;&nbsp;&nbsp; Dim sStates As String<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; Set ws = ThisWorkbook.Worksheets("组合框示例")<BR>&nbsp;&nbsp;&nbsp; iWPNumber = ws.Range("D3")<BR>&nbsp;&nbsp;&nbsp; '获取组合框中当前所选物品的状态<BR>&nbsp;&nbsp;&nbsp; sStates = ws.Range("B11").Offset(iWPNumber, 1)<BR>&nbsp;&nbsp;&nbsp; If sStates = "充足" Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '激活名为"充足"的选项按钮<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.Range("C8").Value = 1<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '激活名为"不足"的选项按钮<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.Range("C8").Value = 2<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Set ws = Nothing<BR>End Sub</P>
<DIV>Sub SetStates()<BR>&nbsp;&nbsp;&nbsp; Dim ws As Worksheet<BR>&nbsp;&nbsp;&nbsp; Dim iWPNumber As Integer<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; Set ws = ThisWorkbook.Worksheets("组合框示例")<BR>&nbsp;&nbsp;&nbsp; iWPNumber = ws.Range("D3")<BR>&nbsp;&nbsp;&nbsp; If ws.Range("C8").Value = 1 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '更新物品的状态为充足<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.Range("B11").Offset(iWPNumber, 1).Value = "充足"<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '更新物品的状态为不足<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws.Range("B11").Offset(iWPNumber, 1).Value = "不足"<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Set ws = Nothing<BR>End Sub<BR>其中，GetStates过程为组合框对应的宏代码，当组合框选项发生变化时更改对应的选项按钮。SetStates过程为选项按钮对应的宏代码，当组合框选项选定后，更改选项按钮设置时，相应更改库存列表中物品的库存状态。<BR>第六步：为组合框指定宏为GetStates，为两个选项按钮指定宏为SetStates。</DIV>
<DIV>本文同时发表于<A href="http://www.excelperfect.com">完美Excel</A>。</DIV>]]></description>
</item>
</channel>
</rss>
