<?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 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[跟我学Excel2007简易教程660篇]]></title>
<link>http://blog.excelhome.net/user1/apolloh/1105.html</link>
<author>apolloh</author>
<pubDate>2009-3-16 15:39:00</pubDate>
<description><![CDATA[<P><SPAN style="COLOR: #ff0000">Excel 2007取代2003只是时间问题！</SPAN>Excel 2003所能办到的事，2007也能办到，而且能办得更好。现在就开始接触Excel 2007，也算是顺应时代的潮流吧。</P>
<P>才发现新版的博客程序新发的文章，游客无法下载附件。修改一下，请到如下地址下载附件，谢谢！</P>
<P>请点击这里下载：<A href="http://www.exceltip.cn/viewthread.php?tid=410&amp;fromuid=1"><COLOR="http://blog.excelhome.net/RED">下载地址</A></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>从目前掌握的一些信息来看，Office2007SP1之下，Excel2007中还不能创建真正嵌入Flash文件的文档（可以插入Shockwaveflash控件来选择嵌入flash文档，但在移除源文件后就会无法播放，原因是保存xlsm的时候没有真正完成“嵌入”的操作）。</P>
<P>有一种变通的方法可以稍许安慰一下那些对此表示失望的用户们，</P>
<P>首先，你的机器上要安装有Office2003版本，并且已经升级到SP3版，然后从微软网站上下载并安装格式兼容包FileFormatConverters.exe（下载地址：<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>）</P>
<P>然后，打开Excel2003，插入shockwaveflash控件，将控件的movie属性指向本地或网络的swf文件，并将控件的Embedmovie属性设置为True。完成设置后，退出“设计模式”，此时应该可以看到正常播放的Flash动画。</P>
<P>接下来，在Excel2003的菜单中选择“文件”——“另存为”，在“另存为”对话框下方的“保存类型”下拉列表中选择“Excel2007启用宏的工作簿(*.xlsm)”，选择保存文件。</P>
<P>这样生成的2007版的xlsm文件就可以携带着嵌入其中的flash文档传播给其他用户打开欣赏。</P>
<P>但是需要注意的是，这个xlsm不能在Excel2007下面再次保存，否则会丢失嵌入的信息。</P>
<P>&nbsp;</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: Arial">网上很多地方都能找到2003版中<SPAN class=t_tag style="FONT-SIZE: 10pt; FONT-FAMILY: Arial" onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%CC%E1%C8%A1">提取所嵌入的</SPAN>Flash文件的方法和<SPAN class=t_tag style="FONT-SIZE: 10pt; FONT-FAMILY: Arial" onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B4%FA%C2%EB">代码</SPAN>，但是2007版本出来那么久了，在网上搜索了一下好像07版本下的相应提取工具还没有出现。</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">由于<SPAN class=t_tag style="FONT-SIZE: 10pt; FONT-FAMILY: Arial" onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=2007">2007</SPAN>的文件<SPAN class=t_tag style="FONT-SIZE: 10pt; FONT-FAMILY: Arial" onclick=tagshow(event) href="http://blog.excelhome.net/tag.php?name=%B8%F1%CA%BD">格式</SPAN>发生了变化，原有2003下的提取方法和代码已经不再适用，因此我重新做了一个适应07版本的。</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">先说一下思路，Office2007使用了一种新的文件格式Office Open XML，这种格式基于XML和ZIP存档技术。也就是说，如果把2007的Office文件例如 *.xlsm、*.xlsx等文件的扩展名改为zip，就可以当作zip压缩包一样打开和解压缩。</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">在解压之后，如果是Excel文档，则解压目录下有名为“xl”的文件夹（PPT的话是“ppt”文件夹，WORD的话是“word”文件夹，我这个程序只做了查找xl的代码，也就是说只适用于Excel文档），打开这个文件夹，如果添加了Flash控件，则会有一个名为“Activex”的文件夹，这个文件夹下面的BIN文件中就包含了flash文件，用二进制格式打开文件可以找到“465753”的swf文件头。接下来的工作就和2003中提取的方法没什么区别了。（因此这部分代码基本上照搬现有的代码）</SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">程序如下：（现在的代码没有去做很强的自适应功能，只能找文档中的第一个activex控件，如果目标文档中的首个Activex控件不是flash的控件，那就会出错。有兴趣的朋友可以另外加个遍历和判断，还可以提取多个flash文档。）</SPAN></P>
<P><BR><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&nbsp;</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>【以下内容更新于2009年2月9日】</P>
<P>今天思考另外一个问题的时候突然想到，先前所做的这个提取程序是不是绕了一条远路？既然2003下面可以很方便地提取Flash文档，那么把2007的文档转存为2003的文档再来提取不是很简单？何必像上面那样搞得如此复杂？呵呵，真是聪明反被聪明误。不过上面这个作为对2007文件格式的一点研究，还是有那么一点点意义。</P>
<P>下面重新改写了一个可以通吃Excel2003和Excel2007文件的提取程序（程序适用于2007版本之中）：</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">附件如下：&nbsp;</SPAN></P><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/archives/2008/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/archives/2008/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><item>
<title><![CDATA[用窗体复选框控制工作表是否可见]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1023.html</link>
<author>fanjy</author>
<pubDate>2008-6-11 21:09:00</pubDate>
<description><![CDATA[<DIV>控制工作簿中工作表的显示和隐藏是复选框控件的一种典型应用。如下图所示，首先在工作表中放置一个分组框，然后在该分组框中放置三个复选框，将这四个控件的标题分别改为如图所示的文字。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/76284.46165282.png" border=0>&nbsp;<BR>接下来，设置这三个复选框分别链接至其背后的单元格B4、B5、B6，并设置它们的“颜色与线条”为“自动”，使其覆盖背后的单元格，这样该单元格中的文字就会被遮住。<BR>注意，要想复选框后面的单元格文字不可见，以避免与复选框文本相冲突，须设置该复选框的“颜色与线条”格式为“自动”。<BR>设置控件格式的方法为，在某控件中单击右键，选择“设置控件格式”。在“设置控件格式”对话框（如下图所示）中，选择相应的选项卡，对该控件的格式进行设置。<BR><IMG height=435 alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/76306.84376481.png" width=600 border=0>&nbsp;<BR>在VBE中编写的代码如下：<BR>Sub SetWorksheetVisibility()<BR>&nbsp;&nbsp;&nbsp; Dim ws As Worksheet<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; Set ws = ThisWorkbook.Worksheets("控制工作表可视状态")<BR>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<BR>&nbsp;&nbsp;&nbsp; ThisWorkbook.Worksheets("Sheet1").Visible = ws.Range("B4").Value<BR>&nbsp;&nbsp;&nbsp; ThisWorkbook.Worksheets("Sheet2").Visible = ws.Range("B5").Value<BR>&nbsp;&nbsp;&nbsp; ThisWorkbook.Worksheets("Sheet3").Visible = ws.Range("B6").Value<BR>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = True<BR>End Sub<BR>最后，分别在这三个复选框中单击右键，选择“指定宏”，在“指定宏”对话框分别将宏均指定为SetWorksheetVisibility。<BR>这样，当在工作表中选中某复选框时，该复选框标题所对应的工作表可见，当取消复选框选择时，相应的工作表将隐藏。</DIV>
<DIV>本文同时发表于<A href="http://www.excelperfect.com">完美Excel</A>。</DIV>]]></description>
</item><item>
<title><![CDATA[使用VB6编写COM加载项]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1022.html</link>
<author>fanjy</author>
<pubDate>2008-6-8 20:59:00</pubDate>
<description><![CDATA[<DIV>下面记录下使用VB6为Excel创建COM加载项的步骤，以供日后有用时参考。<BR>步骤1：打开VB6。在“新建工程”对话框中选择“外接程序”，单击“打开”按钮，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/75753.8526307.png" border=0>&nbsp;<BR>此时，创建一个名为MyAddIn的工程，包含一个名为frmAddIn的窗体和一个名为Connect的Designer类变量。<BR>步骤2：将工程名称改为MyFirstCOMAddIn。<BR>步骤3：删除默认的窗体frmAddIn。<BR>步骤4：删除Connect中的全部代码。<BR>步骤5：在工程资源管理器窗口双击Connect打开加载宏设计器窗口，并对其进行相应的设置，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/75787.99466912.png" border=0>&nbsp;<BR>上图中，在“通用”选项卡中设置了COM加载项在Excel的COM加载项对话框中显示的名称及相应的描述，并设置应用程序为Microsoft Excel，选择初始化加载行为为Startup，表示在Excel每次启动时都运行该加载项，当然还有其他三个选项分别设置何时启用加载项。该对话框还有一个名为“高级”的选项卡，此时我们暂且不用。<BR>步骤6：在工程资源管理器窗口右击Connect，选择“查看代码”，打开代码窗口。<BR>步骤7：在代码窗口顶部左侧的对象列表框中选择AddinInstance对象，在右侧的事件列表框中选择OnConnection事件，并输入下面的代码：<BR>Private Sub AddinInstance_OnConnection(ByVal Application As Object, _<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; ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _<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; ByVal AddInInst As Object, _<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; custom() As Variant)<BR>&nbsp;&nbsp;&nbsp; MsgBox "这是使用VB6创建的COM加载项"<BR>End Sub<BR>然后，再在事件列表框中选择OnDisconnection事件，并输入下面的代码：<BR>Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _<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;&nbsp;&nbsp; custom() As Variant)<BR>&nbsp;&nbsp;&nbsp; MsgBox "将要关闭Excel工作簿,您保存里面的数据了吗."<BR>End Sub<BR>步骤8：保存所有的工程文件。<BR>步骤9：单击菜单“文件——生成MyFirstCOMAddIn.dll”，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/75844.16856240.png" border=0><BR>至此，这个COM加载项制作完成。<BR>步骤10：打开Excel 2003，将会出现一个消息框，这是在COM加载项的OnConnection事件中设置的，如下图所示。<BR>&nbsp;<IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/75892.95317416.png" border=0><BR>关闭Excel 2003时，将会出现一个消息框，这是在COM加载项的OnDisconnection事件中设置的，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/75927.65531677.png" border=0>&nbsp;<BR>这的加载项之所以在Excel 2003会话开启时运行，是因为我们在设计加载项时选择了选项Startup，即在Excel启动时加载该加载项。下面，在Excel 2003中设置能够启动或关闭COM加载项。<BR>步骤11：在Excel 2003中单击菜单“工具——自定义”，在“自定义”对话框中的选择“命令”选项卡，在左侧的类别列表框中选择“工具”，在右侧的命令列表框中找到“COM加载项”条目（如下图所示），并将其拖至Excel菜单栏中“工具”菜单下。单击“关闭”按钮关闭自定义对话框。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/75979.74355730.png" border=0>&nbsp;<BR>步骤12：单击菜单“工具——COM加载项”，弹出“COM加载项”对话框，其中列出了所有可用的COM加载项，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-6/76023.91839980.png" border=0>&nbsp;<BR>为了使刚创建的My First COM Add-In加载项不可用，可取消其前面的复选框选择。也可以通过“删除”按钮删除该加载项。</DIV>
<DIV>本文同时发表于《<A href="http://www.excelperfect.com/2008/06/08/%e4%bd%bf%e7%94%a8vb6%e7%bc%96%e5%86%99com%e5%8a%a0%e8%bd%bd%e9%a1%b9/">完美Excel</A>》。</DIV>]]></description>
</item><item>
<title><![CDATA[使用VBA从Excel中建立PowerPoint演示文档]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1021.html</link>
<author>fanjy</author>
<pubDate>2008-5-24 16:24:00</pubDate>
<description><![CDATA[<DIV>在《Excel &amp; Access Integration：With Office 2007》的最后一章中，介绍了Microsoft Excel与Word、PowerPoint和Outlook整合的基本技术。其中，介绍Excel和PowerPoint整合技术时，演示了如何在Excel工作簿中创建演示文档，然后使用自动化将其转换为PowerPoint演示文档，如题。<BR>我觉得这是一项非常有用的技术，充分发挥了两种应用程序各自的优点。在Excel工作簿中，每张工作表代表演示文档中的一张幻灯片，在工作表中能够充分利用Excel的数据分析和处理功能生成生动且有意义的图表或表格。然后，将这些工作表转换为PowerPoint幻灯片，从而利用PowerPoint的演示功能。<BR>下面的示例沿用《Excel &amp; Access Integration：With Office 2007》中的示例文档WorkbookToPowerPoint.xlsm，以演示这项技术。在该工作簿中，包含有四张工作表，分别包含四个区域（Asia、South America、United Kingdom、United States）的收入数据以及相应的图表分析（如下图所示）。</DIV>
<DIV><IMG height=393 alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/59134.08224004.jpg" width=500 border=0></DIV><BR>
<DIV>当然，这些工作表都是设计好了的，与PowerPoint中的幻灯片形式相同，每一张工作表代表一张幻灯片，分别演示一个区域的收入数据及分析情况。下面，我们将这些工作表转换为相应PowerPoint演示文档中的幻灯片。<BR>首先，需要添加对Microsoft PowerPoint ╳╳ Object Library的引用（其中╳╳代表该对象库的版本号），如下图所示。</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/59283.3490684.jpg" border=0></DIV>
<DIV>然后，在标准模块中输入下面的代码：</DIV>
<P>Sub WorkbooktoPowerPoint()<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '声明变量<BR>&nbsp;&nbsp;&nbsp; Dim pp As PowerPoint.Application<BR>&nbsp;&nbsp;&nbsp; Dim PPPres As PowerPoint.Presentation<BR>&nbsp;&nbsp;&nbsp; Dim PPSlide As PowerPoint.Slide<BR>&nbsp;&nbsp;&nbsp; Dim xlwksht As Excel.Worksheet<BR>&nbsp;&nbsp;&nbsp; Dim MyRange As String<BR>&nbsp;&nbsp;&nbsp; Dim MyTitle As String<BR>&nbsp;&nbsp;&nbsp; Dim SlideCount As Integer<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '开启PowerPoint,添加新的演示文档并使其可见<BR>&nbsp;&nbsp;&nbsp; Set pp = New PowerPoint.Application<BR>&nbsp;&nbsp;&nbsp; Set PPPres = pp.Presentations.Add<BR>&nbsp;&nbsp;&nbsp; pp.Visible = True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '设置数据和标题的单元格区域<BR>&nbsp;&nbsp;&nbsp; MyRange = "A1:I27"<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '开始循环每张工作表<BR>&nbsp;&nbsp;&nbsp; For Each xlwksht In ActiveWorkbook.Worksheets<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置每张幻灯片的标题<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyTitle = xlwksht.Range("C19").Value</P>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '复制单元格区域为图片<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlwksht.Range(MyRange).CopyPicture _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Appearance:=xlScreen, Format:=xlPicture<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '统计幻灯片并添加新幻灯片作为下一个可用的幻灯片号<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SlideCount = PPPres.Slides.Count<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutTitleOnly)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PPSlide.Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '粘贴图片并调整其位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PPSlide.Shapes.Paste.Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pp.ActiveWindow.Selection.ShapeRange.Top = 100<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '为该幻灯片添加标题并移到下一张工作表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PPSlide.Shapes.Title.TextFrame.TextRange.Text = MyTitle<BR>&nbsp;&nbsp;&nbsp; Next xlwksht<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '激活PPT演示文档<BR>&nbsp;&nbsp;&nbsp; pp.Activate<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '释放内存<BR>&nbsp;&nbsp;&nbsp; Set PPSlide = Nothing<BR>&nbsp;&nbsp;&nbsp; Set PPPres = Nothing<BR>&nbsp;&nbsp;&nbsp; Set pp = Nothing<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>End Sub</DIV>
<DIV>（本文同时发表在<A href="http://www.excelperfect.com">http://www.excelperfect.com</A>中，因上面可以编程代码的行号，所以附带了该代码的详细解析说明）<BR>运行WorkbooktoPowerPoint过程后，结果如下图所示：</DIV>
<DIV><IMG height=354 alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/59459.75640139.jpg" width=500 border=0></DIV>]]></description>
</item><item>
<title><![CDATA[Excel & Access Integration]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1020.html</link>
<author>fanjy</author>
<pubDate>2008-5-23 14:22:00</pubDate>
<description><![CDATA[<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/51886.91390777.jpg" border=0></DIV>
<DIV>历经大约一个多星期，终于看完了这本书，当然是英文版的。<BR>这本书写得不错，从Excel用户的角度讲述了Access中的一些常见的使用，如何将两个流行的应用程序结合起来，发挥各自的特长和威力，从而更好地提高生产效率。<BR>该书分为两个部分。第一部分讲解了Access基础，主要集中在报表和查询方面，还介绍了Access宏，其目的是为不熟悉Access的Excel用户讲解基本的Access使用，以及两个应用程序之间的不同。第二部分讲解了使用VBA技术整合两个应用程序，使工作自动化。虽然在这里讲解了VBA的基础知识，但我觉得具备一定的VBA基础的读者阅读本书，可能会收获更大，阅读更顺畅。<BR>该书也列举了大量的实例和程序代码，并以一种独特的风格（分步骤）对代码进行了详细的解析，很容易阅读和理解。</DIV>]]></description>
</item><item>
<title><![CDATA[地震后韩国人与日本人的网上评论1]]></title>
<link>http://blog.excelhome.net/user1/xolf/archives/2008/1019.html</link>
<author>xolf</author>
<pubDate>2008-5-15 19:40:00</pubDate>
<description><![CDATA[<P>差距太大！地震面前，韩国人与日本人的网上评论！ (2008-05-14 15:26:29) <BR><A href="http://blog.sina.com.cn/s/blog_4fb6ff610100981d.html">http://blog.sina.com.cn/s/blog_4fb6ff610100981d.html</A>&nbsp; 转贴自以上地址</P>
<P>韩国网民对中国地震的评论（翻译自韩国论坛）和日本网民对大地震的评论<BR>“我们大韩国可以将我们先进技术带去，帮助靠人海救灾的中国人……什么世纪了，还靠人去救助，对中国人无语”<BR>“总统不去，中国不满，我们去了，它们又去搞救灾，太怠慢了，还称礼仪之邦呢……”<BR>“没人敢怠慢总统，否则联合国也不捐款，我们有秘书长大人。”<BR>“美国人也不敢怠慢我们大韩总统，日本天皇作为韩国人后代，凭什么对中国总统那样殷勤？”<BR>“哈哈，我早就知道地震了，就不告诉它们……”<BR>“奇怪，他们军队去救助，怎么不拿枪呢？？有暴民怎么办？”<BR>“我们古代就有地震仪可以预测了，怎么还没有预测？”<BR>“地震是不好预测的，我们地震仪也只能提前半天预测，没意义！”<BR>“楼上什么意思？？我们伟大的古代发明救了很多中国人，要不怎么他们一直在争夺我们的发明？”<BR>“真担心总统，会不会被怠慢”<BR>“怠慢就再来场地震，哈哈”<BR>“死人还是不好的，毕竟还有小孩……”<BR>“中国和日本一起侵略我们时候怎么没说照顾小孩？？楼上猪”<BR>“它们没有救护犬吧，据说用北京狗是不能找人的（北京狗？是京巴，不会翻译）<BR>“应该机械化救助，靠军队去，会不会趁火打劫？？”<BR>“不能让总统遭遇怠慢，否则不捐款给它们”<BR>“快叫在中国的韩国人回家吧，那里要倒塌了……”<BR>“趁机占领东北，哈哈”<BR>“听说东北军队没动，怕难民逃到大韩……”<BR>这和日本网站网民的反应天壤之别，可以看出韩国尽管经济发展了不少，教育还存在相当大的局限性。<BR>从发言的幼稚程度推测上述论坛用户智商年龄层应该在16～20岁左右。<BR>日本网民对中国地震的评论<BR>　　<BR>　　据新华社《环球时报》报道，尽管日本参议院12日进行号称"福田政府生死战"的《道路财源特例法案》表决，但日本NHK等各大电视台18时全国晚间新闻仍然把中国发生7.8级强烈地震的消息作为新闻头条。NHK的新闻大部分使用了中国中央电视台的原始画面，包括记者的现场连线，甚至来不及将有关内容完全翻译成日语。神户街头的电视新闻大屏幕前站着许多日本人，得知记者是中国人后，连连发问"会不会死伤很多人？"<BR>　　日本舆论对中国这次地震多是同情和关注的言论。获得支持最多的两个网上帖子是"迅速进行人命救助的活动是最正当的做法，平时总是强调'人权'的日本人，这个时候要注意自己的言行，要是干扰了救人就太不象话了！"，"中国政府反映真快！为受灾者的平安而祈祷"。一名日本网民揣测日本普通人不会热心帮助中国救灾，只有亲中的福田政府才会出资救援。结果很快引来日本网民的一片反对，称其想法是日本人的耻辱。由于日本人习惯于在网络上进行发泄，日本网络舆论素以"环境恶劣"著称，这次对中国震灾颇多善意的情况可谓罕见。<BR>　　下面是日本雅虎一条新闻后面的网民跟贴，与韩国新闻网站中某些韩国网民幸灾乐祸不同的是，大多数日本网民对中国这次地震表示同情和关注。<BR>　　　　一刻も早い災害派遣を望む。<BR>　　　　地震後48時間が勝負。<BR>　　　　別コメ欄でも書いたが災害救助は<BR>　　　　時間との勝負。<BR>　　　　阪神淡路大震災や他の地震でも証明されている。<BR>　　　　思想、体制は違っていても人命は尊い。<BR>　　　　……………………………………………………………………………………<BR>　　　　希望能尽早的派遣救难队伍。地震后48小时事是救灾的关键。正如我在别的地方所写到的，救灾就是与时间的赛跑。这已经是被阪神淡路大地震以及其他大地震所证明了的。虽然思想，体制各不相同，但生命的尊严是同等的。<BR>　　　　<BR>　　　　2008年5月12日 21時40分<BR>　　　　何の罪も無い子供たちが多数犠牲になっていると知って、とても胸が痛いです。<BR>　　　　１人でも多く、早く、命が助かることを願ってます。<BR>　　　　…………………………………………………………………………………………<BR>　　　　我得知那么多无辜的孩子遭遇了不幸，感到非常痛心。<BR>　　　　我祈祷能够尽可能地，尽早地抢救那些无辜的生命。<BR>　　　　2008年5月12日 21時37分<BR>　　　　小学校が倒壊ですか???子供が痛い思いや、怖い思いをしているかと思うと、本当にいたたまれなくなります。<BR>　　　　少しでも早く助けてあげて欲しい！<BR>　　　　…………………………………………………………<BR>　　　　小学倒塌了呀？一想到那些孩子会多么痛，多么害怕，我就感到痛心。希望他们能够尽早得救。<BR>　　　　2008年5月12日 21時22分<BR>　　　　地震大国の日本も他人事じゃないな???<BR>　　　　对于地震大国日本来说，这不是事不关己，高高挂起的事……<BR>　　　　2008年5月12日 21時30分<BR>　　　　小学校が倒壊???子どもが犠牲になったんでしょうね。<BR>　　　　生き埋めになっている生徒達が、一人でも多く生きていてくれることを願います。<BR>　　　　……………………………………………………………………………………………………………………<BR>　　　　小学倒塌了……受灾的都是些孩子吧。希望那些被埋了的孩子尽早得救，能多救一个就多救一个。<BR>　　　　2008年5月12日 21時48分<BR>　　　　正直に言えば、中国に対して思う事はたくさんある。<BR>　　　　でも、自然災害時は、それぞれの国が協力しなくては。<BR>　　　　反日、反中など、叫んでいる場合ではない。<BR>　　　　自然災害という脅威には、各国が助け合いながら立ち向かわなくては。<BR>　　　　老实说，我对中国意见多多。但是，面对自然灾害时，各国应该互相协助。<BR>　　　　这不是什么说反日，反中的时候。<BR>　　　　对于自然灾害，我们必须齐心协力共同应对。<BR>　　　　相手が反日だろうと、困った時はお互い様なんだから、非難とかじゃなく助け合ってほしい。政府はミャンマーのように二次災害がでないようにしてください。<BR>　　　　………………………………………………………………………………<BR>　　　　不管对方是不是反日，危急时刻应该彼此协助，这不是说风凉话的时候，我希望大家能够互相帮助。也希望政府不要像缅甸那样，让2次灾害的悲剧发生。<BR>　　　　2008年5月12日 21時32分<BR>　　　　小学校が倒壊して107人死亡に900人生き埋めって???<BR>　　　　最近ミャンマーでサイクロンだとか中国で大地震とか自然災害が多い。<BR>　　　　どうなってんの？<BR>　　　　どちらも政府がちゃんとした対応をして、これ以上被害が増えないようにしてほしい。<BR>　　　　……………………………………………………………………<BR>　　　　小学倒塌，107人死亡，900人被埋……缅甸，中国，最近是怎么了？我希望政府能积极应对，不要将灾害扩大了。<BR>　　　　2008年5月12日 22時4分<BR>　　　　阪神大震災や新潟中越地震を経験している日本の救助技術は<BR>　　　　こういった災害には確実に役に立つと思う。昨今の政治情勢がどうあれ、<BR>　　　　隣国でもあることだし一刻を争うことなので<BR>　　　　今は反日だのなんだのと言わずぜひ受け容れてほしいし、<BR>　　　　日本政府も早く援助隊を派遣してほしい。<BR>　　　　阪神大地震，新泻大地震的经验，日本的救助技术，应该可以在这类灾害中发挥作用。不管政治局势怎样，中国又是我们的邻国，时间紧迫，不要再说什么他们反日什么的了，日本政府应该尽早派遣救援队伍。<BR>　　　　2008年5月12日 23時28分<BR>　　　　4点 私もそう思う 削除/違反報告<BR>　　　　早く日本に支援要請をだしてくれ?<BR>　　　　ハイ&#12497;ーレスキューが犬とかなんとか持って行くから！<BR>　　　　本当に役に立つって!!!<BR>　　　　快点请求增援吧。我们会带着精英救助队和救生犬去的！<BR>　　　　真得很管用哦!!!<BR>　　　　2008年5月12日 23時37分<BR>　　　　2点 私もそう思う 削除/違反報告<BR>　　　　今、世界中で自然災害が頻発してますね。 ミャンマーのハリケーン、少し前になるが、&#12450;メリカのカトリーナ。日本も最近全国的に地震が良く起きる。<BR>　　　　私は本音、中国はあまり好きじゃありません。 でも、地震は人が起こすものじゃありませんからね。 一時も早く、災害派遣、復旧を願って.<BR>　　　　………………………………<BR>　　　　现在，世界各地灾害频发。缅甸，还有以前的美国飓风。日本最近也老是地震。<BR>　　　　说实话，我真得很不喜欢中国。但是，地震是天灾，希望能够尽早的派遣救助队伍，尽早的恢复正常生活。<BR>　　 2008年5月12日 23時41分<BR>　　　　日本からは&#12496;キュームカーを送ってあげてください。<BR>　　　　…………………………………………………………………………<BR>　　日本快派几辆真空救灾车去吧。<IMG alt="" src="http://blog.excelhome.net//UploadFiles/2008-5/71312.15960761.jpg" border=0><BR></EMBED></P>]]></description>
</item><item>
<title><![CDATA[PPT 转 WORD]]></title>
<link>http://blog.excelhome.net/user1/Harold/1012.html</link>
<author>shourou</author>
<pubDate>2008-5-11 18:53:00</pubDate>
<description><![CDATA[<P>PPT文档转化为WORD文档的小程序。</P>
<P>一、主要功能如下：</P>
<P>1. 对PPT中文本框中的文字、图形、图表、嵌入式对象、表格等，一一写入WORD中，并基本保持原有格式。</P>
<P>2. 对其中的白色字体，自动设置为黑色（自动色）</P>
<P>3. 对图表和嵌入式对象等，以图片方式粘贴，并切断了链接；图形在WORD中均以14*6厘米的大小、居中和嵌入式格式设置；</P>
<P>4. 对表格，按页面大小的100%进行设置，并调整字体为11号；</P>
<P>5. 以加载宏的方式可以方便用户调用/加载和卸载。</P>
<P>6. 加载时自动向常用工具栏的第一个按钮位置添加名为"PPTtoWord"的命令，并在用户卸载时删除此命令。</P>
<P>二、注意事项：</P>
<P>1. 仅适用于OFFICEXP及以上版本；如果是2000的版本，请更改并勾选VBE 工具/引用中对于MICROSOFT WORD 9.0 OBJECT LIBRARY.</P>
<P>2. 对其中的一些格式,可以自行添加一些代码</P>
<P>3. 受用户PPT文档编辑过程的影响,部分文本框中内容的秩序会有影响.</P>
<P>4. 请将PPT中的宏安全性设置为低,如果为非低,请设置为低后重启PPT;</P>
<P>5. 请将此加载宏解压于指定文件夹,以便于你的加载调用;建议解压于:"C:\Documents and Settings\username\Application Data\Microsoft\AddIns"文件夹中</P>
<P>6. 请在工具/加载宏中,加载此加载宏(PPTtoWord.ppa)</P>
<P>三、代码部分：</P>
<P>Option Explicit</P>
<P>Sub WriteToWord()</P>
<P>Dim aSlide As Slide</P>
<P>Dim MyDoc As New Word.Document</P>
<P>Dim MyRange As Word.Range</P>
<P>Dim aTable As Table</P>
<P>Dim aShape As Shape</P>
<P>Dim TablesCount As Integer</P>
<P>Dim ShapesCount As Integer</P>
<P>On Error Resume Next '忽略错误</P>
<P>With MyDoc</P>
<P>.Application.Visible = False '隐藏WORD程序窗口</P>
<P>.Application.ScreenUpdating = False '关闭WORD屏幕更新以加快运行</P>
<P>For Each aSlide In ActivePresentation.Slides '遍历幻灯片</P>
<P>For Each aShape In aSlide.Shapes '遍历图层对象</P>
<P>Set MyRange = .Range(.Content.End - 1, .Content.End - 1)</P>
<P>Select Case aShape.Type</P>
<P>Case msoAutoShape, msoPlaceholder, msoTextBox ' 图层类型 '自选图形,文本框等</P>
<P>If aShape.TextFrame.HasText Then '如果文本框中包含文字</P>
<P>aShape.TextFrame.TextRange.Copy '将其中的文字区域复制</P>
<P>MyRange.Paste '粘贴</P>
<P>End If</P>
<P>'''图表对象\图片对象等时</P>
<P>Case msoEmbeddedOLEObject, msoLinkedOLEObject, msoLinkedPicture, msoOLEControlObject, msoPicture</P>
<P>aShape.Copy '复制 '选择性粘贴为图片格式</P>
<P>MyRange.PasteSpecial Datatype:=wdPasteMetafilePicture</P>
<P>ShapesCount = .Shapes.Count '取得文档中的图形数量</P>
<P>With .Shapes(ShapesCount)</P>
<P>.LockAspectRatio = msoFalse '不锁定纵横比</P>
<P>.Width = Word.CentimetersToPoints(14) '宽为14厘米</P>
<P>.Height = Word.CentimetersToPoints(6) '高为6厘米</P>
<P>.Left = wdShapeCenter '居中</P>
<P>.ConvertToInlineShape '转换为嵌入式图片对象,以利排版</P>
<P>End With</P>
<P>.Content.InsertAfter Chr(13) '插入一个段落标记</P>
<P>Case msoTable 'Case表格时</P>
<P>aShape.Copy '复制 MyRange.Paste '粘贴</P>
<P>TablesCount = .Tables.Count '取得文档中的表格数量</P>
<P>With .Tables(TablesCount) '表格对象</P>
<P>.PreferredWidthType = wdPreferredWidthPercent '百分比</P>
<P>.PreferredWidth = 100 '100%页面宽度</P>
<P>.Range.Font.Size = 11 '字体大小</P>
<P>End With</P>
<P>.Content.InsertAfter Chr(13)</P>
<P>End Select</P>
<P>Next</P>
<P>Next '替换白色字体为自动色(黑色)</P>
<P>With .Content.Find</P>
<P>.ClearFormatting '清除格式</P>
<P>.Format = True '格式查找</P>
<P>.Font.Color = wdColorWhite '白色字体</P>
<P>.Replacement.Font.Color = wdColorAutomatic '自动色</P>
<P>.Execute Replace:=wdReplaceAll '全部替换</P>
<P>End With</P>
<P>MsgBox "PPT转换为WORD文档已经结束,请校对和进一步编辑!", vbInformation + vbOKOnly, "ExcelHome/ShouRou"</P>
<P>.Application.Visible = True '显示Word应用程序</P>
<P>.Application.ScreenUpdating = True '恢复WORD的屏幕更新</P>
<P>End With</P>
<P>End Sub</P>
<P>'----------------------</P>
<P>Sub Auto_Open() '加载时在常用工具栏中添加一个命令</P>
<P>Dim MyControl As CommandBarControl</P>
<P>On Error Resume Next '忽略错误</P>
<P>'预防性删除</P>
<P>Application.CommandBars("Standard").Controls("PPTtoWord").Delete</P>
<P>'在常用工具栏最前面添加一个按钮</P>
<P>Set MyControl = Application.CommandBars("Standard").Controls.Add(Before:=1)</P>
<P>With MyControl</P>
<P>.Caption = "PPTtoWord" '标题</P>
<P>.FaceId = 567 '图标</P>
<P>.Enabled = True '可用</P>
<P>.Visible = True '显示</P>
<P>.Width = 100 '宽度</P>
<P>.OnAction = "WriteToWord" '运行指定的过程</P>
<P>.Style = msoButtonIconAndCaption '显示的方式图标+标题</P>
<P>End With</P>
<P>End Sub</P>
<P>'----------------------</P>
<P>Sub Auto_Close()</P>
<P>'卸载时删除此命令</P>
<P>On Error Resume Next</P>
<P>Application.CommandBars("Standard").Controls("PPTtoWord").Delete</P>
<P>End Sub</P>
<P><A title=加载宏下载 href="http://blog.excelhome.net/UploadFiles/2008-5/68718.2710864.rar"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 14pt"><STRONG>UploadFiles/2008-5/68718.2710864.rar</STRONG></SPAN></A></P>]]></description>
</item><item>
<title><![CDATA[守柔WORD编程代码集]]></title>
<link>http://blog.excelhome.net/user1/Harold/1011.html</link>
<author>shourou</author>
<pubDate>2008-5-11 18:30:00</pubDate>
<description><![CDATA[<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635560"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 14pt; FONT-FAMILY: 黑体"></SPAN></A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635493">一) 序... 4</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635494">二) 空白段落的删除: 7</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635495">三) 以指定字符重新划分段落并插入时间序列数... 7</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635496">四) 段落样式与格式的应用... 8</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635497">五) 根据预定义段落进行段落样式的设置和插入目录... 9</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635498">六) 表格集合中的循环与对单元格边框的设置... 10</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635499">七) 书签、数组与排序... 11</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635500">八) WORD文档中文词组频率统计... 12</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635501">九) 查找与替换的基本代码用法之一... 17</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635502">十) 查找与替换的基本代码用法之二... 17</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635503">十一) 查找与替换的基本代码用法之三(批量替换). 18</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635504">十二) 查找与替换的基本代码用法之四-全文件夹替换... 20</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635505">十三) 判断光标所在行是否有手动分页符... 22</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635506">十四) 认识Word的命令栏、控件按钮... 22</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635507">十五) 认识WORD 中的对话框(Dialog). 25</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635508">十六) 自定义右键菜单（修改右键）... 25</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635509">十七) 修改WORD命令... 28</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635510">十八) 返回所选(当前)段落指定行号的文本内容一... 30</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635511">十九) 返回指定行号文本二... 32</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635512">二十) 选定当前页文本... 34</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635513">二十一) 选定文档任意页(连续)之一... 35</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635514">二十二) 选定文档任意页(连续)之二... 38</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635515">二十三) 邮件合并中条件格式的设置... 39</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635516">二十四) 分页保存-保留格式设置的代码... 41</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635517">二十五) 随机文档打开密码的设置... 42</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635518">二十六) Word中的中文倒字代码... 43</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635519">二十七) 返回打印设置，取得所有打印页数（张数）... 44</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635520">二十八) 在文档中插入根号的两个简洁代码... 45</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635521">二十九) 嵌套域的VBA自动插入代码... 46</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635522">三十) 数字工具... 46</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635523">三十一) 三角函数计算... 50</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635524">三十二) 汉字拼音解决方案: 51</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635525">三十三) WORD文档的VBProject的引用列表与示例... 58</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635526">三十四) 制作动态链接库(*.dll)文件和WORD中引用动态链接库... 60</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635527">三十五) 语音朗读... 62</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635528">三十六) VBE中文代码复制器... 62</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635529">三十七) 自动图文集与自选图形-自动插入带编号的小旗... 65</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635530">三十八) 图片编辑器... 66</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635531">三十九) WORD表格中公式代码自动填充: 71</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635532">四十) 取得汉字笔画数(WORD版). 74</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635533">四十一) 后台解除已知密码的VBA工程的代码... 75</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635534">四十二) 画直角坐标系... 75</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635535">四十三) Word绘图中的交点自动绘制... 80</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635536">四十四) Word 中的AutoCad功能... 82</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635537">四十五) 乾坤大挪移... 87</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635538">四十六) 遍历文件夹之一... 90</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635539">四十七) 遍历文件夹之二... 90</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635540">四十八) 遍历文件夹之三... 91</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635541">四十九) 遍历文件夹之四... 91</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635542">五十) 批量重命名文件... 92</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635543">五十一) 拖曳ActiveX控件... 93</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635544">五十二) 打字游戏... 93</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635545">五十三) 关于禁用宏则不能正确打开的代码之一... 97</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635546">五十四) 关于禁用宏则不能正确打开的代码之二... 99</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635547">五十五) 关于禁用宏则不能正确打开的代码之三... 100</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635548">五十六) 关于禁用自动宏(WordBasic.DisableAutoMacros)的用法探究... 101</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635549">五十七) 三位一体打造复选框新方法... 102</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635550">五十八) 删除所有代码(包括自身). 102</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635551">五十九) 输入选定文件夹位置(相当于取得安装目录位置). 103</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635552">六十) 向NormalTemplate添加自定义右键... 103</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635553">六十一) 使用Automation自动化Word-Excel之一... 105</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635554">六十二) 使用Automation自动化Word-Excel之二... 106</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635555">六十三) 使用Automation自动化EXCEL-WORD之三... 106</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635556">六十四) 程序调用示例... 113</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635557">六十五) 多程序协同交互作业示例... 113</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635558">六十六) WORD与Spreadsheet控件的协同作用... 116</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635559">六十七) 数组运用实例(三则混合运算竖式列表代码). 117</A></P>
<P><A href="http://blog.excelhome.net/editor/scripts/blank.gif#_Toc95635560">六十八) 关于注册表的操作... 121</A></P>
<P><STRONG><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><BR><SPAN style="FONT-FAMILY: Verdana">Word</SPAN>文档下载：</SPAN></STRONG><A href="http://blog.excelhome.net/attachment.asp?FileID=1677"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体"><STRONG>守柔<SPAN style="FONT-FAMILY: Verdana">Word</SPAN>编程代码集<SPAN style="FONT-FAMILY: Verdana">.rar</SPAN></STRONG></SPAN></A><BR></P>]]></description>
</item><item>
<title><![CDATA[〖菜鸟做网站〗动感导航条]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1010.html</link>
<author>chrisfang</author>
<pubDate>2008-5-9 15:33:00</pubDate>
<description><![CDATA[<DIV>&nbsp; 网站开始做的时候，花了不少时间在导航栏上，包括图标的选择，整个导航条的风格设置以及导航链接代码的设置等等。最初完成的是一个水晶风格的导航条，样子如下图所示：</DIV><BR>
<DIV><IMG height=75 alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/56799.61610819.png" width=760 border=0></DIV><BR>
<DIV>&nbsp; 实际做到网页中是分割为11张小图片，然后采用在图片上添加map矩形框的方式添加频道链接。当时也想添加一些动感的效果，也就是可以响应鼠标在各个按钮图标上移动和点击时产生不同的画面显示效果。那时候想到的方法是采用Javascript编程的方式，但自己对javascript一窍不通，而且不方便调试，就暂时搁置了这个想法。</DIV><BR>
<DIV>&nbsp; 前两天在做flash时忽然想到，其实做这种导航条用flash做应该很方便的，一来flash中本身就有“按钮”的元件，二来flash的动作代码更接近于VB，做起来简单一些。</DIV><BR>
<DIV>&nbsp; 在真正下手实践之前，还是在网上搜索了一下前人的经验，但是所看到的一些教程都没有令我满意的，或者说没有让我很轻易就能看明白、很方便就能抓住用flash制作导航条的关键技术步骤的教程。这些文章大都花更多篇幅在按钮的不同显示效果的图片制作方法上，这些高手用flash进行鼠绘和图像编辑的水平确实很高，但我觉得图像制作编辑这么专业的事情交给Photoshop等软件来做更适合些，而flash就是用来安排场景和动作。此外，这些教程所举的示例也比较复杂，有的牵涉到了子菜单，大多都是包含了多个图层多个帧的变化。虽然牵涉内容不少，但是这样短短一篇教程要让初学者明白其中的复杂关系实在比较困难，更难让学习者明白——要制作一个响应鼠标动作的flash导航条究竟有哪些关键技术要点。</DIV><BR>
<DIV>&nbsp; 到头来，我还是靠自己打开flash mx来进行研究，还好，这东西做起来也确实比较简单，一个晚上已经搞清楚，其实关键点很简单，不需要太复杂，一个图层、一个帧、每个按钮一句代码即可完成。下面来记录一下自己的心得，也算是写一个最简化的教程吧。简化的是方法，而不是实现的步骤。</DIV><BR>
<DIV>&nbsp;首先需要筹划一下，导航条在原始状态、鼠标移动到按钮上方时、以及点击时究竟需要显示怎样的效果。从简单的来说，我可以设置两种显示状态，一种就是上面图中所示的原始状态，另一种就是文字呈反白显示，按钮图标更突出显示（从原有的水晶覆盖层下显示改为到覆盖层上方显示）。这就需要准备两套不同显示状态下的图片（如果你愿意，当然也可以只用一套图片，而用flash中编辑图片效果的方式来改变另一种状态下的显示效果）。因为原有的静态导航条是我用Photoshop做的，因此准备两套图片不需要新找素材制作，现成就可以拿来使用。</DIV><BR>
<DIV>&nbsp; 打开flash mx，文件—导入—导入到库，把需要使用的图片都导入到当前的库中，其中一张底图如下：</DIV>
<DIV>去掉了原有静态导航图中的文字部分，文字可以在flash中添加。</DIV><BR>
<DIV><IMG height=75 alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/60191.11529987.png" width=760 border=0></DIV><BR>
<DIV>&nbsp; 其他图片则是各个按钮的原始图。按&lt;F11&gt;可以显示库中的内容，如下图：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/60277.57137666.jpg" border=0></DIV><BR>
<DIV>&nbsp; 接下来，从库中将那张长条形的底图拖入到场景中，并且设置背景文档的大小与底图大小相同：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/60577.32820287.jpg" border=0></DIV><BR>
<DIV>&nbsp; 下面制作各个按钮，插入—新建元件，“行为”选择“按钮”，名字可命名为“首页”，单击确定按钮进入按钮的编辑界面，在上方选中第一帧“弹起”帧（即导航条的原始显示状态），然后将之前导入到库中的代表“首页”的按钮图标拖入到编辑区中，然后添加静态文字，设置字体样式，字体颜色为黑色，将文字和图片的相对位置设置整齐，如下图所示：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/62927.51552592.jpg" border=0></DIV><BR>
<DIV>&nbsp; 然后在上方选中“弹起”帧，右键选择“复制帧”，再选中第二帧“指针经过”帧（即响应鼠标动作的显示状态），右键选择“粘贴帧”，然后在“指针经过”帧的编辑区内将文字颜色改为浅蓝色， 如下图所示：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/38521.73984506.jpg" border=0></DIV><BR>
<DIV></DIV>
<DIV>&nbsp;&nbsp; 再将这个“指针经过”帧复制一下，粘贴到“按下”和“点击”两个帧中。当然，如果你愿意，也可以在“按下”和“单击”两个帧中再制作不同的显示效果，这里我们只采用一种显示变化效果。</DIV><BR>
<DIV>&nbsp; 在上方点击“场景1”切换到场景中，从库中将刚才做的“首页”按钮元件拖入到之前添加的底图之上，如下图所示：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/63350.87826508.jpg" border=0></DIV><BR>
<DIV></DIV>
<DIV>&nbsp; 此时需要做的，是选中这个首页按钮，移动它的位置（可按方向键进行移动），使得那个图标能够和底图上的图标位置相重叠，为了显示“凸显”的效果，按钮和底图的图标位置并不需要完全吻合，而是可以稍加一些偏移量，但需要注意的是，各个按钮的偏移方向和偏移大小应该保持基本一致。下图是显示移动位置后的画面：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/39046.54588311.jpg" border=0></DIV><BR><BR>
<DIV>&nbsp; 接下来，在库的面板中选中“首页”按钮元件，在右键菜单中选择“编辑”，回到按钮的编辑界面，选中第一帧“弹起”帧，选中其中首页的图标图片，删除。为什么要删除？因为这个帧需要显示的是原始状态，即底图上的图标效果，而不需要再显示鼠标指向后的图标。前面之所以保留这个图片就是为了在上一个步骤中方便按钮与底图进行位置定位。</DIV><BR>
<DIV>&nbsp;参照以上方法，可以依次完成其他十个按钮元件的制作，并在场景一中放置到合适的位置。在库中选中按钮元件可在右键菜单中选择“重制”进行元件的复制操作（不知道什么人的翻译，“重制”这个词用的真是别扭。）按钮全部制作完成并且放置好后，如下图所示：</DIV>
<DIV>&nbsp; <IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/40798.15409248.jpg" border=0></DIV>
<DIV><BR>&nbsp; 下面的步骤，是为各个按钮添加网页链接。在场景一的编辑区中选中“首页”按钮，注意选中按钮后，下方的“属性”面板中会显示当前选中的为“按钮”元件，“动作”面板中也会显示“动作—按钮”，表示当前可以在按钮中添加动作代码，这里务必保证是在选中按钮元件的情况下添加代码，否则可能把代码错误地添加到帧代码中，而起不到应有的作用。点击“动作”面板打开代码编辑区，可在此处添加按钮的代码。不熟悉代码的朋友不需要着急，有简单的方法可以添加按钮的网页链接：</DIV>
<DIV>&nbsp;&nbsp;&nbsp;在编辑区的右侧打开“行为”面板，单击加号的图标添加行为“web”—“转到web页”，如下图所示：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/41806.34519276.png" border=0></DIV><BR>
<DIV>&nbsp; 在打开的对话框中输入网页链接地址，例如“club.excelhome.net”，下方打开方式选择“_blank”。如下图：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/41968.2881989.jpg" border=0></DIV><BR>
<DIV>&nbsp;单击确定后就会在代码区域中自动生成链接代码，而“动作”面板中也出现了一条新的事件及其动作，但注意现在的还不是我们所要的代码。继续在“行为”面板中选中“事件”下面的下拉菜单，在菜单里选择“按下时”，这样就可以完成我们所需的按键代码。</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/42212.61621655.png" border=0></DIV><BR>
<DIV>&nbsp; 照此方法操作，依次为其他所有的按钮都添加好链接代码，这个flash导航条就可以完成了。</DIV><BR>
<DIV>&nbsp;如果需要增加效果，可以再为按钮在鼠标经过时添加音效，将音效文件导入到库中，然后编辑按钮元件，选中第二帧“鼠标经过”帧，在下方“属性”面板中的“声音”右侧下拉菜单中选中之前所导入的音效文件即可，如下图所示：</DIV><BR>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-5/42467.9428172.jpg" border=0></DIV><BR><BR>
<DIV>&nbsp; 最后完成的导航条如下（在上面移动鼠标时注意打开音箱哦）：</DIV>
<DIV>
<OBJECT codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 class=" height=75 width=760 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="_cx" VALUE="20108"><PARAM NAME="_cy" VALUE="1984"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="UploadFiles/2008-5/42716.67454964.swf"><PARAM NAME="Src" VALUE="http://blog.excelhome.net/UploadFiles/2008-5/42716.67454964.swf"><PARAM NAME="WMode" VALUE="Opaque"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE="00A000"><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all">
       
<embed src="http://blog.excelhome.net/UploadFiles/2008-5/42716.67454964.swf" width="760" height="75" play="true" loop="true" wmode="Opaque" quality="high" bgcolor="transparent" align="" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</OBJECT></DIV>]]></description>
</item><item>
<title><![CDATA[banner示例2]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1009.html</link>
<author>chrisfang</author>
<pubDate>2008-5-6 22:25:00</pubDate>
<description><![CDATA[<TR><TD width="760px" height="150px">
<TABLE height=150 cellPadding=0 width=760 background=UploadFiles/2008-5/78266.48141044.png border=0 lign="center">
<TBODY>
<TR>
<TD><EMBED align=right src=UploadFiles/2008-5/43616.28329720.swf width=750 height=145 type=application/x-shockwave-flash quality="http://blog.excelhome.net/high" wmode="transparent" loop="false"> <EMBED align=right src=UploadFiles/2008-5/43651.15927816.swf width=750 height=145 type=application/x-shockwave-flash quality="http://blog.excelhome.net/high" wmode="transparent"> </TD></TR></TBODY></TABLE></TD></TR>]]></description>
</item><item>
<title><![CDATA[banner示例1]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1008.html</link>
<author>chrisfang</author>
<pubDate>2008-5-6 21:57:00</pubDate>
<description><![CDATA[<TR><TD background="UploadFiles/2008-5/78266.48141044.png" height="80%" width="80%">
<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0 height=150 width=500 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="_cx" VALUE="13229"><PARAM NAME="_cy" VALUE="3969"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="UploadFiles/2008-5/43616.28329720.swf"><PARAM NAME="Src" VALUE="http://blog.excelhome.net/UploadFiles/2008-5/43616.28329720.swf"><PARAM NAME="WMode" VALUE="Transparent"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="0"><PARAM NAME="Quality" VALUE="AutoHigh"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all">
    
<EMBED src="http://blog.excelhome.net/UploadFiles/2008-5/43616.28329720.swf" width=80% height=80% loop="false" wmode="transparent"></EMBED> 
 </OBJECT></TD></TR>]]></description>
</item><item>
<title><![CDATA[〖菜鸟做网站〗动态banner的制作]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1007.html</link>
<author>chrisfang</author>
<pubDate>2008-5-6 20:47:00</pubDate>
<description><![CDATA[<DIV>&nbsp; 这几天杂事比较多，网站设计工作做的比较零碎，但因为基本功能结构已经大致确定，因此这些零碎的时间刚好用来进行一些美化修饰的工作。好的网站主要靠内容，但分类的清晰和界面的吸引眼球也十分重要。</DIV><BR>
<DIV>&nbsp; 在之前做的首页中，banner部分采用了动画gif文件，使用X3D软件制作了打字机动画效果的3D文字，并且预先叠加了背景画面一同生成gif文件，效果如下图：</DIV><BR>
<DIV><IMG src="http://blog.excelhome.net/UploadFiles/2008-5/76697.66458096.gif"><BR></DIV>
<DIV></DIV>
<DIV>&nbsp; 这样做的方法还算简单，但也有几个不足之处：一是背景图片和动画文字是合在一起的，整个文件较大，有700多K（png格式的背景图片本身只有150K左右），但图像显示质量却相对较低，显得比较粗糙。二是通用性不太强，文字动画和banner背景合在一起，有时要换动画文字或添加其他遮罩动画效果时必须把整个banner.gif重新做过。如果要在首页和内部网页使用不同的动画文字，则需要分别制作多个不同的banner。因此，这种方式的动态banner并不是一种十分理想的方式。</DIV><BR>
<DIV>&nbsp; 容易想到的另一种方式是使用flash来制作动画文字，然后透明地覆盖在背景图片之上。这个flash的制作也有两种方式，一种是包含背景图的，这个方式与上面gif的方法几乎类同，当然不予考虑。另一种方式则是纯文字的动态显示。由于考虑到flash覆盖到图片上时的定位问题，从简化问题的角度来考虑（暂时不去研究flash页面定位的CSS代码），还是可以在制作flash时先导入背景图片，以便使得生成与背景大小相同的flash文件，并且便于文字在图片位置中的放置。</DIV><BR>
<DIV>&nbsp; 动态文字的flash制作很简单，关键在于覆盖于图片上的CSS代码设置。研究了一些代码，最终采用如下代码成功：</DIV><BR>
<DIV>&lt;tr&gt;</DIV>
<DIV>&lt;td&nbsp; width=760px height=150px background="UploadFiles/2008-5/78266.48141044.png"&gt;<BR>&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="<A href="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0">http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0</A>" WIDTH=760 HEIGHT=150&gt; <BR>&lt;PARAM NAME=movie VALUE="http://imgfree.21cn.com/free/flash/14.swf" width="http://blog.excelhome.net/760" height="150"&gt; <BR>&lt;PARAM NAME="quality" VALUE="autohigh"&gt; <BR>&lt;param name="quality" value="high"&gt; <BR>&lt;param name="loop" value="false"&gt;<BR>&lt;EMBED src="http://imgfree.21cn.com/free/flash/14.swf" width="http://blog.excelhome.net/760" height="150" loop="false" wmode="transparent"&gt;&lt;/EMBED&gt; <BR>&lt;param name="wmode" value="transparent"&gt; <BR>&lt;/OBJECT&gt;<BR>&lt;/td&gt;</DIV>
<DIV>&lt;/tr&gt;</DIV><BR>
<DIV>效果如下面这个页面中所示：</DIV>
<DIV><BR><A href="http://blog.excelhome.net/user1/chrisfang/archives/2008/1008.html">user1/chrisfang/archives/2008/1008.html</A><BR><BR></DIV><BR>
<DIV>&nbsp; 接下来，除了动态文字以外，还想要在banner上增加一点动感的遮罩效果，使得整个banner看上去更具活力，还是考虑采用flash的方式，方法也有两种，一种是在做flash的时候把动画文字和遮罩效果做在一起，但这种方法制作上显然不太方便。另外，上面的动态文字设置loop属性为false，而遮罩效果一般要始终循环播放的，两个做在一起也不是太方便协调。还有一种方法当然是在原有一层flash覆盖的基础上，再覆盖一层透明的flash，真的有点喜欢上flash嵌入时的wmode属性了，再多的flash叠加，也可以通透地看到每一层的动画内容。</DIV><BR>
<DIV>&nbsp; 测试成功的代码如下：</DIV><BR>
<DIV>&lt;tr&gt;</DIV>
<DIV>&lt;td width=760px height=150px&gt;<BR>&lt;TABLE cellPadding=0 border=0 lign=center width=760px height=150px background="UploadFiles/2008-5/78266.48141044.png"&gt;<BR>&lt;TBODY&gt;<BR>&lt;TR&gt;<BR>&lt;TD&gt;<BR>&lt;EMBED align=right src="http://imgfree.21cn.com/free/flash/14.swf" type=application/x-shockwave-flash width="http://blog.excelhome.net/740" height="140" loop="false" wmode="transparent" quality="high"&gt;<BR>&lt;EMBED align=right src="http://imgfree.21cn.com/free/flash/17.swf" type=application/x-shockwave-flash width="http://blog.excelhome.net/740" height="140" wmode="transparent" quality="high"&gt;<BR>&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/table&gt;<BR>&lt;/td&gt;</DIV>
<DIV>&lt;/tr&gt;</DIV><BR>
<DIV>&nbsp; 效果如下面这个页面中所示：</DIV><BR>
<DIV><A href="http://blog.excelhome.net/user1/chrisfang/archives/2008/1009.html">user1/chrisfang/archives/2008/1009.html</A></DIV><BR>
<DIV>&nbsp; 对比两段代码，发现两处有意思的地方，一是flash的嵌入方式：</DIV>
<DIV>&nbsp; 后面一种直接采用了&lt;EMBED&gt;&lt;/EMBED&gt;的简单嵌入代码，而前面一种则还加入了Object的flash类别声明，两种方式都可以使用，但有何区别我还不是很清楚。网上的不少介绍flash嵌入代码的文章都使用前面那种复杂的方式，事实上两种不同方式经过html翻译后的代码基本上都会变成这种复杂的代码形式，用Flash软件发布html的时候也可以看到这种样式的代码。两者究竟有什么区别吗？也许针对不同浏览器的兼容性有所不同？我现在还不太清楚。</DIV><BR>
<DIV>&nbsp; 第二点则是EMBED嵌入代码中的align属性设置：</DIV>
<DIV>&nbsp; align属性只是简单的对齐方式的属性设置，但如果不加上这两句属性设置的代码，却会发现两个flash变成了上下并排显示的方式，如下图：</DIV><BR>
<DIV><BR><IMG src="http://blog.excelhome.net/UploadFiles/2008-5/35451.56444747.jpg"><BR></DIV>
<DIV> </DIV>
<DIV>&nbsp; 这一点也让我这个对css代码和html标记一窍不通的菜鸟（从来没有认真学过一丁点html和css+div，做网站一半靠摸索一半靠猜）大惑不解——少一个对齐方式的属性设置竟然就好像加入了&lt;TR&gt;的换行效果？</DIV>
<DIV>&nbsp; 呵呵，这些疑问就留待以后慢慢深入了解吧。</DIV><BR>
<DIV>&nbsp; 有人可能会奇怪，这么一知半解的东西有什么好写的？其实在网上搜索一下也可以发现，很多人发表的所谓技术文章也并非十分严谨，好多也都是些临时起意、一知半解的心得。我不太喜欢系统的、书面化的学习方式，而是更喜欢实际动手操作中学习，也就是所谓的玩家。每天我都会花许多时间在各种我所感兴趣的电脑技术的实践操作中，包括Office软件、包括图形图像处理、包括动画制作、包括音视频制作、包括网站论坛设计等等......每天在“玩”的过程中都会有一些新的思路、新的认识和新的心得等等，这些东西经过消化吸收后一般都能够成为自己所掌握的技能，但有些时候东西来得太多一下子来不及处理吸收还是需要做一些记录，以便于将来的某个时候再翻出来看看。我想用blog作为一个记录的平台应该是不错的选择。</DIV>]]></description>
</item><item>
<title><![CDATA[在Excel 2007的功能区中添加中文选项卡和控件]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1006.html</link>
<author>fanjy</author>
<pubDate>2008-4-30 21:59:00</pubDate>
<description><![CDATA[<P>很多朋友都问，如何在Excel 2007的功能区中添加中文选项卡或者控件，例如自定义的组、按钮等，不过，选项卡或这些控件的标签都应该是中文的。下面我来演示具体的步骤。<BR>在开始之前，先声明Office 2007 CustomUI Editor并不支持中文，因此不能使用这个方便的工具来定制Ribbon，只能使用修改Office 2007文件格式的方法来解决了。<BR><SPAN style="COLOR: #0000cd">步骤1 </SPAN>在桌面上创建一个名为customUI的文件夹。<BR><SPAN style="COLOR: #0000cd">步骤2 </SPAN>打开记事本，并在其中输入下面的XML代码：<BR>&lt;customUI xmlns="<A href="http://schemas.microsoft.com/office/2006/01/customui">http://schemas.microsoft.com/office/2006/01/customui</A>"&gt;<BR>&nbsp; &lt;ribbon&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;tabs&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tab id="http://blog.excelhome.net/rxtabCustom"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label="我自已的选项卡"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insertBeforeMso="TabHome"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;group idMso="GroupFont"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;group idMso="GroupZoom"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;group id="myGroup" label="我的组"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;button id="b1" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageMso="HyperlinkInsert" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size="large" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label="启动网站" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onAction="surf"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;button id="b2" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageMso="HappyFace" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label="微笑图标" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onAction="smile"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;button id="b3" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageMso="FormatPainter" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label="格式刷图标" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onAction="paint"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;button id="b4" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageMso="AutoFilterClassic" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label="筛选图标" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onAction="filter"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/group&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tab&gt;<BR>&nbsp;&nbsp; &lt;/tabs&gt;<BR>&nbsp; &lt;/ribbon&gt;<BR>&lt;/customUI&gt;<BR>该XML文件在Excel的“开始”选项卡前创建了一个名为“我自已的选项卡”的选项卡，并添加了三个组，前两个为Excel内置的组“字体”和“显示比例”，第三个为名为“我的组”的自定义组，其中包括四个自定义的按钮“启动网站”、“微笑图标”、“格式刷图标”和“筛选图标”，并分别定义了onAction属性。<BR><SPAN style="COLOR: #0000cd">步骤3 </SPAN>将该文件命名为customUI并以.xml为扩展名保存在customUI文件夹中，并关闭该文件。在保存时注意选择“编码”下拉框中的编码为UTF-8，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/79697.77188601.jpg" border=0>&nbsp;<BR><SPAN style="COLOR: #0000cd">步骤4 </SPAN>在桌面上新建一个启用宏的Excel文件，并命名为MyCustomUI.xlsm。因为在自定义的XML中，包含了产生回调的onAction属性，所以创建的Excel文件需要启用宏。<BR><SPAN style="COLOR: #0000cd">步骤5 </SPAN>在MyCustomUI.xlsm中，按Alt+F11组合键打开VBE，并插入一个标准模块，添加下面的代码供回调使用：<BR>'Callback for b1 onAction<BR>Sub surf(control As IRibbonControl)<BR>&nbsp;&nbsp;&nbsp; ActiveWorkbook.FollowHyperlink _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address:="<A href="http://www.excelperfect.com">http://www.excelperfect.com</A>", _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewWindow:=True<BR>End Sub<BR>'Callback for b2 onAction<BR>Sub smile(control As IRibbonControl)<BR>&nbsp;&nbsp;&nbsp; MsgBox "您单击了微笑图标!呵呵..."<BR>End Sub<BR>'Callback for b3 onAction<BR>Sub paint(control As IRibbonControl)<BR>&nbsp;&nbsp;&nbsp; MsgBox "您单击了格式刷图标!"<BR>End Sub</P>
<DIV>'Callback for b4 onAction<BR>Sub filter(control As IRibbonControl)<BR>&nbsp;&nbsp;&nbsp; MsgBox "您单击了筛选图标!"<BR>End Sub<BR><SPAN style="COLOR: #0000cd">步骤6 </SPAN>关闭工作簿MyCustomUI.xlsm。<BR><SPAN style="COLOR: #0000cd">步骤7</SPAN> 在MyCustomUI.xlsm图标上单击右键，选择“重命名”，在文件名后添加“.zip”扩展名，使其变为一个压缩文件。如下图所示。<BR>&nbsp;<IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/79759.42293685.jpg" border=0><BR><SPAN style="COLOR: #0000cd">步骤8 </SPAN>双击该压缩文件，打开压缩包，将customUI文件夹拖到该压缩包中，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/79831.03983324.jpg" border=0>&nbsp;<BR><SPAN style="COLOR: #0000cd">步骤9 </SPAN>将压缩包中的_rels文件夹拖至桌面。<BR><SPAN style="COLOR: #0000cd">步骤10 </SPAN>打开桌面中的_rels文件夹，然后用记事本打开其中的.rels文件，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/79943.3996275.jpg" border=0>&nbsp;<BR><SPAN style="COLOR: #0000cd">步骤11 </SPAN>在.rels文件的最后一个&lt;/Relationships&gt;之前，添加下面的XML：<BR>&lt;Relationship Id="customUIRelID" Type="<A href="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility">http://schemas.microsoft.com/office/2006/relationships/ui/extensibility</A>" Target="http://blog.excelhome.net/customUI/customUI.xml"/&gt;<BR><SPAN style="COLOR: #0000cd">步骤12 </SPAN>保存该.rels文件并关闭。<BR><SPAN style="COLOR: #0000cd">步骤13 </SPAN>将修改后的_rels文件夹拖回MyCustomUI压缩包中。如果出现提示，则选择是，覆盖原文件。关闭压缩包。<BR><SPAN style="COLOR: #0000cd">步骤14 </SPAN>将MyCustomUI.xlsm.zip的.zip扩展名删除。<BR><SPAN style="COLOR: #0000cd">步骤15 </SPAN>双击MyCustomUI.xlsm文件，打开工作簿，此时在Excel内置选项卡“开始”的前面添加了一个自定义选项卡，在该选项卡中添加了两个内置组和一个自定义组，如下图所示。<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/80046.81440174.jpg" border=0>&nbsp;<BR>看看吧，都是中文的，成功！</DIV>
<DIV style="COLOR: #0000cd">示例文件下载：<A href="http://blog.excelhome.net/UploadFiles/2008-4/80083.84972956.rar">UploadFiles/2008-4/80083.84972956.rar</A><BR></DIV>]]></description>
</item><item>
<title><![CDATA[〖菜鸟做网站〗奥运倒计时Flash制作]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/1005.html</link>
<author>chrisfang</author>
<pubDate>2008-4-30 20:02:00</pubDate>
<description><![CDATA[<DIV>&nbsp;&nbsp;&nbsp;前段时间，为部门里面做了一个用于信息发布、交流和收集的网站平台。我们公司有内部网站，但信息分类相对比较混乱，很多人上了那个网站都觉得头晕。我们这个部门有两百多号人，平时要做个问卷调查发一轮邮件收集统计都要好几天，也确实有这个必要自己另外搞一个属于部门内部的信息交流平台。</DIV>
<DIV>&nbsp; 下了一个动易系统，对着一窍不通的CSS+DIV和Javascript代码，我一个人吭哧吭哧摸了两星期，总算建成完工。可是领导召集人员开了一个验收评估会，大家却对网站不十分领情，非要求在网站下再挂一个论坛，哎，现在的人都习惯于泡论坛了。</DIV>
<DIV>&nbsp;&nbsp; 好吧，于是又去下了最新的动网8.2来架构论坛。原以为论坛比较简单，不需要改动太多代码，但初次见面还是被动网的“首页调用”给搞晕了。首页、分页面的代码到底在哪里编写调试？难不成要直接用ASPEdit？还好，找了几个关键代码在后台搜索了一番，终于发现“界面风格”中的那些template文件就是网页模板，只是这些模板文件的分类不如动易中的那么清晰明确。</DIV>
<DIV>&nbsp; 论坛的风格想借鉴现成的“蓝雨奥运版”，因为其整体色彩风格和已经完成的主网站还是蛮接近的，不少元素可以拿来现成使用，其他的风格调整则可以留到后期边运行边调整，因为是内部网站和论坛，服务器离我的泊位也就十几步路，更改和调试都还是比较方便的。</DIV>
<DIV>&nbsp; 因为离奥运开幕还有100天左右了（距现在还有99天多），因此想在banner的位置放上一个奥运倒计时的flash，网上找了一下，发现下面这个博客中的flash样子还挺不错，<A href="http://www.kingnare.com/auzn/article.asp?id=83">http://www.kingnare.com/auzn/article.asp?id=83</A></DIV><BR><BR><BR>
<P align=center><IMG src="http://blog.excelhome.net/UploadFiles/2008-4/73748.86387028.png"></P><BR>
<DIV>&nbsp; 但是有一个问题，这个flash的时间来自于互联网上的国际标准时间服务器，对于我们的内部网络来说，连接外网不是那么方便。于是，万事终究还是要靠自己，自己做一个倒计时flash吧，反正眼前已经摆着一个成熟的材料和创意。</DIV><BR>
<DIV>&nbsp; 根据论坛的banner高度，用Photoshop将上面那个图片稍微变化一下，留出中间的时间数字空白位置：</DIV>
<DIV align=center><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/74117.77533421.png" border=0></DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>&nbsp; 打开Flash MX，在第一帧的位置打开上面那张背景图片，如有必要可设置一下背景的大小与图片大小相同，并且移动图片到合适位置。</DIV>
<DIV align=center><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/74735.8375011.jpg" border=0></DIV>
<DIV align=left></DIV>
<DIV align=left>&nbsp; 点击文本工具，在属性中选择“动态文本”，在预留出来的空白位置添加文本框，设置好文字格式，并在“变量”中输入动态文字的变量名称，例如天数可以使用变量“day”，如下图所示：</DIV>
<P align=center><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/75040.03173344.jpg" border=0></P><BR>
<DIV>&nbsp; 照此方法，可再添加小时数、分钟数和秒数三个动态文本框，分别命名变量为“hour”、“min”和“sec”。</DIV>
<DIV>&nbsp; 接下来在动作帧中添加脚本代码，代码其实很简单，甚至如果你对脚本代码一窍不通，也可以在网上找到一些现成的代码。</DIV>
<DIV>&nbsp; 以下内容是第一帧中的代码：</DIV><BR>
<DIV>EndTime=new Date(2008,7,8,20,0,0); //奥运会开幕时间为08年8月8日20点整<BR>NowTime=new Date();<BR>sectime=Math.floor((EndTime.getTime()-NowTime.getTime())/1000);<BR>if(sectime&gt;0)<BR>{<BR>&nbsp; dayt=Math.floor(sectime/(60*60*24));<BR>&nbsp; sectime=sectime-dayt*60*60*24;<BR>&nbsp; hourt=Math.floor(sectime/(60*60));<BR>&nbsp; <BR>&nbsp; sectime=sectime-hourt*60*60;<BR>&nbsp; mint=Math.floor(sectime/60);<BR>&nbsp; <BR>&nbsp; sectime=sectime-mint*60;<BR>&nbsp; sect=sectime;<BR>&nbsp; <BR>&nbsp; day=String(dayt);<BR>&nbsp; hour=String(hourt);<BR>&nbsp; min=String(mint);<BR>&nbsp; sec=String(sect);<BR>} </DIV>
<DIV><BR>其中dayt、hourt、mint和sect四个变量分别对应了四个动态文本变量的时间数值。</DIV>
<DIV align=center><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/75616.03974865.jpg" border=0></DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>&nbsp; 接下来，在第12帧的位置插入一个关键帧（默认12帧为1秒钟），添加脚本代码如下：</DIV>
<DIV align=left>gotoAndPlay(1);</DIV>
<DIV align=left></DIV>
<DIV align=left>&nbsp; 就此flash制作完成，输出生成swf文件即可，效果如下：</DIV>
<DIV align=left>
<OBJECT codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 class=" height=170 width=140 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="_cx" VALUE="3704"><PARAM NAME="_cy" VALUE="4498"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="UploadFiles/2008-5/55721.18382084.swf"><PARAM NAME="Src" VALUE="http://blog.excelhome.net/UploadFiles/2008-5/55721.18382084.swf"><PARAM NAME="WMode" VALUE="Opaque"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE="00A000"><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all">
       
<embed src="http://blog.excelhome.net/UploadFiles/2008-5/55721.18382084.swf" width="140" height="170" play="true" loop="true" wmode="Opaque" quality="high" bgcolor="transparent" align="" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</OBJECT></DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>放到网页上的效果如下：</DIV>
<P align=center><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/75900.94120582.jpg" border=0></P>
<DIV align=left>flash文件：</DIV>
<DIV align=left><A href="http://blog.excelhome.net/"></A><A title=flash文件下载 href="http://blog.excelhome.net/uploadfiles/2008-4/76004.17701511.rar">uploadfiles/2008-4/76004.17701511.rar</A></DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>再附一个原始样式的：</DIV>
<DIV align=left>
<OBJECT codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 class=" height=237 width=143 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="_cx" VALUE="3784"><PARAM NAME="_cy" VALUE="6271"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="UploadFiles/2008-5/55917.96295443.swf"><PARAM NAME="Src" VALUE="http://blog.excelhome.net/UploadFiles/2008-5/55917.96295443.swf"><PARAM NAME="WMode" VALUE="Transparent"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE="00A000"><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all">
       
<embed src="http://blog.excelhome.net/UploadFiles/2008-5/55917.96295443.swf" width="143" height="237" play="true" loop="true" wmode="transparent" quality="high" bgcolor="transparent" align="" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</OBJECT></DIV>]]></description>
</item><item>
<title><![CDATA[微软原版光盘全套!]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2008/1004.html</link>
<author>sunxh</author>
<pubDate>2008-4-14 21:39:00</pubDate>
<description><![CDATA[<SPAN class=bold>微软原版光盘全套!</SPAN><BR><BR>
<DIV class=t_msgfont id=message185414>微软原版光盘全套!<BR><BR>请大家下载后一定要校准iso文件的MD5值， <BR>如果不符合，请删除文件！ <BR><BR>Windows ME 简体中文 <BR>容量：384.38MB <BR>迅雷下载:<A href="http://www.taschool.com/Soft/UploadSoft/winme.iso" target=_blank>http://www.taschool.com/Soft/UploadSoft/winme.iso</A> <BR>（迅雷复制下载） <BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows 2000 SP4 OEM 简体中文 <BR>容量：383MB （402,626,560 字节） <BR>卷标：ZRMPOEM_CN <BR>MD5：599D35359320DB8C58C7F55DA11D3458 <BR>迅雷下载:<A href="http://www.wxsmzx.com/down2/win2k_pro_sp4_CN.iso" target=_blank>http://www.wxsmzx.com/down2/win2k_pro_sp4_CN.iso</A><BR>（迅雷复制下载） <BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows XP Media Center Edition 2005 简体中文版 <BR>简介：经典的2005媒体中心 <BR>卷标：MRMPFPP_CN；MRMSD2_CN <BR>MD5： <BR>MRMPFPP_CN: f8f817c1a2ccd0b94beb186634678876 <BR>MRMSD2_CN : fc3a5eb8fd14bf71e42f221777b8c40a <BR>迅雷下载CD1:<A href="http://bbs.mepoor.net/download/s" target=_blank>http://bbs.mepoor.net/download/s</A> ... /MRMPFPP_CN_CD1.iso<BR>（右键迅雷下载） <BR>迅雷下载CD2:<A href="http://bbs.mepoor.net/download/s" target=_blank>http://bbs.mepoor.net/download/s</A> ... /MRMPFPP_CN_CD2.iso<BR>（右键迅雷下载） <BR>迅雷下载2CD:<A href="ftp://x6x8.com/xtcx/czxt/WinXPMCE2005.rar" target=_blank>ftp://x6x8.com/xtcx/czxt/WinXPMCE2005.rar</A><BR>（右键迅雷下载） <BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows XP Pro 简体中文 <BR>简介：最早的版本，俗称505MB版 <BR>容量：505MB（530,186,240字节） <BR>卷标：WXPFPP_CN <BR>MD5：109e362420790ac40e500d940bff814c <BR>迅雷下载 <BR><A href="http://sh.lm8.cn/Microsoft/Micro" target=_blank>http://sh.lm8.cn/Microsoft/Micro</A> ... HS/WinXPPro505M.iso<BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows XP Pro SP2 VOL 简体中文 (电脑疯子版)推荐：★★★★★ <BR>简介：最好的SP2版 <BR>容量：592MB（621,346,816 字节） <BR>卷标：VRMPVOL_CN <BR>MD5：f455f9a787b620aca7ac89ab47574919 <BR>迅雷下载[1] <BR><A href="http://211.157.99.146/winxp.iso" target=_blank>http://211.157.99.146/winxp.iso</A><BR>迅雷下载[2] <BR><A href="http://www.lwedu.cn/public/gardenplot/cygj/xtrj/VRMPVOL_CNsp2.iso" target=_blank>http://www.lwedu.cn/public/gardenplot/cygj/xtrj/VRMPVOL_CNsp2.iso</A>迅雷下载[3] <BR><A href="ftp://202.113.13.170:10021/pub/W" target=_blank>ftp://202.113.13.170:10021/pub/W</A> ... 0XP/Pro%20SP2%20VOL<BR>简体中文MSDN版/sc_win_xp_pro_with_sp2_vl.ISO?sid=IkmKzD <BR>迅雷下载[4] <BR><A href="http://server.whedu21.com/software/wuqingyong/winxp.iso" target=_blank>http://server.whedu21.com/software/wuqingyong/winxp.iso</A><BR><BR>迅雷下载[5] <BR><A href="ftp://wuyou:wuyou@219.150.11.34/VRMPVOL_CN.iso" target=_blank>ftp://wuyou:wuyou@219.150.11.34/VRMPVOL_CN.iso</A><BR>迅雷下载[6] <BR><A href="ftp://wuyou:wuyou@218.62.89.69/VRMPVOL_CN.iso" target=_blank>ftp://wuyou:wuyou@218.62.89.69/VRMPVOL_CN.iso</A>迅雷下载[7] <BR><A href="http://218.91.232.198:83/system/sp_2.iso" target=_blank>http://218.91.232.198:83/system/sp_2.iso</A><BR>-------------------------------------------------------------------<BR>-------------------------------------------------------------------<BR>Windows XP Pro SP2 VOL 简体中文 北京市ZF版 <BR>简介：最好的SP2版 <BR>容量：592 MB (621,346,816 字节) <BR>卷标：VRMPVOL_CN <BR>MD5：81d7887a2f2cba696defdfc75dac54b4 <BR>迅雷下载 <BR><A href="ftp://219.150.11.34/VRMPVOL_CN.iso" target=_blank>ftp://219.150.11.34/VRMPVOL_CN.iso</A><BR>-------------------------------------------------------------------------------- <BR><BR>Windows XP Pro SP2 VOL 简体中文 上海市ZF版 <BR>简介：最好的SP2版 <BR>容量：592 MB (621,346,816 字节) <BR>卷标：VRMPVOL_CN <BR>MD5：2637e695f43329fc9d66feceee44bf1f <BR>迅雷下载 <BR><A href="http://www.lwedu.cn/public/gardenplot/cygj/xtrj/VRMPVOL_CNsp2.iso" target=_blank>http://www.lwedu.cn/public/gardenplot/cygj/xtrj/VRMPVOL_CNsp2.iso</A><BR><BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows XP Pro SP2 VOL 英文 <BR>容量：579 MB （607,250,432 字节） <BR>卷标：VRMPVOL_EN <BR>MD5：44912ED4AD09F0D2CA5066A16209F717 <BR>迅雷下载 <BR><A href="http://dl.oamo.com:8099/Soft/0508/19/VRMPVOL_EN.iso" target=_blank>http://dl.oamo.com:8099/Soft/0508/19/VRMPVOL_EN.iso</A><BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows XP Home VOL 简体中文 <BR>容量：489MB（513,515,520 字节） <BR>卷标：WXHFPP_CN <BR>MD5：C10C3F88909EF20EEBEB3E6AB21C3B52 <BR>迅雷下载 <BR><A href="http://w.d-dd.org/Soft/ShowSoftDown.asp?UrlID=3&amp;SoftID=2372" target=_blank>http://w.d-dd.org/Soft/ShowSoftDown.asp?UrlID=3&amp;SoftID=2372</A><BR>-------------------------------------------------------------------------------- <BR>Windows 2003 Enterprise SP1 简体中文版 <BR>容量：580.90MB <BR>卷标：ARMEVOL_CN <BR>MD5554650288b755a84285eb3b6d6cd159c <BR>迅雷下载 <BR><A href="ftp://210.51.22.77:8021/Microsof" target=_blank>ftp://210.51.22.77:8021/Microsof</A> ... Y44-3WCFR-M3KVM.iso<BR>迅雷下载 <BR><A href="ftp://ftp1.zhidu.com/xtgj/Window" target=_blank>ftp://ftp1.zhidu.com/xtgj/Window</A> ... N.VOL_zhidu.com.ISO<BR><BR>迅雷下载 <BR>ftp://vipdownload:vipdownload@21 ... Y44-3WCFR-M3KVM.iso<BR>-------------------------------------------------------------------<BR>-------------------------------------------------------------------<BR>Windows 2003 Standard SP1 简体中文版 <BR>容量：579.51MB <BR>卷标：ARMSVOL_CN <BR>MD5344869e699d20530f2a86481542e43f7 <BR>迅雷下载 <BR><A href="ftp://ftp1.zhidu.com/xtgj/Window" target=_blank>ftp://ftp1.zhidu.com/xtgj/Window</A> ... N.VOL_zhidu.com.ISO<BR><BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows Server 2003 R2 Ent With Sp2 CHS VOL [简体中文MSDN原版] <BR>发布时间：2007年4月27日 23：06：15（UTC） <BR>容量：544.87 MB <BR>MD5值:1017479075166ba7dd762392f8274fe3 <BR>SHA1值:d0dd2782e9387328ebfa45d8804b6850acabf520 <BR>FlashGet专用高速下载地址: <BR><A href="http://down.x6x8.com/soft/downlo" target=_blank>http://down.x6x8.com/soft/downlo</A> ... ownid=3&amp;id=1284 <BR><BR>网通下载地址（右键迅雷下载）: <BR><A href="http://down.x6x8.com/soft/downlo" target=_blank>http://down.x6x8.com/soft/downlo</A> ... ownid=2&amp;id=1284 <BR><BR>微软下载地址CD1（IMG格式） <BR>（右键迅雷下载）: <BR><A href="http://download.microsoft.com/do" target=_blank>http://download.microsoft.com/do</A> ... 84C9B/X13-13892.img <BR>不包含R2组件的可升级企业版CD KEY：（不装CD2 R2组件的用此号即可） <BR>DF74D-TWR86-D3F4V-M8D8J-WTT7M <BR>JB88F-WT2Q3-DPXTT-Y8GHG-7YYQY <BR>JCHKR-888KX-27HVK-DT88X-T767M <BR>JCGMJ-TC669-KCBG7-HB8X2-FXG7M <BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows Server 2003 R2 Ent With Sp2 CHS VOL [R2安装盘MSDN原版] <BR><BR>发布时间：2007年4月27日 23：06：15（UTC） <BR><BR><BR>注： <BR>此CD2为单独的R2安装盘，没有需要可以不用安装 <BR><BR><BR>容量：89.75 MB <BR>MD5值:9160be18a627692c996bd3ad22fb7dbd <BR>SHA1值:4b364e848fcc59762dddced1493248e2896ee033 <BR>FlashGet专用高速下载地址: <BR><A href="http://down.x6x8.com/soft/downlo" target=_blank>http://down.x6x8.com/soft/downlo</A> ... ownid=3&amp;id=1285 <BR><BR>网通下载地址: <BR>（右键迅雷下载）<A href="http://down.x6x8.com/soft/downlo" target=_blank>http://down.x6x8.com/soft/downlo</A> ... ownid=2&amp;id=1285 <BR><BR><BR>微软下载地址CD2（IMG格式） <BR>（右键迅雷下载）:<A href="http://download.microsoft.com/do" target=_blank>http://download.microsoft.com/do</A> ... 84C9B/X13-13895.img <BR>可升级的简体中文vol版windows 2003 R2企业版密钥: <BR>MDGJK-PF6YQ-PD8DJ-RFQVM-7WKWG <BR>QV9XT-CV22K-D8MGR-4MD86-8MYR6 <BR>VB96B-VFG8F-74XWJ-W67Q7-8X82B <BR>M6F6D-VFQWH-CGWRB-RC7JR-VCV4W <BR>C49DP-CPHCB-MDGP3-MG334-W2V4W <BR>DR4B3-66VPQ-CK3VB-Y3BPY-2CJ2G <BR>JYCJX-CHTJX-RGH97-86WM9-RB6B6 <BR>MVDYF-X7FBW-H29XT-TCKWW-RBYRT <BR>BXJXT-9F88V-XXQWV-3MWMG-FYDJT <BR>Windows Server 2003 R2 的新增内容 <BR><BR><BR>Windows Server 2003 R2 扩展了 Windows Server 2003 操作系统，在轻松地集成到现有 Windows Server 2003 环境的同时，提供了一种更高效的方法，来管理和控制对本地和远程资源的访问。Windows Server 2003 R2 提供了一个可伸缩的、安全性更高的 Web 平台，与基于 UNIX 的系统进行无缝的集成，并实现了新的应用方案，包括简化的分支机构服务器管理、改善的身份和访问管理以及更高效的存储管理。 Windows Server 2003 R2 还提供了新的动态授权许可，允许客户获得服务器实物本身以外的更多价值。本页介绍了 Windows Server 2003 R2 的优点、新增功能和改进功能。 <BR>MHFT3-YGHV4-G86P4-KQXJ3-GYH4W <BR><BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>Windows Vista x86 简体中文旗舰版 <BR>容量：2.43GB（2,613,229,568 字节） <BR>MD5 4AC79C50B11BCB2F4FA6A5660084ED748BCA7254 <BR>迅雷下载 <BR><A href="http://beautiful38.vicp.net/vist" target=_blank>http://beautiful38.vicp.net/vist</A> ... 20ChnSimp%20DVD.mdf<BR><BR>迅雷下载 <BR><A href="http://visin.hooke.cn/attachment" target=_blank>http://visin.hooke.cn/attachment</A> ... a32%40202.96.86.22% <BR><BR>2Fcn_windows_vista_x86_dvd_X12-59648.iso <BR>迅雷下载 <BR><A href="http://www.lydisk.com//vista59648.iso.rar" target=_blank>http://www.lydisk.com//vista59648.iso.rar</A> <BR><BR>迅雷下载 <BR><A href="http://netcat.cn/software/iso/Mi" target=_blank>http://netcat.cn/software/iso/Mi</A> ... 6_dvd_X12-59648.iso<BR>迅雷下载 <BR><A href="http://222.73.10.85/host/vista.rar" target=_blank>http://222.73.10.85/host/vista.rar</A><BR>迅雷下载 <BR><A href="ftp://down.05sun.com/bigdown/cn_" target=_blank>ftp://down.05sun.com/bigdown/cn_</A> ... 6_dvd_X12-59648.iso<BR>-------------------------------------------------------------------<BR>-------------------------------------------------------------------<BR>Windows Vista x64简体中文旗舰版 <BR>容量：3.29GB（3,536,730,112 字节） <BR>MD5 4B7ED66850BB34C818EB282DCFB60C622B411C10 <BR>迅雷下载 <BR><A href="ftp://www.05sun.com/bigdown/cn_w" target=_blank>ftp://www.05sun.com/bigdown/cn_w</A> ... 4_dvd_X12-63216.iso<BR>迅雷下载 <BR><A href="http://bd.05sun.com/bg/cn_windows_vista_x64_dvd_X12-63216.iso" target=_blank>http://bd.05sun.com/bg/cn_windows_vista_x64_dvd_X12-63216.iso</A><BR>-------------------------------------------------------------------<BR>-------------------------------------------------------------------<BR><BR>三个“所谓”xp原版的数据： <BR><BR><BR>★【CDIMAGE2.47封装】(592M)★MD5:2637e695f43329fc9d66feceee44bf1f <BR>注:Microsoft_WindowsXP_Pro_SP2_VLK_CN_0904_批量授权用户下载版.iso大客户授权上海ZF版XP集成sp2 <BR>★★★★★特征： <BR>1.镜像*.iso文件用winiso软件打开显示609兆，每一个文件的创建日期是2004-8-17　12：00； <BR>2.用winrar解压后，统计数据为：文件夹160个，6897个文件，共616.71MB； <BR>3.用winmd5 1.1显示MD5:2637e695f43329fc9d66feceee44bf1f； <BR>4.用文件比较软件比较这里的三个版本显示为：文件不同。 <BR>-------------------------------------------------------------------------------- <BR>-------------------------------------------------------------------------------- <BR>★【CDIMAGE2.52封装】(592M)★MD5:81d7887a2f2cba696defdfc75dac54b4 <BR>注:Microsoft_WindowsXP_Pro_SP2_VLK_CN_1008_MSDN付费下载版.iso <BR>★★★★★特征： <BR>1.镜像*.iso文件用winiso软件打开显示609兆，每一个文件的创建日期是2004-8-17　12：00； <BR>2.用winrar解压后，统计数据为：文件夹160个，6875个文件，共609.84MB; <BR>3.用winmd5 1.1显示MD5:81d7887a2f2cba696defdfc75dac54b4; <BR>4.用文件比较软件比较这里的三个版本显示为：文件不同。 <BR>-------------------------------------------------------------------------------- <BR>★【CDIMAGE2.52封装】(592M)★MD5：f455f9a787b620aca7ac89ab47574919 <BR>注:sc_win_xp_pro_with_sp2_vl.ISO <BR>★★★★★特征： <BR>1.镜像*.iso文件用winiso软件打开显示609兆，每一个文件的创建日期是2004-8-17　12：00； <BR>2.用winrar解压后，统计数据为：文件夹160个，6875个文件，共609.84MB； <BR>3.用winmd5 1.1显示MD5:f455f9a787b620aca7ac89ab47574919； <BR>4.用文件比较软件比较这里的三个版本显示为：文件不同。</DIV><BR style="http://blog.excelhome.net/CLEAR: both">]]></description>
</item><item>
<title><![CDATA[四本优秀的ExcelVBA图书简介]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1003.html</link>
<author>fanjy</author>
<pubDate>2008-4-13 16:13:00</pubDate>
<description><![CDATA[<DIV><STRONG>《Excel 2007 Power Programming with VBA》<BR><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/58554.6991756.jpg" border=0></STRONG></DIV>
<DIV>这是《Excel 2003高级VBA编程宝典》的升级版，是一本经典的VBA编程图书。该书知识覆盖面广，面向从初学者到高级用户的不同人群。其2003版由电子工业社引进并出版，但2007版是否已引进还不得而知。<BR><STRONG>《Excel 2007 VBA Programmer’s Reference》</STRONG></DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/58594.61963796.jpg" border=0><BR>这也是一本经典的VBA编程图书，好像从Excel 2000开始就有了这本书，有Excel 2000、Excel 2002、Excel 2003和Excel 2007版。该书面向从初级到高级用户的不同人群，知识覆盖面广，包含了其他书中找不到的一些知识并有详细介绍，例如Open XML文件格式、RibbonX、类模块的详细技术介绍、高级数据库操作、Windows API详细介绍及应用等，书后的附录包含了与VBA帮助系统等价的详细的对象模型介绍，条理清晰并附有大量的示例。总的来说，该书更像是一本VBA百科式的图书手册，极具参考价值。<BR>与《Excel 2003高级VBA编程宝典》不同的是，该书在国内好像未引进过。不过，其2007版已由人民邮电出版社引进，但何时出版与广大读者见面还是一个未知数。<BR><STRONG>《Professional Excel Development》</STRONG></DIV>
<DIV><IMG height=125 alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/58638.41186060.jpg" width=125 border=0><BR>一本面向超高级Excel VBA用户的图书，从专业开发的角度讲解Excel VBA开发。相信对于有一定VBA基础，并且想将VBA提高到一定层次的朋友来说，坚持看来本书并实践，VBA水平绝对会显著提升。但本书不适合初学者，要学习本书，请至少应熟悉Excel操作及具备VBA编程基础。<BR>该书已由电子工业出版社引进并出版。<BR><STRONG>《Pro Excel 2007 VBA》</STRONG></DIV>
<DIV><IMG height=130 alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/58741.8815961.jpg" width=130 border=0><BR>不像其他讲解VBA的图书，本书篇幅不长，但内容组织和讲述独特。作者通过Access和Visual Basic类来讲述Excel VBA，许多示例展示如何处理外部数据源，并且作者在代码中应用了面象对象的实践。<BR>本书假定读者没有特定的VBA知识背景，但是具有编程经验的中级到高级用户。许多示例以宏录制器开始，然后整理并扩展录制的代码，这是一种结合实际的方式。<BR>除了宏录制器外，本书的第一部分介绍了VBA的其他方面，讨论了安全设置、VBA编程环境、标准代码模块、类模块、用户窗体、以及面向对象编程。<BR>接着，该书详细介绍使用DAO和ADO将数据导入Excel的示例。许多示例也介绍了SQL，展示了如何创建类使数据处理更健壮。数据技术的介绍以XML结束，首先是作为数据源，然后是作为修改Excel 2007功能区的工具。<BR>有些示例展示了如何使用窗体来进行简单的数据输入和更详细的向导，向导操作被一系列类控制。有一章是使用VBA处理图表，另一章是如何对数据透视表编程。<BR>本书最后介绍了代码调试和错误处理、Excel与其他Office应用程序整合，以及使用ActiveX和.NET技术。<BR>该书强调面向对象的编程实践，即将出版发行，相信这本书国内肯定还未引进。<BR></DIV>]]></description>
</item><item>
<title><![CDATA[RibbonX：自定义Office 2007功能区阅读笔记]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1002.html</link>
<author>fanjy</author>
<pubDate>2008-4-10 18:23:00</pubDate>
<description><![CDATA[<DIV>最近，在阅读一本新书：《RibbonX：Customizing the Office 2007 Ribbon》。由于自已在Office 2007出现之初就对Ribbon产生了极浓厚的兴趣，因此，这本书的出现满足了我的兴趣和愿望。下面是该书的封面。</DIV>
<DIV><IMG height=130 alt="" src="http://blog.excelhome.net/UploadFiles/2008-4/66434.72898153.jpg" width=130 border=0></DIV>
<DIV>在这里，记录下自已阅读该书的学习笔记。</DIV>
<DIV>EH论坛链接：<A href="http://club.excelhome.net/dispbbs.asp?boardID=113&amp;ID=311972&amp;page=1&amp;px=0">http://club.excelhome.net/dispbbs.asp?boardID=113&amp;ID=311972&amp;page=1&amp;px=0</A></DIV>
<DIV>在该贴中，将陆续贴出学习笔记的详细内容。</DIV>
<DIV>完美Excel博客：</DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——介绍Office用户界面" href="http://www.excelperfect.com/2008/04/06/ribbonxdevelope0/" rel=bookmark>RibbonX：自定义Office 2007功能区——介绍Office用户界面</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——访问UI定制层（一）" href="http://www.excelperfect.com/2008/04/10/ribbonxdevelope/" rel=bookmark>RibbonX：自定义Office 2007功能区——访问UI定制层（一）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——访问UI定制层（二）" href="http://www.excelperfect.com/2008/04/15/ribbonxdeveoper22/" rel=bookmark>RibbonX：自定义Office 2007功能区——访问UI定制层（二）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——理解XML（一）" href="http://www.excelperfect.com/2008/04/18/ribbonxdeveloper31/" rel=bookmark>RibbonX：自定义Office 2007功能区——理解XML（一）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——理解XML（二）" href="http://www.excelperfect.com/2008/04/19/ribbonxdeveloper32/" rel=bookmark>RibbonX：自定义Office 2007功能区——理解XML（二）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——VBA基础（一）" href="http://www.excelperfect.com/2008/04/19/ribbonxdeveloper41/" rel=bookmark>RibbonX：自定义Office 2007功能区——VBA基础（一）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——VBA基础（二）" href="http://www.excelperfect.com/2008/04/19/ribbonxdeveloper42/" rel=bookmark>RibbonX：自定义Office 2007功能区——VBA基础（二）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——回调（一）" href="http://www.excelperfect.com/2008/04/19/ribbonxdeveloper51/" rel=bookmark>RibbonX：自定义Office 2007功能区——回调（一）</A></DIV>
<DIV><A title="Permanent Link to RibbonX：自定义Office 2007功能区——回调（二）" href="http://www.excelperfect.com/2008/04/19/ribbonxdeveloper52/" rel=bookmark>RibbonX：自定义Office 2007功能区——回调（二）</A></DIV><BR><BR>]]></description>
</item><item>
<title><![CDATA[阅读程序，学习程序开发的关键环节]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1001.html</link>
<author>fanjy</author>
<pubDate>2008-3-25 19:16:00</pubDate>
<description><![CDATA[<DIV>在CSDN博客上的一篇文章，很赞同其观点，因此辑录于此。</DIV>
<DIV><SPAN style="COLOR: #0000cd">-------------------------------------------------------------------------------</SPAN></DIV>
<DIV>高明的程序员善于通过阅读程序来发现有价值的东西，并不断地提高自已的水平。 </DIV>
<br/>
<DIV style="TEXT-INDENT: 21pt">我们很多的学习都是从阅读开始，学一门语言，学一门技术，一般都会先选择好的老帅或好的教材，去听，去阅读，然后慢慢地理解并掌握，阅读在我们的学习与生活可以说无处不在，阅读是我们学习知识增长见识扩大视野的关键环节。</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 温伯格大师在《程序开发心理学》里认为程序开发也是写作的一种形式，它与其它的写作形式没有什么两样。众所周知，作家能写出好书，大都博览群书，可以说阅读是提高写作水平的一条重要途径，同样的，程序员学习程序开发，阅读程序对水平的提高也有很大的促进作用，程序员通过阅读程序，可以发现与总结出有价值的东西，比如一段代码之所以如此编写，是由各种因素决定的，有的是因为计算机的局限，有的是因为程序语言的局限，有的是因为程序员本身的水平，而有的则可能是因为标准规范的约束，通过仔细地阅读程序，你会发现并理解到这些因素，并从中受益匪浅。</DIV>
<br/>
<DIV style="TEXT-INDENT: 21pt">那么，我们应如何来阅读程序呢？</DIV>
<br/>
<DIV style="TEXT-INDENT: 21.75pt">温伯格不愧为大师级的人物，不仅知识渊博，而且字里行间还非常地幽默风趣，他认为“阅读程序与阅读小说是不一样的，阅读程序的最好方法并非是依次从头到尾。程序不像迷语，我们无法从末尾几页找到答案，也不像一本引人入胜的书籍，只需直接翻到褶皱最多的那几页，我们就能找到最精彩的片断。”简而言之，程序中最好的部分所出现的位置是不确定的，因此我们在阅读程序时，最好逐一考察研究每一段代码，搞清楚每一段代码的来龙去脉，理解每一段代码在程序中所起的作用，“进而形成一个虚拟的程序结构，并以此为基础来进行阅读”。</DIV>
<DIV style="TEXT-INDENT: 21.75pt">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 21.75pt">我开始学习VC++的时候，每学到一个知识点，先从理解概念开始，然后找一段别人已写好的程序来阅读，理解每一行代码在整个程序中的作用，如果这行代码错了会有什么样的结果，如果没有这行代码又会怎么样，阅读后再去上机操作，验证自已的理解是否正确，这样学习虽然较花时间，但有所收获，有的初学者很急躁，不到一个月的时间，就吹牛自已看了多少本书，但学到的只是一些表皮的知识，没有什么用的，还不如认真地钻研一本书，效果可能更加显著，其实你也会慢慢发现，书店里的书虽然多如牛毛，但都大同小异，这很是悲哀！</DIV>
<DIV style="TEXT-INDENT: 21.75pt">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 21.75pt">综上所述，我们需要理解点：一是程序被编写成什么样子，取决于众多的因素；二是阅读程序不能象阅读小说，程序中精彩的部分出现的位置是不确定。另外，建议同行们善于通过阅读程序来学习程序开发，每学一个知识点，先去阅读与分析现有的程序，相信对你的学习是有促进作用的。</DIV>
<DIV style="TEXT-INDENT: 21.75pt">&nbsp;</DIV>
<DIV style="TEXT-INDENT: 21.75pt">原文请见：<A href="http://blog.csdn.net/bm1408/archive/2007/06/26/1667755.aspx">http://blog.csdn.net/bm1408/archive/2007/06/26/1667755.aspx</A></DIV>]]></description>
</item><item>
<title><![CDATA[技术图书非常难写]]></title>
<link>http://blog.excelhome.net/user1/fanjy/1000.html</link>
<author>fanjy</author>
<pubDate>2008-3-25 13:05:00</pubDate>
<description><![CDATA[<DIV>很好的一篇文章，在CSDN博客上摘录的，辑录在此，供启发思路。</DIV>
<DIV>原文请见：<A href="http://blog.csdn.net/LoveCherry/archive/2008/03/25/2215740.aspx">http://blog.csdn.net/LoveCherry/archive/2008/03/25/2215740.aspx</A></DIV>
<DIV><SPAN style="COLOR: #0000cd">---------------------------------------------------------------------------------------------------------</SPAN></DIV>
<DIV><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">网友问我，为什么《<SPAN lang=EN-US style="FONT-SIZE: 10pt">ASP.NET</SPAN>第一步》的后续作品迟迟没有动笔。其实，我关于《第二步》的内容，我早已确定了大致的方向，但是有了《第一步》的写作经历和一些反馈之后，我深深体会到了技术书籍是非常难写的。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><?XML:NAMESPACE PREFIX = O /><O:P></O:P></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt"></SPAN>
<P class=MsoNormal style="LINE-HEIGHT: 150%"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'"><SPAN style="FONT-SIZE: 10pt; mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">首先来说说定位于初学者的书，我见过的一些类型有：<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l3 level1 lfo1"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">以一个完善的示例作为卖点，初学者认为可以通过这个书达到编写这样一个示例的水平。其实不然，书中描述了完成整个示例的过程，但是看过之后发现脑子里没有留下什么，照抄都完成不了，更不要说举一反三了。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l3 level1 lfo1"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">一切演示都是使用<SPAN lang=EN-US style="FONT-SIZE: 10pt">Hello World</SPAN>类型的示例，书佷容易看懂。但是看过之后，要自己实践却没有头绪，因为初学者只明白了最简单的实现，并不知道从哪里获悉其它知识点。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">我认为，面向初学者的书应该有几个要点：<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">一定要说清楚开发环境的构建，并一步一步让初学者在这个环境中构建一个不复杂而又有代表性的实用程序（<SPAN lang=EN-US style="FONT-SIZE: 10pt">Hello World</SPAN>没有用）。可以不说为什么这么做，但是一定要让初学者看到最终结果，给予足够信心。走出第一步往往是最困难的。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">围绕知识点的示例可以是佷简单的，但是之后要提到知识点相关的一些扩展知识，或者开发时需要注意的地方，避免初学者走弯路，并且给初学者进阶的指引。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo2"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">除了知识点的介绍，还要教会初学者如何自己来解决问题，以及开发过程中的一些技巧，并且尽可能多提供开发经验相关的东西。知识点可以<SPAN lang=EN-US style="FONT-SIZE: 10pt">MSDN</SPAN>上查，但是技巧和经验很难查到，这些东西比列一个<SPAN lang=EN-US style="FONT-SIZE: 10pt">MSDN</SPAN>中的成员表格更具有价值。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">其实，面向初学者的书倒还好，面向有经验的希望提高的开发人员的书就非常难写了，有很多所谓的高级编程：<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l4 level1 lfo3"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">有的是知识点的堆积，面面俱到的一本厚书，堆积了大量实现上的知识点（如何去实现），而不是剖析内部原理。这样的书称不上高级，顶多叫大全。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l4 level1 lfo3"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">有的确实是在剖析原理，可惜代码实在太多，文字实在太少。读者只能看了代码望而却步，却从中获取不到什么有价值的信息。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l4 level1 lfo3"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">介绍了很多高级特性，企业级的应用方案。但是我们知道，一个方案在自己应用的时候就完全不是官方文档说的这么简单了，还设计到安全、效率等。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">我觉得，此类书应该具有如下特性：<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l2 level1 lfo4"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">内容选择上要选大家不知道的内容，或基于某个知识点上扩展的内容，或自定义<SPAN lang=EN-US style="FONT-SIZE: 10pt">/</SPAN>扩展某个组件。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l2 level1 lfo4"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">只提到怎么使用某个高深的特性却不说其工作原理，实在有点愧对高级两个字。但解释工作原理不等于搬出一大堆代码，最好是以图文的形式让读者直接理解其原理。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l2 level1 lfo4"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">可以深入剖析知识点，但是代码尽量简单来体现知识点，而不是把一些无关的代码参杂在一起，徒增阅读难度。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l2 level1 lfo4"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">一定要把知识点在实际应用时候会遇到的问题，以及最佳实践介绍给读者。官方的一些代码示例仅仅是示例，它们没有考虑安全、效率等很多方面，照搬这些示例用于开发会遇到很多问题。<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">我把《第二步》的定位在面向初学者和有经验的开发人员之间，也就是阅读了《第一步》的读者。希望给予读者的最佳体验是：<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo5"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">阅读后感叹“还可以这样做，我怎么就没有想到呢？”——技巧<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo5"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">阅读后觉得已经了解了原先不知道的一些组件背后的工作方式和原理。——剖析<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoListParagraph style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo5"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="FONT-SIZE: 10pt; mso-list: Ignore">q<SPAN style="FONT: 10pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">阅读后已经有能力制作一个完整的企业级的系统。——经验<SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'">对于<SPAN lang=EN-US style="FONT-SIZE: 10pt">C#</SPAN>、<SPAN lang=EN-US style="FONT-SIZE: 10pt">ASP.NET</SPAN>控件这些老内容我希望能带给读者更多技巧、原理上的知识，而不是如何去使用，对于<SPAN lang=EN-US style="FONT-SIZE: 10pt">WCF</SPAN>、<SPAN lang=EN-US style="FONT-SIZE: 10pt">LINQ</SPAN>等内容，我希望带给读者更多企业级实际应用中的模式以及开发时常见问题的解决方案，而不是如何去用它们实现最简单的东西。<BR><SPAN lang=EN-US style="FONT-SIZE: 10pt"><O:P>&nbsp;&nbsp;&nbsp;&nbsp;注意，这不是为《第二步》打广告，佷可能没有《第二步》，此文只是希望大家对技术图书的现状进行讨论。很多人在骂国人写的书看不得，其实我觉得老外写的书也有很大一部分是看不得的，国人写出精品不是不可能，但有一点需要铭记，就是不要写“好卖”的书，而是写“对读者有用”的书。</SPAN></SPAN></P></O:P></DIV>]]></description>
</item><item>
<title><![CDATA[乔布斯在斯坦福的演讲]]></title>
<link>http://blog.excelhome.net/user1/chrisfang/archives/2008/999.html</link>
<author>chrisfang</author>
<pubDate>2008-3-20 9:15:00</pubDate>
<description><![CDATA[<DIV>&nbsp; 很久没有更新我的博客了，这一年来的时间几乎都耗在写书上，甚至包括长假和春节。所以也积累很多事情需要现在去处理，比如最近做的部门网站，已经拖了好两个月了，现在限期两个礼拜内做完。这几天做图片，调试代码，忙到眼睛发花。</DIV>
<DIV>&nbsp; 但是，今天早上收到了一封朋友转来的邮件，让我看了很有感触，不得不抽出一点时间贴到博客上来，留个纪念，也是和大家分享一下。</DIV>
<DIV>&nbsp; 斯蒂夫·乔布斯(Steve Jobs)，苹果的CEO，又是一个辍学的天才，也是我最喜爱和崇拜的人物之一，如果此生能有机会在他的手下或公司里干活，那真是太幸福了。和盖茨比较，乔布斯显然是一个技术天才，同时也是一个天生的完美主义的、理想主义的、充满艺术灵感的设计师，而盖茨只能算作一个商业天才。</DIV>
<DIV>&nbsp; 我这几天干的很多工作其实都是与乔布斯和他的苹果有关的，比如制作水晶风格的按钮、iphone手机的图框、一些漂亮的艺术字体等等，许多漂亮的元素都出自于他的创作。我是学通信的，对于平面设计来说完全是外行，但是对于苹果的喜爱让我越来越多的将注意力放到了一些平面设计工作中。比如大学里稍微玩过一些的Photoshop，现在终于下决心花时间研究学习一下了。</DIV>
<DIV>&nbsp; 下面的这篇演讲稿来自于乔布斯在斯坦福大学所做的毕业演讲，现在贴出来与大家分享：</DIV><BR>
<DIV>**************************************************************************</DIV><BR>
<DIV>&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;&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; 《求知若饥，虚心若愚》</DIV>
<DIV>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Stay Hungry, Stay Foolish)</DIV>
<DIV><BR>演讲人/ Steve Jobs，苹果CEO，斯坦福毕业典礼</DIV><BR>
<DIV>&nbsp; 今天，很荣幸来到各位从世界上最好的学校之一毕业的毕业典礼上。我从来没从大学毕业过，说实话，这是我离大学毕业最近的一刻。今天，我只说3个故事，不谈大道理，3个故事就好。</DIV>
<DIV>第1个故事，是关于人生中的点点滴滴如何串连在一起。<BR>　　我在锐意得学院（Reed College）待了6个月就办休学了。到我退学前，一共休学了18个月。那么，我为什么休学？（听众笑）这得从我出生前讲起。<BR>　　我的亲生母亲当时是个研究生，年轻的未婚妈妈，她决定让别人收养我。她强烈觉得，应该让已经毕业的人收养我，所以我出生时，她就准备让一对律师夫妇收养我。但是这对夫妻到了最后一刻反悔了，他们想收养女孩。所以我必须等待收养名单上的另一对夫妻，也就是我后来的养父母。有一天半夜，他们接到一个电话，“有一名意外出生的男孩，你们要认养他吗”，他们回答“当然要”。但是我的生母发现，我的养母从来没有大学毕业过，我现在的爸爸则连高中毕业文凭也没有，所以她拒绝在送养文件上做最后签字。直到几个月后，我的养父母保证将来一定会让我上大学，我生母的态度才软化。 <BR>　　17年后，我上大学了。但是当时我无知地选了一所学费几乎跟死蛋孵（斯坦福）的一样<BR>贵的大学（听众笑），我那工人阶级的父母将所有积蓄都花在我的学费上。6个月后，我看不出念这个学院的价值何在。那时候，我不知道这辈子要干什么，也不知道念大学能对我有什么帮助，只知道我为了念这个书，花光了我父母这辈子所有积蓄。所以，我决定休学，相信船到桥头自然直。<BR>　　当时这个决定看来相当可怕，可是现在看来，那是我这辈子做过的最棒的决定之一。（听众笑）<BR>　　我休学之后，我再也不用上我没兴趣的必修课了，我把时间拿去听那些我有兴趣的课。这一点也不浪漫。我没有宿舍，所以我睡在友人家里的地板上，靠着回收空可乐罐的5分钱退费买吃的。每个星期天晚上，我得走7哩路，绕过大半个镇去印度教的Hare Krishna神庙吃顿好料，我喜欢Hare Krishna神庙的好吃的。<BR>　　我追随着我的好奇心和直觉，我的大部分投入，后来都成了无价之宝（And much of what I stumbled into by following my curiosity and intuition turned out to be priceless later on）。举个例子。当时锐意得学院有着大概是全国最好的书写教育，校园里的每一张海报上每一个抽屉标签上，都是美丽的手写字。因为我休学了，可以不照正常选课程序来，所以我跑去上书写课。我学了serif 与sanserif体，学到在不同字母组合间变更字间距，学到活字印刷伟大的地方。书写的美好、历史感、艺术感是科学所不具备的，我觉得这很迷人。<BR>　　我没预期过学这些东西能在我的生活中起些什么实际作用，不过10年后，当我在设计第1台麦金塔电脑时，我想起了过去所学的东西，把这些东西都设计进了麦金塔，这是第1台能印刷出漂亮东西的电脑。如果我没能沉溺于这样一门课，麦金塔可能就不会有多重字体和等比例间距字体。Windows抄袭了麦金塔的使用方式（听众鼓掌大笑）。因此，如果当年我没有休学，没有去上这门书写课，大概所有的个人电脑都不会有这些东西，印不出现在我们看到的漂亮的字。<BR>　　当然，当我还在大学的时候，不可能把这些点点滴滴预先串连在一起，但10年后的今天回首，一切显得非常清楚。我再说一次，你不可能把点点滴滴事先串连起来，只有回首往事，你才能把它们串在一起（you can''t connect the dots look-ing forward; you can only connect them looking backwards）。所以你得相信，眼前你经历的种种，将来多少会连结在一起。你得信任某个东西，直觉也好，命运也好，生命也好，或者业力。这种作法从来没让我失望，我的人生因此变得完全不同。（很多工作停下来，喝了口水）<BR>　　我的第2个故事，有关爱和失去。<BR>　　我很幸运年轻时就发现了自己爱做什么事。我20岁时，跟Steve Wozniak在我爸妈的车库里开始了苹果电脑的事业。我们拚命工作，苹果电脑在10年间从一间车库里的两个小伙子扩展 ! 成了一家员工超过4000人市价20亿美金的公司。在那事件之前1年推出了我们最棒的作品——麦金塔（Macintosh）电脑，那时我才刚开始30岁；然后，我被解雇了。<BR>　　我怎么会被自己创办的公司给解雇了？（听众笑）<BR>　　嗯，当苹果电脑成长后，我请了一个我以为在经营公司上很有才干的家伙来，他在头几年也确实干得不错。可是我们对未来的愿景不同，最后只好分道扬镳，董事会站在他那边，就这样，在我30岁的时候，公司把我解雇了。我失去了整个生活的重心，我的人生就这样被摧毁。<BR>　　有几个月，我不知道要做些什么。我觉得我令企业界的前辈们失望，我把他们交给我的接力棒弄丢了。<BR>　　我见了创办HP的David Packard跟创办Intel的Bob Noyce，跟他们说很抱歉我把事情给搞砸了。我成了公众眼中失败的示范，我甚至想要离开硅谷。但是渐渐地，我发现，我还是喜爱那些我做过的事情，在苹果电脑中经历的那些事丝毫没有改变我爱做的事。虽然我被否定了，可是我还是爱做那些事情，所以我决定从头来过。<BR>　　当时我没发现，但现在看来，被苹果开除，是我所经历过最好的事情。成功的沉重被从头来过的轻松所取代，每件事情都不那么确定，让我自由进入这辈子最有创意的年代。<BR>　　接下来5年，我开了一家叫做“NeXT”的公司，又开一家叫做“Pixar”的公司，也跟后来的太太Laurene谈起恋爱。Pixar接着制作了世界上第1部全电脑动画电影《玩具总动员（Toy Story）》，现在是世界上最成功的动画制作公司（听众鼓掌大笑）。然后，苹果电脑买下NeXT，我又回到了苹果，我们在NeXT发展的技术成了苹果电脑后来复兴的核心部份。我也有了个美妙的家庭。我很确定，如果当年苹果电脑没开除我，就不会发生这些事情。这帖药很苦口。有时候，人生会用砖头打你的头，但不要丧失信心。<BR>　　我确信，让一路走过来的惟一一动力，是我热爱我做的工作。（I''m onvinced that the only thing that kept me going was that I loved what I did ）。<BR>　　你得找出你的最爱，工作上是如此，人生伴侣也是如此。你的工作将占掉你人生的一大部分，而通过伟大事业的必由之路是，热爱你做的工作（And the only way to do great work is to love what you do）。如果你还没找到这些事，继续找，别停下来。尽你全心全力，你知道你一定会找到。而且，如同任何伟大的事业，情况只会随着时间推移变得愈来愈好。所以，在你找到之前，继续找，别停顿。（听众鼓掌，很多工作喝水） <BR>　　我的第3个故事，关于死亡。<BR>　　17岁时，我读到一则格言，好像是说“把每1天都当成生命中的最后1天，你就会轻松自在（ If you live each day as if it was your last, someday you''ll most certainly be right ）。”（听众笑）这对我影响深远，在过去的的33年里，我每天早上都会照镜子自问：“如果今天是此生最后1日，我要做些什么？”每当我连续太多天都得到一个“没事做”的答案时，我就知道我必须有所改变了。<BR>　　此生当我面临重大抉择时，提醒自己“马上就要死了”，是我用过的最重要的方法。因为，几乎所有事情——所有外界期望、所有荣誉、所有对困窘或失败的恐惧——这些事情在面对死亡的时候全都消失了，只有真正的最重要的东西才会留下（Remember-ing that&nbsp; I''ll be dead soon&nbsp; is the most important tool&nbsp; I''ve ever encountered to help me&nbsp; make the big choices in life. Because almost everything, all external expectations, all pride,&nbsp; all fear of embarrassment or failure, these things just fall away in the face of death, leaving only what is truly important ）。<BR>　　提醒自己快死了，是我所知道的避免掉入丧失和畏惧陷阱的最好方法。<BR>人生不带来，死不带去，没理由不顺心而为。 <BR>　　1年前，我被诊断出癌症。我在早上7点半作断层扫瞄，在胰脏清楚出现一个肿瘤，我连胰脏是什么都不知道。医生告诉我，那几乎可以确定是一种不治之症，预计我大概活不到3到6个月。医生建议我回家，好好跟亲人们聚一聚，这是医生对临终病人的标准建议。那代表你得试着在几个月内把你将来10年想跟小孩讲的话讲完。那代表你得把每件事情搞定，家人才会尽量轻松。那代表你得跟人说再见了。<BR>　　我整天想着那个诊断结果，那天晚上做了一次切片，从喉咙伸入一个内视镜，穿过胃进到肠子，将探针伸进胰脏，取了一些肿瘤细胞出来。我打了镇静剂，不醒人事，但是我老婆在场。她后来跟我说，当医生们用显微镜看过那些细胞后，他们都哭了，因为那是非常少见的一种胰脏癌，可以用手术治好。所以我接受了手术，康复了。（听众鼓掌）<BR>　　这是我最接近死亡的时候，我希望那会继续是未来几十年内最接近的一次。经历此事后，我可以比先前只是假想死亡时更肯定地告诉你们，没有人想死，即使那些想上天堂的人，也想活着上天堂。（听众笑）<BR>　　但是死亡是我们共同的终点，没有人逃得过。这是注定的，因为死亡很可能就是生命中最棒的发明，是生命交替的媒介，送走老人们，给新生代让出道路。<BR>　　现在你们是新生代，但是不久的将来，你们也会逐渐变老，被送出人生的舞台。抱歉讲得这么戏剧化，但是这是真的。<BR>　　你们的时间有限，所以不要浪费时间活在别人的生活里。不要被教条所局限，盲从教条就是活在别人思考的结果里。不要让别人的意见淹没了你内在的心声。最重要的是，要有勇气追逐你们自己的内心世界和直觉，它们多少已经知道你们真正想要成为什么样的人（have the courage to follow your heart and intuition. They somehow already know what you truly want to become），其他任何事情都是次要的！（听众鼓掌）<BR>　　在我年轻时，有本神奇的杂志，叫做《Whole Earth Catalog》，当年这是我们的经典读物。那是位住在离这不远的Menlo Park 的Stewart Brand发行的，他把杂志办得很有诗意。那是60年代末，个人电脑和桌上出版还没出现，所有内容都是打字机、剪刀、拍立得相机做出来的。杂志内容有点像印在纸上的平面Google，在Google 出现之前35年就有了。这本杂志很理想主义，充满新奇工具与伟大的见解。Stewart跟他的团队出版了好几期的《Whole Earth Catalog》，然后很自然地，最后出了停刊号。当时是70年代中期，我正是你们现在这个年龄。在停刊号的封底，有张清晨乡间小路的照片，那种你四处搭便车冒险旅行时会经过的乡间小路。在照片下印了行小字： <BR>&nbsp;&nbsp;&nbsp; Stay Hungry, Stay Foolish(求知若饥，虚心若愚)。<BR>　　那是他们亲笔写下的告别讯息，我总是以此自许。当你们毕业，展开新生活，我也以此祝福你们——Stay Hungry, Stay Foolish！<BR>　　非常谢谢大家。（听众起立，鼓掌两分钟)<BR></DIV>
<DIV>***************************************************************************</DIV><BR>
<DIV>&nbsp; 喜欢乔布斯，不仅是是因为他的艺术设计概念，也是因为觉得，他的个性和我有许多相像之处，比如完美主义、理想主义...</DIV>
<DIV>&nbsp; 对比一下乔布斯，自己在大学的时候，也曾经处在辍学的边缘，因为实在看不到对于所学内容的兴趣，而感兴趣的又缺少决心和机会去学。现在都快30岁了，我才真的在想，到底我喜欢从事什么样的工作呢，是否应该跟随自己的兴趣爱好而放弃现有的东西呢？</DIV>
<DIV>&nbsp; 前几天，老婆向她的一个开平面设计公司的客户打听任职的要求，一个月的试用期（是否有这方面的前途在这一个月里面就能被看出来），薪水只有现在的三分之一。这样的机会，对我来说还是很有吸引力，至少在这样的环境中，我可以接触更多学习机会，见识更多的行业环境。但我还是不太敢去尝试，不是因为放弃了太多，而是因为我对自己毫无专业背景、毫无专业技能的条件没有信心。我想我还是应该先充实一下自己，后面这半年，我想先学习一下PS先吧。</DIV><BR>
<DIV><BR><BR>&nbsp;</DIV>
<DIV><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;&nbsp;</SPAN></DIV>]]></description>
</item><item>
<title><![CDATA[《Excel 2007图表完全剖析》品读]]></title>
<link>http://blog.excelhome.net/user1/fanjy/997.html</link>
<author>fanjy</author>
<pubDate>2008-2-22 13:52:00</pubDate>
<description><![CDATA[<DIV>年初，人民邮电出版社推出了一系列从国外引进的有关Excel 2007的图书，《Excel 2007图表完全剖析》就是其中的一本。最近，利用空余时间将该书通读了一遍，有些许收获，在这里与大家共享。<BR>一、该书的作者<BR>在开始介绍这本书之前，先谈谈该书的作者─—Bill Jelen。我想，对Excel有一定研究的人，一定知道这位大名鼎鼎的人，享有“Excel先生”美誉的一位Excel MVP，有着近20多年Excel使用经验，为多个知名公司提供Excel方面的服务，负责着一个每年近千万次访问量的Excel专业网站─—mrexcel.com。<BR>(该网站不定期地推出Excel知识技术竞赛活动，很多答案十分优秀，可在其网站上下载这些作品)<BR>了解了书的作者，就可以知道其作品不会让读者失望。是的，本书是一本优秀的介绍Excel 2007图表制作技术和技巧方面的图书。<BR>二、该书的内容结构<BR>该书共14章和1个附录，篇幅中等，对Excel有一定了解的读者花上两天左右的时间就可以通读该书，并有收获。我认为该书分为几大块，其中：<BR>第1-2章介绍了新的Excel 2007图表界面。<BR>第3-6章介绍了Excel中各种内置的图表类型及其适用，并配置了大量的示例和制图技巧。<BR>第7章介绍了很多图表技巧，创建使用通常的技术制作不出来的图表。<BR>第8章专门介绍了Excel 2007中得到增强的数据透视图。<BR>第9-11章介绍了Excel 2007中使用图表工具之外的可视化表现方法和工具。<BR>第12章介绍了在其它软件中使用Excel图表。<BR>第13章介绍了使用VBA创建Excel图表，特别指出了在Excel 2007中的新元素，并提供了许多列表。<BR>第14章较有趣，归纳了一些使用Excel图表欺骗人的小把戏。<BR>附录A介绍了一些实用且顶级的图表资源。<BR>根据上面列出的结构，读者可以从头到尾的阅读，也可以选读。例如，对Excel图表精通的人，可能想了解高级图表技巧，因而可直接阅读第7章。但我建议，绝大多数读者应通读全书，因为整本书中都有很多实用的专业图表知识。<BR>三、该书的一些特点<BR>1、书中内容相当丰富，穿插介绍了很多实用图表技术和技巧。<BR>2、作者对Excel图表有着极其深刻的认识，这可从第3-6章介绍各种内置图表看出来。在这几章中，不是平铺直叙地介绍各种图表，而是以各种图表的适用情况对图表进行分类，以实用的角度介绍了各种图表的适用场合以及一些优缺点，让读者在表达数据时，能够选择正确的图表类型。<BR>3、书中有很多实用案例的介绍，并很详细地说明了其制作步骤。<BR>4、以Excel来表达专业图表设计师制作的图表。<BR>5、介绍了Excel 2007中数据条、色阶、图标集、SmartArt图形和形状等仿图表功能，使用Excel 2007的新功能，在不使用图表的情况下，创建可观的可视化效果。<BR>6、较详细地介绍了使用VBA在Excel 2007中创建图表。<BR>7、指出了Excel 2007中的新功能，以及与以前版本Excel的不同，同时点出了图表专家的建议，指出了制作图表的一些原则。<BR>8、书中有很多很有创意的图表。<BR>四、部分内容指引<BR>下面的一些技术和技巧是我认为较好的，不是很全面，具体请大家参阅该书。<BR>1、第2章中使用基于日期的坐标轴来显示时间。<BR>2、第3章中：1)理解基于日期的坐标轴与基于类别的坐标轴；2）像专业人士一样设计图表：在图表中使用装饰性元素。<BR>3、第4章中创建瀑布图。<BR>4、第5章中：1）在散点图中添加标签；2）比较折扣与销量之间的关系；3)像专业人士一样设计图表：使用成对条形图来比较3个变量；4）像专业人士一样设计图表：创建成对的比较图表；5）像专业人士一样设计图表：雷达图；6）像专业人士一样设计图表：Zelazny图表。<BR>5、第6章中：1)创建OHLC图；2）创建包含成交量与竞争对手股价的烛柱图。<BR>6、第7章中：1）使柱形与条形悬浮；2）将系列转换为网格线；3)使用虚构的XY系列将几个图表显示在单个图表中；4)创建动态图表；5)温度计图表；6）基准图；7）增量图。<BR>7、第9章中：1）使用条件格式在工作表单元格中创建图表；2）使用滚动条控件创建图表；3）创建“茎叶”图表。<BR>8、第11章中：将SmartArt转换为形状以创建动态图。<BR>9、第13章中：在用户窗体中创建动态图表。<BR>五、一些错别字<BR>在书中，特别是后面的一些章节，出现了一些错别字或漏字，不过不妨碍阅读与理解。在这里，不一一列出。</DIV>
<DIV><IMG alt="" src="http://blog.excelhome.net/UploadFiles/2008-2/50060.48205053.jpg" border=0></DIV>]]></description>
</item><item>
<title><![CDATA[计算年底奖金个人所得税]]></title>
<link>http://blog.excelhome.net/user1/gvntw/archives/2008/996.html</link>
<author>gvntw</author>
<pubDate>2008-1-25 9:50:00</pubDate>
<description><![CDATA[<DIV>年终到了，大家都忙着发奖金，年底奖金个人所得税计算方法与每月工资个人所得税的计算方法不同，假设奖金额放在B3单元格，则税收公式如下：</DIV>
<DIV>=ROUND(LOOKUP(B3/12,{0,5;500,10;2000,15;5000,20;20000,25;40000,30;60000,35;80000,40;100000,45})%*B3,2)-LOOKUP(B3/12,{0,0;500,25;2000,125;5000,375;20000,1375;40000,3375;60000,6375;80000,10375;100000,15375})</DIV>]]></description>
</item><item>
<title><![CDATA[VBA代码荟萃免费版]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2008/995.html</link>
<author>sunxh</author>
<pubDate>2008-1-13 21:31:00</pubDate>
<description><![CDATA[VBA代码荟萃免费版 <A href="http://blog.excelhome.net/UploadFiles/2008-1/77560.45116146.rar">UploadFiles/2008-1/77560.45116146.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[[转贴]Sub过程的详细解释]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2008/994.html</link>
<author>sunxh</author>
<pubDate>2008-1-13 19:55:00</pubDate>
<description><![CDATA[<DIV><A href="http://winland.iblog.com/post/224057/417276">http://winland.iblog.com/post/224057/417276</A></DIV>
<DIV><SMALL><SPAN style="FONT-SIZE: 10pt; COLOR: #777777">作者: </SPAN><A href="http://winland.iblog.com/user/224057/224210"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt; COLOR: #0066cc">winland</SPAN></A><SPAN style="FONT-SIZE: 10pt; COLOR: #777777">| 09/11 2007, 22:28</SPAN></SMALL> 
<DIV class=getText>
<P>
<P><STRONG>语法</STRONG><BR>[Private | Public | Friend] [Static] Sub name [(arglist)] <BR>[statements]<BR>[Exit Sub]<BR>[statements]<BR>End Sub<BR>*&nbsp;用[]符号括起来的选项是可选的。</P>
<P>前面这3个[Private | Public | Friend]是同作用范围有关的。Private表示私有，即是这个过程只能从本模块里面调用。使用了这个的话，你从菜单"工具"-&gt;"宏"-&gt;"宏..."里看不到这个过程。Public表示公用，这样你从其它的模块也可以访问这个公用过程。如果前面没有任何[Private | Public | Friend]的话，过程默认是公用的。公用的过程可以从菜单"工具"-&gt;"宏"-&gt;"宏..."里看得到。Friend是用在类模块里面的，比较少用，就不说了。</P>
<P><STRONG>语法</STRONG><BR>[Private | Public | Friend] [Static] Sub name [(arglist)] <BR>[statements]<BR>[Exit Sub]<BR>[statements]<BR>End Sub<BR>*&nbsp;用[]符号括起来的选项是可选的。</P>
<P>前面这3个[Private | Public | Friend]是同作用范围有关的。Private表示私有，即是这个过程只能从本模块里面调用。使用了这个的话，你从菜单"工具"-&gt;"宏"-&gt;"宏..."里看不到这个过程。Public表示公用，这样你从其它的模块也可以访问这个公用过程。如果前面没有任何[Private | Public | Friend]的话，过程默认是公用的。公用的过程可以从菜单"工具"-&gt;"宏"-&gt;"宏..."里看得到。Friend是用在类模块里面的，比较少用，就不说了。</P>
<P>Static是静态的意思，你可能还记得用Static声明静态变量，用它声明过程的话，表示这个过程里面声明的局部变量在下次调用这个过程时仍然保持它的值。</P>
<P>下面是Static声明过程的用法. 运行try1过程，然后可以在立即窗口里看到结果。</P>
<BLOCKQUOTE>
<P>Static Sub m1()<BR>&nbsp;&nbsp;&nbsp; Dim i As Integer<BR>&nbsp;&nbsp;&nbsp; Dim j As Integer<BR>&nbsp;&nbsp;&nbsp; i = i + 1<BR>&nbsp;&nbsp;&nbsp; j = j + 1<BR>&nbsp;&nbsp;&nbsp; Debug.Print "i=" &amp; i &amp; " j=" &amp; j<BR>End Sub<BR>Private Sub m2()<BR>&nbsp;&nbsp;&nbsp; Dim i As Integer<BR>&nbsp;&nbsp;&nbsp; Dim j As Integer<BR>&nbsp;&nbsp;&nbsp; i = i + 1<BR>&nbsp;&nbsp;&nbsp; j = j + 1<BR>&nbsp;&nbsp;&nbsp; Debug.Print "i=" &amp; i &amp; " j=" &amp; j<BR>End Sub<BR>Sub try1()<BR>&nbsp;Dim i As Integer<BR>&nbsp;Debug.Print "静态过程:"<BR>&nbsp;&nbsp;&nbsp; For i = 1 To 10<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call m1<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;Debug.Print "私有过程:"<BR>&nbsp;&nbsp;&nbsp; For i = 1 To 10<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call m2<BR>&nbsp;&nbsp;&nbsp; Next i<BR>End Sub</P></BLOCKQUOTE>
<P>如果没有使用 Public、Private 或 Friend 显式指定，Sub 过程按缺省情况就是公用的。如果没有使用 Static，则在调用之后不会保留局部变量的值。Friend 关键字只能在类模块中使用。不过 Friend 过程可以被工程的任何模块中的过程访问。Friend 过程不会在其父类的类型库中出现，且 Friend 过程不能被后期绑定。</P>
<P><STRONG>小心</STRONG> Sub 过程可以是递归的；也就是说，该过程可以调用自己来完成某个特定的任务。不过，递归可能会导致堆栈上溢。通常 Static 关键字和递归的 Sub 过程不在一起使用。</P>
<P>所有的可执行代码都必须属于某个过程。不能在别的 Sub、Function 或 Property 过程中定义 Sub 过程。</P>
<P>Exit Sub 语句使执行立即从一个 Sub 过程中退出。程序接着从调用该 Sub 过程的语句下一条语句执行。在 Sub 过程的任何位置都可以有 Exit Sub 语句。</P>
<P>Sub 过程与 Function 过程的相似之处是：它们都一个可以获取参数，执行一系列语句，以及改变其参数的值的独立过程。而与 Function 过程不同的是：带返回值的 Sub 过程不能用于表达式。</P>
<P>可以使用过程名并后跟相应的参数列表来调用一个 Sub 过程。请参阅 Call 语句关于如何调用 Sub 过程的详细的说明信息。</P>
<P>在 Sub 过程中使用的变量分为两类：一类是在过程内显式定义的，另一类则不是。在过程内显式定义的变量（使用 Dim 或等效方法）都是局部变量。对于使用了但又没有在过程中显式定义的变量，除非其在该过程外更高级别的位置有显示地定义，否则也是局部的。</P>
<P><STRONG>小心</STRONG> 过程可以使用没有在过程内显式定义的变量，但只要有任何在模块级别定义的名称与之同名，就会产生名称冲突。如果过程中使用的未定义的变量与别的过程，常数，或变量的名称相同，则认为过程使用的是模块级的名称。显式定义变量就可以避免这类冲突。可以使用 Option Explicit 语句来强制显式定义变量。</P>
<P>注意 不能使用 GoSub、GoTo 或 Return 来进入或退出 Sub 过程。</P>
<P><STRONG>现在说说arglist</STRONG>, 它的语法如下：<BR>[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]</P>
<P><STRONG>先说Optional</STRONG>，Optional表示这个参数是可选的，意思是在调用过程时可以不传递值也可以传递值给这个参数. 如果有给出defaultvalue给这个参数时(如optional iInput2 As Integer=13), 当调用过程没有传递值给这个参数时, 过程里面会默认使用这个defaultvalue.<BR>Optional必须对最后面的那些参数使用,也就是说这个参数用了Optional后,后面的参数就必须也使用Optional.</P>
<BLOCKQUOTE>
<P>Sub mmm(iInput1 As Integer, Optional iInput2 As Integer = 13, Optional iInput3 As Integer)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'iInput2用了Optional后，iInput3也必须用Optional<BR>&nbsp;&nbsp;&nbsp; MsgBox "iInput1=" &amp; iInput1 &amp; vbCrLf &amp; "iInput2=" &amp; iInput2 &amp; vbCrLf &amp; "iInput3=" &amp; iInput3<BR>End Sub<BR>Sub subTry()<BR>&nbsp;&nbsp;&nbsp; Call mmm(23, 34, 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;'可以给3个参数都赋值<BR>&nbsp;&nbsp;&nbsp; Call mmm(23, , 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '也可以给第3个赋值，而不给第2个参数赋值，这样iInput2会等于默认值13<BR>&nbsp;&nbsp;&nbsp; Call mmm(23, 34)&nbsp; &nbsp;&nbsp;&nbsp;'可以给第2个参数都赋值而不给第3个参数赋值<BR>&nbsp;&nbsp;&nbsp; Call mmm(23)&nbsp;&nbsp;&nbsp;&nbsp;'第2个，第3个参数都不赋值<BR>End Sub</P></BLOCKQUOTE>
<P><STRONG>ParamArray的用法</STRONG><BR>ParamArray只用于 arglist 的最后一个参数，指明最后这个参数是一个包含Variant类型 元素的 Optional 数组，但你传递值给过程时还是使用逗号分开多个参数，过程里面会把找几个参数合并成一个数组。使用 ParamArray 的好处是你可以提供不定数目不定类型的参数给过程。ParamArray不能与 ByVal，ByRef，或 Optional 一起使用。</P>
<BLOCKQUOTE>
<P>Sub m1(iInput1 As Integer, ParamArray argArr())<BR>&nbsp;&nbsp;&nbsp; Dim strList As String<BR>&nbsp;&nbsp;&nbsp; Dim i As Integer<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; strList = "iInput1=" &amp; iInput1 &amp; vbCrLf<BR>&nbsp;&nbsp;&nbsp; For i = 0 To UBound(argArr)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strList = strList &amp; "argArr(" &amp; i &amp; ")=" &amp; argArr(i) &amp; vbCrLf<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Err.Description &lt;&gt; "" Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strList = strList &amp; "argArr(" &amp; i &amp; ")=missing para" &amp; vbCrLf<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp; MsgBox strList<BR>End Sub<BR>Sub try1()<BR>&nbsp;&nbsp;&nbsp; Call m1(23, 24, 25)<BR>&nbsp;&nbsp;&nbsp; Call m1(23, 24, , 25)<BR>&nbsp;Call m1(23, 24, 64.4, 25, "data")&nbsp;&nbsp;'这后面的参数可以再加<BR>End Sub</P></BLOCKQUOTE>
<P><STRONG>ByVal和ByRef的用法</STRONG>. VBA里默认是ByRef的。ByVal的意思是按值传递参数，因为是按值传递，这个参数在过程里面的值有变化的话它影响的范围只是在这个过程里面。出了过程就没有用了。而ByRef是按地址或者说按引用传递，传递个过程的实际是这个数值的地址，而不是值本身，在过程里面对这个参数做改变的话是对这个地址的值改变，这样在过程外面也可以看到这个值变了。运行下面的例子可以看到不同的。</P>
<BLOCKQUOTE>
<P>Sub mmm(ByVal iI1 As Integer, iI2 As Integer)<BR>&nbsp;&nbsp;&nbsp; iI1 = iI1 + 10<BR>&nbsp;&nbsp;&nbsp; iI2 = iI2 + 10<BR>&nbsp;MsgBox "Inside: iI1=" &amp; iI1 &amp; " iI2=" &amp; iI2<BR>End Sub<BR>Sub mySub()<BR>&nbsp;&nbsp;&nbsp; Dim iI1 As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iI2 As Integer<BR>&nbsp;&nbsp;&nbsp; iI1 = 10<BR>&nbsp;&nbsp;&nbsp; iI2 = 12<BR>&nbsp;&nbsp;&nbsp; MsgBox "Before: iI1=" &amp; iI1 &amp; " iI2=" &amp; iI2<BR>&nbsp;&nbsp;&nbsp; Call mmm(iI1, iI2)<BR>&nbsp;&nbsp;&nbsp; MsgBox "After: iI1=" &amp; iI1 &amp; " iI2=" &amp; iI2<BR>End Sub</P></BLOCKQUOTE>
<P></P></DIV></DIV>]]></description>
</item><item>
<title><![CDATA[[转贴]VBA里的尺寸单位]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2008/993.html</link>
<author>sunxh</author>
<pubDate>2008-1-13 19:51:00</pubDate>
<description><![CDATA[<DIV><A href="http://winland.iblog.com/post/224057/433875">http://winland.iblog.com/post/224057/433875</A></DIV>
<DIV>
<H2><A href="http://winland.iblog.com/post/224057/433875">VBA里的尺寸单位</A></H2><SMALL><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt; COLOR: #777777">作者: </SPAN><A href="http://winland.iblog.com/user/224057/224210"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt; COLOR: #0066cc">winland</SPAN></A><SPAN style="FONT-SIZE: 10pt; COLOR: #777777">| 10/12 2007, 23:11</SPAN></SMALL> 
<DIV class=getText>
<P>
<P>VBA里的尺寸单位很多，如Twip，Point，Pixel，Inch，Character，Millimeter，Centimeter等。而不同的地方使用的单位有时不一样，例如Excel和Word里的长宽单位多用Point，Access里多用Twip，而API里用的尺寸单位多为Pixel，这样单位转换时会觉得有点混乱。这主要介绍用得比较多的Twip，Point和Pixel之间的转换方法。</P>
<P>VBA里的尺寸单位很多，如Twip，Point，Pixel，Inch，Character，Millimeter，Centimeter等。而不同的地方使用的单位有时不一样，例如Excel和Word里的长宽单位多用Point，Access里多用Twip，而API里用的尺寸单位多为Pixel，这样单位转换时会觉得有点混乱。这主要介绍用得比较多的Twip，Point和Pixel之间的转换方法。</P>
<P>Twip/Point是一个与屏幕无关的测量单位，这样在打印时不要考虑屏幕分辨率的问题。Pixel则是同像素有关的测量单位。屏幕上显示最小的一个点就是一个像素。</P>
<P>Twip，Point和Inch转换公式如下：<BR>Twip=1/20*Point=1/1440*Inch<BR>Point=20*Twip=1/72*Inch</P>
<P>而Twip/Point同Pixel之间则要依据设备环境参数做转换，下面是一些转换的函数。</P>
<P>Private Const HORZRES = 8<BR>Private Const VERTRES = 10<BR>Private Const LOGPIXELSX = 88<BR>Private Const LOGPIXELSY = 90<BR>Private Const TWIPSPERINCH = 1440</P>
<P>Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long<BR>Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, _<BR>&nbsp;&nbsp; ByVal nIndex As Long) As Long<BR>Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _<BR>&nbsp;&nbsp; ByVal hDC As Long) As Long<BR>Function getDPI(bX As Boolean) As Integer&nbsp;&nbsp;'获取屏幕分辨率<BR>&nbsp;&nbsp;&nbsp; Dim hDC As Long, RetVal As Long<BR>&nbsp;&nbsp;&nbsp; hDC = GetDC(0)<BR>&nbsp;&nbsp;&nbsp; If bX = True Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getDPI = GetDeviceCaps(hDC, LOGPIXELSX)<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getDPI = GetDeviceCaps(hDC, LOGPIXELSY)<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; RetVal = ReleaseDC(0, hDC)<BR>End Function<BR>Function Pixel2TwipX(x As Long) As Long&nbsp;&nbsp;&nbsp;'水平方向Pixel转Twip<BR>&nbsp;&nbsp;&nbsp; Pixel2TwipX = (x / getDPI(True)) * TWIPSPERINCH<BR>End Function<BR>Function Pixel2TwipY(x As Long) As Long&nbsp;&nbsp;&nbsp;'垂直方向Pixel转Twip<BR>&nbsp;&nbsp;&nbsp; Pixel2TwipY = (x / getDPI(False)) * TWIPSPERINCH<BR>End Function<BR>Function Pixel2PointX(x As Long) As Long&nbsp;&nbsp;'水平方向Pixel转Point<BR>&nbsp;&nbsp;&nbsp; Pixel2PointX = Pixel2TwipX(x) / 20<BR>End Function<BR>Function Pixel2PointY(x As Long) As Long&nbsp;&nbsp;'垂直方向Pixel转Point<BR>&nbsp;&nbsp;&nbsp; Pixel2PointY = Pixel2TwipY(x) / 20<BR>End Function<BR>Function Twip2PixelX(x As Long) As Long&nbsp;&nbsp;&nbsp;'水平方向Twip转Pixel<BR>&nbsp;&nbsp;&nbsp; Twip2PixelX = x / TWIPSPERINCH * getDPI(True)<BR>End Function<BR>Function Twip2PixelY(x As Long) As Long&nbsp;&nbsp;&nbsp;'垂直方向Twip转Pixel<BR>&nbsp;&nbsp;&nbsp; Twip2PixelY = x / TWIPSPERINCH * getDPI(False)<BR>End Function<BR>Function Point2PixelX(x As Long) As Long&nbsp;&nbsp;'水平方向Point转Pixel<BR>&nbsp;&nbsp;&nbsp; Point2PixelX = Twip2PixelX(x * 20)<BR>End Function<BR>Function Point2PixelY(x As Long) As Long&nbsp;&nbsp;'垂直方向Point转Pixel<BR>&nbsp;&nbsp;&nbsp; Point2PixelY = Twip2PixelY(x * 20)<BR>End Function<BR>Function getScreenX() As Long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获取屏幕宽<BR>&nbsp;&nbsp;&nbsp; Dim hDC As Long, RetVal As Long<BR>&nbsp;&nbsp;&nbsp; hDC = GetDC(0)<BR>&nbsp;&nbsp;&nbsp; getScreenX = GetDeviceCaps(hDC, HORZRES)<BR>&nbsp;&nbsp;&nbsp; RetVal = ReleaseDC(0, hDC)<BR>End Function<BR>Function getScreenY() As Long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获取屏幕高<BR>&nbsp;&nbsp;&nbsp; Dim hDC As Long, RetVal As Long<BR>&nbsp;&nbsp;&nbsp; hDC = GetDC(0)<BR>&nbsp;&nbsp;&nbsp; getScreenY = GetDeviceCaps(hDC, VERTRES)<BR>&nbsp;&nbsp;&nbsp; RetVal = ReleaseDC(0, hDC)<BR>End Function</P>
<P></P></DIV></DIV>]]></description>
</item><item>
<title><![CDATA[[转贴]VBA的注册表读写函数]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2008/992.html</link>
<author>sunxh</author>
<pubDate>2008-1-13 19:48:00</pubDate>
<description><![CDATA[<DIV><SPAN style="COLOR: #800080; TEXT-DECORATION: underline"><A href="http://winland.iblog.com/post/224057/436120">http://winland.iblog.com/post/224057/436120</A></SPAN></DIV>
<DIV>
<H2><A href="http://winland.iblog.com/post/224057/436120">VBA的注册表读写函数</A></H2><SMALL><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt; COLOR: #777777">作者: </SPAN><A href="http://winland.iblog.com/user/224057/224210"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt; COLOR: #0066cc">winland</SPAN></A><SPAN style="FONT-SIZE: 10pt; COLOR: #777777">| 10/17 2007, 23:28</SPAN></SMALL> 
<DIV class=getText>
<P>
<P>VBA有四个内置函数让我们方便的操作注册表，但它们有一个缺点就是只能处理注册表的特定部分HKEY_CURRENT_USERSoftwareVB and VBA Program Setting.</P>
<P>【1】SaveSetting,顾名思义，这个函数就是让你在上面的注册表里里保存数值。<BR><STRONG>用法：</STRONG> SaveSetting appname, section, key, setting<BR>appname是字符串，表示所设置键的应用程序或工程名称<BR>section是字符串，表示所设置键的区域名称，在这个区域里保存注册表项设置<BR>key是字符串，表示要保存的注册表项设置的名称<BR>setting是任何类型的表达式，表示要保存的注册表项设置的值<BR>例如：SaveSetting ThisWorkBook.Name,"MySection","MyKey","1973"<BR>也可以：SaveSetting appname:=Thisworkbook.name,section="MySection",key:="MyKey",setting:=1973</P>
<P>【2】GetSetting，就是从上面的注册表里获取字符串值，如果注册表项设置不存在或为空的话，返回由default参数指定的值。<BR><STRONG>用法：</STRONG> GetSetting(appname, section, key[, default])<BR>appname是字符串，表示所设置键的应用程序或工程名称<BR>section是字符串，表示所设置键的区域名称，在这个区域里保存注册表项设置<BR>key是字符串，表示要保存的注册表项设置的名称<BR>default是可选的表达式，如果注册表项设置中没有设置值，则返回缺省值。如果省略，则 default 取值为长度为零的字符串 ("")。<BR>例如：SaveSetting ThisWorkBook.Name,"MySection","MyKey","1973"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Print GetSetting(ThisWorkBook.Name,"MySection","MyKey","0000")</P>
<P>【3】DeleteSetting，删除所设置键的区域或注册表项设置。取决于是否提供可选项Key。<BR><STRONG>用法：</STRONG> DeleteSetting appname, section[, key]<BR>appname是字符串，表示所设置键的应用程序或工程名称<BR>section是字符串，表示所设置键的区域名称，如果只有appname和section，就删除指定的区域连同这个区域下所有的注册表项设置。<BR>key是可选字符串，表示要删除的注册表项设置<BR>例如：SaveSetting ThisWorkBook.Name,"MySection","MyYear","1973"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SaveSetting ThisWorkBook.Name,"MySection","MyHome","Hunan"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeleteSetting ThisWorkBook.Name,"MySection","MyYear"&nbsp; 只删除MyYear项设置。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeleteSetting ThisWorkBook.Name,"MySection"&nbsp; 删除MySection区域并且同时删除剩下的MyHome项设置。&nbsp;</P>
<P>【4】GetAllSettings，获取指定区域下所有的注册项设置，返回一个2维Variant数组。如果程序或区域不存在，返回未初始化的Variant变量。<BR><STRONG>用法：</STRONG> GetAllSettings(appname, section)<BR>appname是字符串，表示所设置键的应用程序或工程名称<BR>section是字符串，表示所设置键的区域名称<BR>例如：<BR>&nbsp;dim i as integer<BR>&nbsp;dim vResult as Variant<BR>&nbsp;SaveSetting ThisWorkBook.Name,"MySection","MyYear","1973"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;SaveSetting ThisWorkBook.Name,"MySection","MyHome","Hunan"<BR>&nbsp;vResult=GetAllSettings(ThisWorkbook.name,"MySection")<BR>&nbsp;for i=LBound(vResult,1) to UBound(vResult,1)<BR>&nbsp;&nbsp;Debug.Print vResult(i,0) &amp; ": " &amp; vResult(i,1)<BR>&nbsp;Next i<BR>&nbsp;DeleteSetting ThisWorkbook.name,"MySection"</P>
<P></P></DIV><A href="http://winland.iblog.com/user/224057/224210/page/3"></A></DIV>
<br/>]]></description>
</item><item>
<title><![CDATA[[转贴]Excel里的鼠标定位]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2008/991.html</link>
<author>sunxh</author>
<pubDate>2008-1-13 19:42:00</pubDate>
<description><![CDATA[<DIV><A href="http://winland.iblog.com/post/224057/434322">http://winland.iblog.com/post/224057/434322</A></DIV>
<DIV>
<H2><A href="http://winland.iblog.com/post/224057/434322">Excel里的鼠标定位</A></H2><SMALL><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt">作者: </SPAN><A href="http://winland.iblog.com/user/224057/224210"><SPAN style="http://blog.excelhome.net/FONT-SIZE: 10pt">winland</SPAN></A><SPAN style="FONT-SIZE: 10pt">| 10/14 2007, 00:20</SPAN></SMALL> 
<DIV class=getText>
<P>使用API和前面介绍的尺寸转换函数，我们可以在Excel定位鼠标到指定控件或指定单元格。某种情况下，我们可以使用VBA代码移动鼠标到指定控件上，然后使用mouse_event方法模拟鼠标点击的功能。 
<P>使用API和前面介绍的尺寸转换函数，我们可以在Excel定位鼠标到指定控件或指定单元格。某种情况下，我们可以使用VBA代码移动鼠标到指定控件上，然后使用mouse_event方法模拟鼠标点击的功能。</P>
<P>Public Type POINTAPI<BR>&nbsp;&nbsp;&nbsp; x As Long<BR>&nbsp;&nbsp;&nbsp; y As Long<BR>End Type<BR>Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long<BR>Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long<BR>'Additional function<BR>Public Const MOUSEEVENTF_LEFTDOWN = &amp;H2<BR>Public Const MOUSEEVENTF_LEFTUP = &amp;H4<BR>Public Const MOUSEEVENTF_MOVE = &amp;H1<BR>Public Const MOUSEEVENTF_ABSOLUTE = &amp;H8000<BR>Declare Function GetFocus Lib "user32" () As Long<BR>Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long<BR>Public Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long<BR>Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)</P>
<P>Sub SetCursorToCell(iRow As Integer, iCol As Integer)&nbsp;'设鼠标到单元格<BR>&nbsp;&nbsp;&nbsp; Dim pt As POINTAPI<BR>&nbsp;&nbsp;&nbsp; Dim iTRow As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iTCol As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iDRow As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iDCol As Integer<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; iTRow = ActiveWindow.VisibleRange.Rows.Count<BR>&nbsp;&nbsp;&nbsp; iTCol = ActiveWindow.VisibleRange.Columns.Count<BR>&nbsp;&nbsp;&nbsp; Dim i As Integer<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; If iRow &lt; ActiveWindow.VisibleRange.Row Or iRow &gt; ActiveWindow.VisibleRange.Row + iTRow - 1 Or iCol &lt; ActiveWindow.VisibleRange.Column Or iCol &gt; ActiveWindow.VisibleRange.Column + iTCol - 1 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cells(iRow, iCol).Select&nbsp;&nbsp;&nbsp;'如果单元格不在当前可见范围内, 选择它<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; GetCursorPos pt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获取鼠标坐标<BR>&nbsp;&nbsp;&nbsp; Err.Clear<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; iTRow = ActiveWindow.RangeFromPoint(pt.x, pt.y).Row&nbsp;'获取鼠标所在上的单元格<BR>&nbsp;&nbsp;&nbsp; iTCol = ActiveWindow.RangeFromPoint(pt.x, pt.y).Column&nbsp;'获取鼠标所在上的单元格<BR>&nbsp;&nbsp;&nbsp; If Len(Err.Description) &lt;&gt; 0 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetDataArea&nbsp;&nbsp;&nbsp;'如果鼠标在标题栏或工具栏或窗口外位置, 设到Excel的数据区内<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetCursorPos pt<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iTRow = ActiveWindow.RangeFromPoint(pt.x, pt.y).Row<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iTCol = ActiveWindow.RangeFromPoint(pt.x, pt.y).Column<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; For i = pt.x To 0 Step -1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ActiveWindow.RangeFromPoint(i, pt.y).Column &lt; iTCol Then<BR>&nbsp;&nbsp;iDRow = pt.x - i - 1&nbsp;'获取鼠标所在上的单元格的左上角X坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp; For i = pt.y To 0 Step -1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ActiveWindow.RangeFromPoint(pt.x, i).Row &lt; iTRow Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iDCol = pt.y - i - 1&nbsp;'获取鼠标所在上的单元格的左上角Y坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; SetCursorPos pt.x - Point2PixelX(Cells(iTRow, iTCol).Left - Cells(iRow, iCol).Left) + Cells(iRow, iCol).Width / Cells(iTRow, iTCol).Width * iDRow - iDRow, pt.y - Point2PixelY(Cells(iTRow, iTCol).Top - Cells(iRow, iCol).Top) + Cells(iRow, iCol).Height / Cells(iTRow, iTCol).Height * iDCol - iDCol<BR>End Sub<BR>Sub SetCursorToControl(iControl As Variant)<BR>&nbsp;&nbsp;&nbsp; Dim pt As POINTAPI<BR>&nbsp;&nbsp;&nbsp; Dim iTRow As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iTCol As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iDRow As Integer<BR>&nbsp;&nbsp;&nbsp; Dim iDCol As Integer<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Dim i As Integer<BR>&nbsp;&nbsp;&nbsp; With ActiveWindow.VisibleRange<BR>&nbsp;&nbsp;&nbsp; If iControl.Left + iControl.Width &gt; .Left + .Width Or iControl.Top + iControl.Height &gt; .Top + .Height Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iControl.BottomRightCell.Select<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; If iControl.Left &lt; .Left Or iControl.Top &lt; .Top Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iControl.TopLeftCell.Select<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; GetCursorPos pt<BR>&nbsp;&nbsp;&nbsp; Err.Clear<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; iTRow = ActiveWindow.RangeFromPoint(pt.x, pt.y).Row<BR>&nbsp;&nbsp;&nbsp; iTCol = ActiveWindow.RangeFromPoint(pt.x, pt.y).Column<BR>&nbsp;&nbsp;&nbsp; If Len(Err.Description) &lt;&gt; 0 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetDataArea<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetCursorPos pt<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iTRow = ActiveWindow.RangeFromPoint(pt.x, pt.y).Row<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iTCol = ActiveWindow.RangeFromPoint(pt.x, pt.y).Column<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; For i = pt.x To 0 Step -1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ActiveWindow.RangeFromPoint(i, pt.y).Column &lt; iTCol Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iDRow = pt.x - i - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp; For i = pt.y To 0 Step -1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ActiveWindow.RangeFromPoint(pt.x, i).Row &lt; iTRow Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iDCol = pt.y - i - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; SetCursorPos pt.x - Point2PixelX(Cells(iTRow, iTCol).Left - iControl.Left) + iControl.Width / Cells(iTRow, iTCol).Width * iDRow - iDRow, pt.y - Point2PixelY(Cells(iTRow, iTCol).Top - iControl.Top) + iControl.Height / Cells(iTRow, iTCol).Height * iDCol - iDCol<BR>End Sub<BR>Sub ClickControl(iControl As Variant)<BR>&nbsp;&nbsp;&nbsp; SetCursorToControl iControl<BR>&nbsp;&nbsp;&nbsp; mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0&amp;, 0&amp;&nbsp;'模拟鼠标按左键动作<BR>&nbsp;&nbsp;&nbsp; mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0&amp;, 0&amp;<BR>End Sub<BR>Private Sub SetDataArea()<BR>&nbsp;&nbsp;&nbsp; Dim pt As POINTAPI<BR>&nbsp;&nbsp;&nbsp; ClientToScreen GetFocus, pt<BR>&nbsp;&nbsp;&nbsp; SetCursorPos pt.x + 250, pt.y + 150<BR>End Sub<BR>Sub trythis()<BR>&nbsp;&nbsp;&nbsp; SetCursorToControl Sheet1.CommandButton1<BR>&nbsp;&nbsp;&nbsp; 'ClickControl Sheet1.CommandButton1<BR>&nbsp;&nbsp;&nbsp; 'SetCursorToCell 8, 2<BR>End Sub</P>
<P></P></DIV></DIV>]]></description>
</item><item>
<title><![CDATA[使用Excel对审批环节效率进行分析]]></title>
<link>http://blog.excelhome.net/user1/apolloh/990.html</link>
<author>apolloh</author>
<pubDate>2007-12-26 16:00:00</pubDate>
<description><![CDATA[<P>步骤1 将流程明细记录按“业务号”和“审批时间”时间进行排序。</P>
<P>步骤2 插入一个辅助列“花费时间”，输入公式，用于计算每个审批环节所花费的时间，见附件。</P>
<P>步骤3 制作数据透视表，以“业务号”和“审批人”为行项目，“审批环节”为列项目，“花费时间”为数据项目。</P><A href="http://blog.excelhome.net/UploadFiles/2007-12/57731.93683521.rar">UploadFiles/2007-12/57731.93683521.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[如何提取日期中的年月日？]]></title>
<link>http://blog.excelhome.net/user1/apolloh/989.html</link>
<author>apolloh</author>
<pubDate>2007-12-24 16:11:00</pubDate>
<description><![CDATA[<DIV>步骤1 在日期列右边插入2列（如果日期列右边两列为空则不需此步骤）</DIV>
<DIV>步骤2 选择日期列，“数据”-〉“分列”-〉点击下一步到步骤2对话框，在“其他”右边的文本框中输入“-”-〉单击“完成”按钮。</DIV>
<DIV>步骤3&nbsp; “格式”-〉“单元格”-〉在“数字”选项卡设置格式为“常规”，完成。</DIV>]]></description>
</item><item>
<title><![CDATA[地图]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2007/988.html</link>
<author>sunxh</author>
<pubDate>2007-12-12 19:29:00</pubDate>
<description><![CDATA[<P><A href="http://www.3lian.com/zl/114/d/555.gif" target=_blank>世界地图</A>&nbsp;&nbsp;&nbsp; <A href="http://baike.baidu.com/pic/4/11462945135534256.jpg" target=_blank>中国地图</A>&nbsp;&nbsp;&nbsp; <A href="http://www.onegreen.net/UploadPhotos/2005101145426464.gif" target=_blank>浙江地图</A>&nbsp;&nbsp;&nbsp;&nbsp;<A href="http://www.u0575.com/map/zj_zjzjzq.jpg" target=_blank>浙江政区</A>&nbsp;&nbsp;&nbsp; <A href="http://www.mapabc.com/simple.html?c=0575" target=_blank>绍兴地图</A></P>
<P><A href="http://9654.com/m/a/shaoxing.jpg" target=_blank>绍兴地图1</A>&nbsp; <A href="http://9654.com/m/a/shaoxing1.jpg" target=_blank>绍兴地图2</A>&nbsp; <A href="http://www.mapabc.com/citymap/0575.html" target=_blank>绍兴地图- MapABC地图网</A></P>
<P><A href="http://bj.city8.com/sh200260_2JJK-2.839_0.206_1.309.swf" target=_blank>北京天安门</A></P>]]></description>
</item><item>
<title><![CDATA[2008年奥运会倒计时 代码]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2007/987.html</link>
<author>sunxh</author>
<pubDate>2007-12-4 15:17:00</pubDate>
<description><![CDATA[<P align=left>原始代码：　</P>
<P align=left>&lt;center&gt;&lt;embed style="overflow:hidden;width:140px;height:260px" src="http://aw.awflasher.com/2008.swf" width="http://blog.excelhome.net/140" height="260" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br&gt;&lt;a href="http://blog.excelhome.net/user1/sunxh/" title="奥运倒计时代码"&gt;我的奥运&lt;/a&gt; - &lt;a href="http://blog.excelhome.net/user1/sunxh/" title="Flash,WebDev"&gt;我的Blog&lt;/a&gt;&lt;/center&gt;</P>
<DIV align=left>效果图：</DIV>
<DIV align=left><EMBED style="OVERFLOW: hidden; WIDTH: 140px; HEIGHT: 260px" src=http://aw.awflasher.com/2008.swf width=140 height=260 type=application/x-shockwave-flash></EMBED><BR><A title=奥运倒计时代码 href="http://blog.excelhome.net/user1/sunxh/">我的奥运</A> - <A title=Flash,WebDev href="http://blog.excelhome.net/user1/sunxh/">我的Blog</A></DIV><BR>
<DIV>
<DIV align=left>原始代码：</DIV>
<DIV align=left>&lt;DIV class=panel id=panel2008&gt;<BR>&lt;DIV class=panel-content id=2008 style="DISPLAY: block" align=center&gt;<BR>&lt;TABLE id=table1 height=73 cellSpacing=0 cellPadding=0 width=194 background=http://lifeboke.cn/Blog/images/2008/blue.jpg border=0&gt;<BR>&lt;TBODY&gt;<BR>&lt;TR&gt;<BR>&lt;TD vAlign=bottom align=middle&gt;&lt;B&gt;&lt;FONT color=#ffffff&gt;距2008北京奥运会开幕还有&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;<BR>&lt;TR&gt;<BR>&lt;TD align=middle vlign="top"&gt;<BR>&lt;OBJECT id=obj1 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 height=36 width=194 border=0 classid=clsid:D27CDB6E-AE6D-11CF-96B8-444553540000&gt;&lt;PARAM NAME="_cx" VALUE="5133"&gt;&lt;PARAM NAME="_cy" VALUE="953"&gt;&lt;PARAM NAME="FlashVars" VALUE=""&gt;&lt;PARAM NAME="Movie" VALUE="http://lifeboke.cn/Blog/images/2008/blue-day.swf"&gt;&lt;PARAM NAME="Src" VALUE="http://lifeboke.cn/Blog/images/2008/blue-day.swf"&gt;&lt;PARAM NAME="http://blog.excelhome.net/WMode" VALUE="Transparent"&gt;&lt;PARAM NAME="Play" VALUE="0"&gt;&lt;PARAM NAME="Loop" VALUE="-1"&gt;&lt;PARAM NAME="Quality" VALUE="High"&gt;&lt;PARAM NAME="SAlign" VALUE=""&gt;&lt;PARAM NAME="Menu" VALUE="0"&gt;&lt;PARAM NAME="Base" VALUE=""&gt;&lt;PARAM NAME="AllowScriptAccess" VALUE=""&gt;&lt;PARAM NAME="Scale" VALUE="ShowAll"&gt;&lt;PARAM NAME="DeviceFont" VALUE="0"&gt;&lt;PARAM NAME="EmbedMovie" VALUE="0"&gt;&lt;PARAM NAME="BGColor" VALUE=""&gt;&lt;PARAM NAME="SWRemote" VALUE=""&gt;&lt;PARAM NAME="MovieData" VALUE=""&gt;&lt;PARAM NAME="SeamlessTabbing" VALUE="1"&gt;&lt;PARAM NAME="Profile" VALUE="0"&gt;&lt;PARAM NAME="ProfileAddress" VALUE=""&gt;&lt;PARAM NAME="ProfilePort" VALUE="0"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;embed src="http://lifeboke.cn/Blog/images/2008/blue-day.swf"<BR>pluginspage="http://www.macromedia.com/go/getflashplayer"<BR>type="http://blog.excelhome.net/application/x-shockwave-flash" name="obj1" width="194" height="36"<BR>quality="High" wmode="transparent"&gt;<BR>&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/DIV&gt;</DIV>
<DIV align=left>效果图：</DIV></DIV>
<DIV class=panel id=panel2008>
<DIV class=panel-content id=2008 style="DISPLAY: block" align=center>
<TABLE id=table1 height=73 cellSpacing=0 cellPadding=0 width=194 background=http://lifeboke.cn/Blog/images/2008/blue.jpg border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=middle>
<DIV><B><SPAN style="COLOR: #ffffff">距2008北京奥运会开幕还有</SPAN></B></DIV></TD></TR>
<TR>
<TD align=middle vlign="top">
<DIV>
<OBJECT id=obj1 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 height=36 width=194 border=0 classid=clsid:D27CDB6E-AE6D-11CF-96B8-444553540000><PARAM NAME="_cx" VALUE="5133"><PARAM NAME="_cy" VALUE="953"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="http://lifeboke.cn/Blog/images/2008/blue-day.swf"><PARAM NAME="Src" VALUE="http://lifeboke.cn/Blog/images/2008/blue-day.swf"><PARAM NAME="http://blog.excelhome.net/WMode" VALUE="Transparent"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="0"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="false">
    <embed src="http://lifeboke.cn/Blog/images/2008/blue-day.swf"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" name="obj1" width="194" height="36"
quality="High" wmode="transparent">
</embed></OBJECT></DIV></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV>原始代码：</DIV>
<DIV>&lt;CENTER&gt;&lt;EMBED STYLE="OVERFLOW: hidden; WIDTH: 155px; HEIGHT: 37px" SRC="http://blog.excelhome.net/<A href="http://aw.awflasher.com/2008lite.swf">http://aw.awflasher.com/2008lite.swf</A>" WIDTH="http://blog.excelhome.net/155" HEIGHT="37" TYPE="application/x-shockwave-flash"&gt;&lt;/EMBED&gt;&lt;/CENTER&gt;</DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>效果图：</DIV>
<DIV align=left><EMBED style="OVERFLOW: hidden; WIDTH: 155px; HEIGHT: 37px" src=http://aw.awflasher.com/2008lite.swf width=155 height=37 type=application/x-shockwave-flash></DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>原始代码：</DIV>
<DIV align=left>&lt;script type="text/javascript" src="http://blog.excelhome.net/<A href='http://www.yulinweb.com/2008/2008.js"></script'>http://www.yulinweb.com/2008/2008.js"&gt;&lt;/script</A>&gt;</DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>效果图：</DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>原始代码：</DIV>
<DIV align=left>&lt;script type="text/javascript" src="http://blog.excelhome.net/<A href='http://www.yulinweb.com/2008/468x60.js"></script'>http://www.yulinweb.com/2008/468x60.js"&gt;&lt;/script</A>&gt;</DIV>
<DIV align=left>&nbsp;</DIV>
<DIV align=left>效果图：</DIV>
<DIV align=left>&nbsp;</DIV></EMBED>
<SCRIPT src="http://www.yulinweb.com/2008/2008.js" type=text/javascript></SCRIPT>

<SCRIPT src="http://www.yulinweb.com/2008/468x60.js" type=text/javascript></SCRIPT>

<DIV><IFRAME style="WIDTH: 300px; HEIGHT: 27px" src="http://mail.163.com/2008count/163.htm" frameBorder=0 scrolling=no></IFRAME></DIV>
<DIV><BR>
<OBJECT id=obj1 style="WIDTH: 527px; HEIGHT: 124px" codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 height=124 width=527 border=0 classid=clsid:D27CDB6E-AE6D-11CF-96B8-444553540000><PARAM NAME="_cx" VALUE="13944"><PARAM NAME="_cy" VALUE="3281"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="http://www.schdz281.com/temp/aoyunhui.swf"><PARAM NAME="Src" VALUE="http://www.schdz281.com/temp/aoyunhui.swf"><PARAM NAME="http://blog.excelhome.net/WMode" VALUE="Window"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="false">
<embed src="http://www.schdz281.com/temp/aoyunhui.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="http://blog.excelhome.net/application/x-shockwave-flash" name="obj1" width="443" height="74" quality="High"></OBJECT></DIV><BR>
<SCRIPT language=JavaScript>
function time1()
{
urodz= new Date("08/08/2008");
now = new Date();
ile =urodz.getTime() - now.getTime();
ta=now.getHours();
tb=now.getMinutes();
tc=now.getSeconds();
a = Math.floor(ile / (1000 * 60 * 60 * 24));
b="0"+23-now.getHours();
c="0"+59-now.getMinutes();
d="0"+60-now.getSeconds();
if(b>10){b=23-now.getHours()}
if(c>10){c=59-now.getMinutes()}
if(d>10){d=60-now.getSeconds()}
document.Time.CLOCK.value=a+"天"+b+"小时"+c+"分"+d+"秒"
document.Time.NT.value=ta+"时"+tb+"分"+tc+"秒"
setTimeout( 'time1()',1000)
}
</SCRIPT>

<FORM name=Time method=post><B>离2008北京奥运会还有</B><BR><INPUT name=CLOCK> <BR><B>现在时间：</B><BR><INPUT name=NT vlaue=""> <BR><BR></FORM>
<SCRIPT>
time1()
</SCRIPT>

<META http-equiv=Content-Language content=zh-cn>
<P>大家可以利用这两个元素自己修改一下样式。福娃每刷新一下就会变一个。</P>
<TABLE id=table1 cellSpacing=0 cellPadding=0 width=300 border=0>
<TBODY>
<TR>
<TD>
<SCRIPT type=text/javascript>
//<![CDATA[
var f=parseInt(Math.random()*5+1);
var sohuFlash2 = new sohuFlash("http://www.beijing2008.cn/upload/cms_owrp2/homepage_cn/fuwa.swf", "27", 87, 127, "6");
sohuFlash2.addParam("quality", "high");
sohuFlash2.addParam("wmode", "opaque");
sohuFlash2.addParam("wmode","transparent");
sohuFlash2.addVariable("f",f);
sohuFlash2.write("beijingfuwa");
//]]>
</SCRIPT>
</TD>
<TD>
<OBJECT id=obj2 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0 height=160 width=160 border=0 classid=clsid:D27CDB6E-AE6D-11CF-96B8-444553540000><PARAM NAME="_cx" VALUE="4233"><PARAM NAME="_cy" VALUE="4233"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="http://www.beijing2008.cn/upload/cms_owrp2/homepage_cn/countdown_c.swf"><PARAM NAME="Src" VALUE="http://www.beijing2008.cn/upload/cms_owrp2/homepage_cn/countdown_c.swf"><PARAM NAME="http://blog.excelhome.net/WMode" VALUE="Window"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="0"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="false">
<embed src="http://www.beijing2008.cn/upload/cms_owrp2/homepage_cn/countdown_c.swf
" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="obj2" quality="High" width="160" height="160"></OBJECT></TD></TR></TBODY></TABLE><BR>
<P align=center><B>北京奥运会开幕时间:2008年8月8日晚8时</B></P><EMBED src=http://www.clocklink.com/clocks/2008olympic001-red.swf?TimeZone=CCT&amp;DayU=天&amp;HourU=时&amp;MinU=分&amp;SecU=秒&amp;Target=2008,8,8,8,8,0&amp; width=430 height=140 type=application/x-shockwave-flash allowNetworking="http://blog.excelhome.net/internal" wmode="transparent" allowScriptAccess="never">]]></description>
</item><item>
<title><![CDATA[身份证代码]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2007/986.html</link>
<author>sunxh</author>
<pubDate>2007-12-4 13:50:00</pubDate>
<description><![CDATA[<DIV><IFRAME style="WIDTH: 99.96%; HEIGHT: 105.14%" src="http://www.lxsk.com/code/ID_search.htm" frameBorder=no width="http://blog.excelhome.net/100%" height="100%"></IFRAME></DIV>
<DIV>18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。<BR>GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版，其中指出将原标准名称“社会保障号码”更名为“公民身份号码”，另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。<BR>GB11643-1999《公民身份号码》主要内容如下：</DIV>
<DIV>一、范围<BR>该标准规定了公民身份号码的编码对象、号码的结构和表现形式，使每个编码对象获得一个唯一的、不变的法定号码。</DIV>
<DIV>二、编码对象<BR>公民身份号码的编码对象是具有中华人民共和国国籍的公民。<BR>三、号码的结构和表示形式</DIV>
<DIV>1、号码的结构<BR>公民身份号码是特征组合码，由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为：六位数字地址码，八位数字出生日期码，三位数字顺序码和一位数字校验码。</DIV>
<DIV>2、地址码<BR>表示编码对象常住户口所在县(市、旗、区)的行政区划代码，按GB/T2260的规定执行。</DIV>
<DIV>3、出生日期码<BR>表示编码对象出生的年、月、日，按GB/T7408的规定执行，年、月、日代码之间不用分隔符。</DIV>
<DIV>4、顺序码<BR>表示在同一地址码所标识的区域范围内，对同年、同月、同日出生的人编定的顺序号，顺序码的奇数分配给男性，偶数分配给女性。</DIV>
<DIV>5、校验码<BR>(1)十七位数字本体码加权求和公式<BR>S = Ai * Wi, i = 2, ... , 18<BR>Y = mod(S, 11)<BR>i: 表示号码字符从右至左包括校验码字符在内的位置序号<BR>Ai:表示第i位置上的身份证号码字符值<BR>Wi:表示第i位置上的加权因子<BR>i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1<BR>Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1</DIV>
<DIV>(2)校验码字符值的计算<BR>Y: 0 1 2 3 4 5 6 7 8 9 10<BR>校验码: 1 0 X 9 8 7 6 5 4 3 2</DIV>
<DIV>四、举例如下：<BR>北京市朝阳区: 11010519491231002X<BR>广东省汕头市: 440524188001010014<BR></DIV>]]></description>
</item><item>
<title><![CDATA[ExcelToEXE 7.0 绿色更新版（含注册机）]]></title>
<link>http://blog.excelhome.net/user1/sunxh/archives/2007/985.html</link>
<author>sunxh</author>
<pubDate>2007-11-28 14:28:00</pubDate>
<description><![CDATA[<DIV>
<H4>ExcelToEXE 7.0 绿色更新版（含注册机）</H4>
<H4>图片：&nbsp;<BR><IMG alt="" src="http://blog.excelhome.net/C:\Documents and Settings\Administrator\桌面\1\1.jpg" border=0><BR><BR>图片：&nbsp;<BR><IMG alt="" src="http://blog.excelhome.net/C:\Documents and Settings\Administrator\桌面\1\2.jpg" border=0><BR><BR>图片：&nbsp;<BR><IMG alt="" src="http://blog.excelhome.net/C:\Documents and Settings\Administrator\桌面\1\3.jpg" border=0><BR><SPAN style="FONT-SIZE: 14pt; COLOR: #008000; FONT-FAMILY: Tahoma">把EXCEL转成exe的工具！ <BR>软件于2006-11-1进行了更新: <BR>1).改进了超链失效的BUG.. <BR>2).启动界面取消了置顶.</SPAN></H4>附件： </DIV><A href="http://blog.excelhome.net/UploadFiles/2007-11/52587.46925921.rar">UploadFiles/2007-11/52587.46925921.rar</A><BR>]]></description>
</item><item>
<title><![CDATA[将带小数的数值转换为代表时间的方法]]></title>
<link>http://blog.excelhome.net/user1/gouweicao78/archives/2007/984.html</link>
<author>gouweicao78</author>
<pubDate>2007-11-28 12:32:00</pubDate>
<description><![CDATA[<P>原帖：<A href="http://www.officefans.net/cdb/viewthread.php?tid=85476&amp;page=1&amp;extra=page%3D1" target=_blank>http://www.officefans.net/cdb/viewthread.php?tid=85476&amp;page=1&amp;extra=page%3D1</A></P>
<P>发帖：<A href="http://club.excelhome.net/dispbbs.asp?boardID=3&amp;ID=282052&amp;page=1&amp;px=0">http://club.excelhome.net/dispbbs.asp?boardID=3&amp;ID=282052&amp;page=1&amp;px=0</A><BR></P>
<P>A1:A18是一些设置了2位小数格式的数值，比如3.21、3.00等分别表示3分21秒、3分0秒。现欲求平均时间。</P>
<P><STRONG><SPAN style="COLOR: #ff0000">注意：整数部分不得超过2位数</SPAN></STRONG></P>
<P><STRONG>解法一：数学计算法&nbsp;&nbsp;</STRONG><BR></P>
<P>=SUM(INT(A1:A18)+MOD(A1:A18,1)*100/60)/COUNT(A1:A18)/60/24&nbsp;<BR>&nbsp;&nbsp;取得小数部分*100/60，换算成与整数相同进制（单位为：分钟）&nbsp;<BR>&nbsp;&nbsp;最后再除以60得到小时再除以24得到天数——真正的时间序列值&nbsp;——58&nbsp;个字符<BR></P>
<P>&nbsp;&nbsp;将*100改为/1%，结合*100/60就是/60%，简化如下：&nbsp;</P>
<P>=SUM(INT(A1:A18)+MOD(A1:A18,1)/60%)/COUNT(A1:A18)/1440&nbsp;——54个字符</P>
<P><STRONG>解法二：文本处理法</STRONG>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</P>
<P>=AVERAGE(--("0:"&amp;SUBSTITUTE(TEXT(A1:A18,"#.00"),".",":")))&nbsp;<BR>&nbsp;&nbsp;利用Text将A列数据统一为0.00的格式（注意A2是3，而不是3.00）&nbsp;<BR>&nbsp;&nbsp;利用Substitute将小数点替换为冒号，并在前面加0:变成时间，最后--转换为数值后求平均值&nbsp;——58个字符</P>
<P>=AVERAGE(--SUBSTITUTE(TEXT(A1:A18,"0!:00.!:00"),".",))<BR>&nbsp;&nbsp;利用Text将"0:"也做到格式中，注意感叹号为强制显示下一字符的用法，也可用\——54个字符<BR></P>
<P><STRONG>节衣缩食，勒紧裤带，省略15个字符</STRONG>：</P>
<P>=AVERAGE(--TEXT(A1:A18/1%,"0!:00!:00"))<BR>&nbsp;&nbsp;利用/1%（即*100）将数据放大100倍，小数点终于退休了，也就不用Substitute替换了，大大缩短了公式——39个字符<BR></P>
<P>=AVERAGE(--TEXT(A1:A18/1%,"0!:00"))/60<BR>&nbsp;&nbsp;利用时间进制，先求得小时数，再/60，又省了1个字符——38个字符</P>
<P>=AVERAGE(TEXT(A1:A18/1%,"0!:00")/60)<BR>&nbsp;&nbsp;利用四则运算可以转化文本型数字为数值型的特性，两颗洁白的门牙<STRONG><SPAN style="COLOR: #ff0000">--号</SPAN></STRONG>也光荣下岗了——36个字符</P>]]></description>
</item><item>
<title><![CDATA[敏感字过多被封禁？]]></title>
<link>http://blog.excelhome.net/user1/gouweicao78/archives/2007/983.html</link>
<author>gouweicao78</author>
<pubDate>2007-11-28 0:25:00</pubDate>
<description><![CDATA[<DIV>发一个在Officefans解答的问题，修改修改，应该没啥违禁的东西吧，我的博客被封禁咯。</DIV>
<DIV><A href="http://www.officefans.net/cdb/viewthread.php?tid=85476&amp;page=1&amp;extra=page%3D1">http://www.officefans.net/cdb/viewthread.php?tid=85476&amp;page=1&amp;extra=page%3D1</A></DIV>]]></description>
</item>
</channel>
</rss>
