分享

Excel制表技巧(29)自定义B

 甘苦人生2010 2013-12-14

       VBA之API篇

 什么是Windows API? Windows 这个多作业系统除了协调应用程式的执行、分配内存、管理系统资源…之外, 她同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备…等目的,由於这些函数服务的对象是应用程式(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。 凡是在 Windows 工作环境底下执行的应用程式,都可以调用Windows API。 
 Visual Basic以友好易学的可视化开发环境闻名于世,成为人们学习计算机编程的首选语言(以前是,现在不吃香了,而且VBA也开始转向.net了,又要坚苦学习了*~_~*)。目前,还有很多人使用着Visual Basic语言。如果您想在这茫茫众生中出类拔萃,那么您就不得不学习API编程。不懂API,那可成不了高手(所以我不是*~_~*)。API说到底就是一系列的底层函数,是系统提供给 用户用于进入操作系统核心,进行高级编程的途径。通过在Visual Basic应用程序中声明外部过程就能够 访问Windows API(以及其它的外部DLLs)。在声明了过程之后,调用它的方法与调用Visual Basic自己的过程相同。  
在前面我们已说过什么是VBA?VBA是Visual Basic for Applications 的简称,Visual Basic(VB)在office的应用版。所以在VBA里也能调用API。 
 实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。  
  这也是API函数使用的场合,所以我们对待API函数不必刻意去研究每一个函数的用法,那也是不现实的(能用得到的API函数有几千个呢)。正如某位大虾所说:API不要去学,在需要的时候去查API帮助就足够了。但是,许多API函数令人难以理解,易于误用,还会导致出错(调用API时稍有不慎就可能导致API编程错误,出现难于捕获或间歇性错误,甚至出现程序崩溃,乃至死机*~_~*),这一切都阻碍了它的推广。想快速掌握API函数用法,最好就是通过对API函数的分类,结合一些有趣的实例,应该可以达到快速掌握的目的。 
 前面的内容中,有讲到API帮助,大家可以从网上搜索获得,如果有MSDN光盘的话,里面其实就很全了,而关于API的实例网上也很多,毕竟VB目前还是一个使用很广的语言,大家可以自行在网上搜索。而下面的贴子,就是我收集的几个VBA利用API实现一些自定义Excel项的内容。难懂,但很有趣,正如我之前所说的,没有办不到的,只有想不到的…… 

         Excel自定义图标与标题

修改标题很简单,通过Application.Caption就能获得和设定,我们将修改后的标题保存在本身工作簿和第一个工作表的A2格中,让下一次给够自行更改;而重置只要改回“Microsoft Excel”即可。代码如下: 
'设定标题 
Sub CaptionSet() 
Dim TStr As String 
TStr = InputBox("请输入自定义标题:", "提示", ThisWorkbook.Sheets(1).Range("A2").Value) 
If Len(TStr) > 0 Then 
 Application.Caption = TStr 
 ThisWorkbook.Sheets(1).Range("A2").Value = TStr 
 ThisWorkbook.Save 
End If 
End Sub 
'重置标题 
Sub CaptionReSet() 
 Application.Caption = "Microsoft Excel" 
End Sub 
而修改Excel的图标就要用到API了,一共要用到五个API函数和一个常数,下面是它们的声明: 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long 
Private Declare Function SetFocus Lib "user32" (ByVal hWnd As Long) As Long 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long 
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long 
Private Const WM_SETICON = &H80 
FindWindow:寻找窗口列表中第一个符合指定条件的顶级窗口 
DrawMenuBar:为指定的窗口重画菜单 
SetFocus:将输入焦点设到指定的窗口 
SendMessage:调用一个窗口的窗口函数,将一条消息发给那个窗口 
ExtractIcon:判断一个可执行文件或DLL中是否有图标存在,并将其提取出来 
这样说明上面的五个API函数可能大家无法理解,但我也只能解释到此,API的学习我也刚刚开始:( 
下面是修改与重置图标的代码,如下: 
'设定图标的函数 
Function SetIcon(IconPath As String) 
Dim IStyle As Long, hIcon As Long 
 hIcon = ExtractIcon(0, IconPath, 0) '获得指定文件的第一个图标 
 SendMessage hWndForm, WM_SETICON, True, hIcon '刷新图标 
 SendMessage hWndForm, WM_SETICON, False, hIcon '刷新图标 
 DrawMenuBar hWndForm '重画菜单 
 SetFocus hWndForm '指定焦点 
End Function 
'获得Excel句标的函数 
Function hWndForm() As Long 
 hWndForm = FindWindow(vbNullString, Application.Caption) 
End Function 
'设定图标 
Sub IconSet() 
Dim TStr As String 
TStr = Application.GetOpenFilename("所有图标文件,*.ico;*.exe") 
If TStr <> "False" And Dir(TStr) <> "" Then 
 ThisWorkbook.Sheets(1).Range("A1").Value = TStr 
 SetIcon TStr 
 ThisWorkbook.Save 
End If 
End Sub 
'重置图标 
Sub IconReSet() 
SetIcon Application.Path & "\Excel.exe" 
End Sub 
主要功能代码就完成了,我们还可以利用我们前面说过的,加入菜单调用(我主页的加载宏是加在主菜单的视图项中),这样就可以完成我们全部的功能了。 
        自定义进度条

在Excel的状态栏中显示自定义的进度条。 
'//此模块创建了一个显示在状态栏的自定义进度条,并可对状态栏的文字进行设置 
'//——以下声明API函数—— 
'//创建文字函数,其中fCharacterSet:字符集;134为GB2312 
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal fHeight As Long, ByVal fWidth As Long, ByVal fEscapement As Long, ByVal fOrientation As Long, ByVal fWeight As Long, ByVal fItalic As Long, ByVal fUnderline As Long, ByVal fStrikeout As Long, ByVal fCharacterSet As Long, ByVal fPrecision As Long, ByVal fClipping As Long, ByVal fQuality As Long, ByVal fPitchAndFamily As Long, ByVal fName As String) As Long 
'//取得窗体设备环境函数 
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long 
'//设置环境内容,此处为文字 
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long 
'//删除创建的环境内容 
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long 
'//释放设备环境 
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long 
'//该函数创建一个具有扩展风格的重叠式窗口、弹出式窗口或子窗口 
Private Declare Function CreateWindowEX Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long 
'//破坏创建的窗口 
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long 
'//设置一个窗口为另一窗口的子窗口 
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 
'//视情况向窗体发送不同的信息 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
'//查找窗口句柄 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
'//查找一个窗口中子窗口的句柄 
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 
'//设置场景背景色 
Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long 
'//设置文本颜色 
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long 
'//取得系统色 
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long 
'//取得窗体客户区坐标 
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long 
'//——以下定义常量及类型—— 
Private Const WS_VISIBLE = &H10000000 '可见 
Private Const WS_CHILD = &H40000000 '子窗口 
Private Const WS_BORDER = &H800000 '单边框 
Private Const PBS_STANDARD = &H0 '标准 
Private Const PBS_SMOOTH = &H1 '平滑 
Private Const CCM_FIRST = &H2000& 
Private Const WM_USER = &H400 
Private Const PBM_SETBKCOLOR = (CCM_FIRST + 1) '设置进度条背景色 
Private Const PBM_SETPOS = (WM_USER + 2) '设置进度条状态 
Private Const PBM_SETBARCOLOR = (WM_USER + 9) '设置进度条颜色 
Private Const COLOR_BTNFACE = 15 '系统按纽背景色 
Private Type RECT 
 Left As Long 
 Top As Long 
 Right As Long 
 Bottom As Long 
End Type 
'//进度条显示时的样式 
Enum PBType 
 P_STANDARD = WS_VISIBLE Or WS_CHILD Or WS_BORDER Or PBS_STANDARD '标准样式 
 P_SMOOTH = WS_VISIBLE Or WS_CHILD Or WS_BORDER Or PBS_SMOOTH '平滑式 
End Enum 
'// 文字的字体粗细需在0到1000之间,例如,400代表普通,700代表粗体,而0则表示默认。 
Enum FnWeight 
 FW_DONTCARE = 0 
 FW_THIN = 100 
 FW_EXTRALIGHT = 200 
 FW_ULTRALIGHT = 200 
 FW_LIGHT = 300 
 FW_NORMAL = 400 
 FW_REGULAR = 400 
 FW_MEDIUM = 500 
 FW_SEMIBOLD = 600 
 FW_DEMIBOLD = 600 
 FW_BOLD = 700 
 FW_EXTRABOLD = 800 
 FW_ULTRABOLD = 800 
 FW_HEAVY = 900 
 FW_BLACK = 900 
End Enum 
'// 主过程 
'//参数如下; 
'//FontHeight:文字高度,FontWeight:文字粗细,FontColor:文字颜色,Italic:斜体,lngPBType:进度条类型,MaxVlue:最大值,StopValue:停止值,Prompt:状态栏字符串。 
Sub StatusBarMsg(FontHeight As Long, FontWeight As FnWeight, FontColor As Long, Italic As Boolean, lngPBType As PBType, MaxVlue As Long, StopValue As Long, Prompt As String) 
       最小化到系统托盘

系统托盘,即桌面最右下角显示时间的地方,现在的很多程序都会在这个地方生成一个图标,而我们这一贴就是要让Excel最小化后到系统托盘。 
首先,最小化在这里其实是工作簿最小化,而不是Excel的主程序,因为这里是用类来监控Excel的最小化事件,而类只能监控到工作簿级的事件,因此利用API禁用了Excel主程序的最小化按钮,下面是这个类WorkBookClass的代码,这里我们只要监控工作簿的WindowResize事件: 
Public WithEvents xlbookapp As Excel.Application 
Private Sub xlbookapp_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window) 
 If Wn.WindowState = xlMinimized Then 
 hideHwnd 
 End If 
End Sub 
按下来是加载宏加载时在工作簿的右键菜单中加入隐藏这个功能项,其增加与删除的代码如下: 
Sub Menu_Del() 
Dim N, i 
N = Application.CommandBars("Document").Controls.Count 
For i = 1 To N 
 '当发现右键菜单中有"隐藏(&H)"项时将其删除 
 If Application.CommandBars("Document").Controls(i).Caption = "隐藏(&H)" Then 
 Application.CommandBars("Document").Controls(i).Delete 
 Exit Sub 
 '下面这句是重置菜单,但个人认为还是用上面的方法比较好 
 'Application.CommandBars("Document").Reset 
 End If 
Next 
End Sub 
Sub Menu_Add() 
Dim N, i, Cmb As CommandBarControl 
N = Application.CommandBars("Document").Controls.Count 
For i = 1 To N 
 If Application.CommandBars("Document").Controls(i).Caption = "隐藏(&H)" Then 
 Exit Sub 
 End If 
Next 
Set Cmb = Application.CommandBars("Document").Controls.Add(Type:=msoControlButton, before:=N) 
With Cmb 
 .BeginGroup = True 
 .Caption = "隐藏(&H)" 
 .OnAction = "hideHwnd" 
 .FaceId = 597 
 .Visible = True 
End With 
End Sub 
再下来就中API的定义,这里我们一共要用到10个API函数: 
从指定窗口的结构中取得信息,这里用来获得Excel主窗口的窗口样式 
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 
调查窗口标题文字或控件内容的长短 
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long 
取得一个窗体的标题(caption)文字 
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long 
控制窗口的可见性 
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 
寻找窗口列表中第一个符合指定条件的顶级窗口 
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
在窗口结构中为指定的窗口设置信息 
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
判断一个可执行文件或DLL中是否有图标存在,并将其提取出来,这里用来取得Excel的图标 
Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long 
使用系统托盘的API函数,这个贴子的主功能的实现函数 
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long 

        为指定的窗口重画菜单

Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long 
判断窗口是否可见 
Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long 
此外还要定义一个数据结构和一些常量: 
Public Type NOTIFYICONDATA 
 cbSize As Long 
 hwnd As Long 
 uID As Long 
 uFlags As Long 
 uCallbackMessage As Long 
 HIcon As Long 
 szTip As String * 64 
End Type 
Public Const WM_LBUTTONUP = &H202 
Public Const GWL_WNDPROC = (-4) 
Public Const WM_USER = &H400 
Public Const WM_NOTIFYICON = WM_USER + &H100 
Public Const WM_SYSCOMMAND = &H112 
Public Const SC_RESTORE = &HF120& 
Public Const NIM_ADD = &H0 
Public Const NIM_DELETE = &H2 
Public Const NIF_MESSAGE = &H1 
Public Const NIF_ICON = &H2 
Public Const NIF_TIP = &H4 
Public Const WM_PAINT = &HF 
Public Const SW_HIDE = 0 
Public Const SW_SHOW = 5 
Public Const GWL_STYLE = (-16) 
Public Const WS_MINIMIZEBOX = &H20000 
之后是全局变量 
Public XlbHide As New WorkBookClass 
Dim myData As NOTIFYICONDATA 
Dim VBEV As Boolean 
Dim App_Cap As String 
Dim XWin As XlWindowState 
Public xlMainHwnd As Long 
Public OldWindowProc As Long 
下面是主程序: 
隐藏时添加图标的代码: 
Public Sub hideHwnd() 
Dim HIcon 
 HIcon = ExtractIcon(0, Application.Path & "\Excel.exe", 0) 
 With myData 
 .cbSize = Len(myData) 
 .hwnd = xlMainHwnd 
 .uID = 0 
 .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP 
 .uCallbackMessage = WM_NOTIFYICON 
 .HIcon = HIcon 
 .szTip = "Excel" & vbNullChar 
 End With 
 App_Cap = Application.Caption 
 xlMainHwnd = FindWindow(vbNullString, App_Cap) 
 OldWindowProc = SetWindowLong(xlMainHwnd, GWL_WNDPROC, AddressOf NewWindowProc) 
 Shell_NotifyIcon NIM_ADD, myData 
 XWin = ActiveWindow.WindowState 
 Application.Visible = False 
 If GetVBEVisible() Then 
 VBEV = True 
 HideVBE 
 Else 
 VBEV = False 
 End If 
End Sub 
响应图标点击时的代码 
Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
 If msg = WM_NOTIFYICON Then 
 If lParam = WM_LBUTTONUP Then 
 If Application.Visible = False Then 
 If VBEV Then 
 ShowVBE 
 End If 
 Application.Visible = True 
 ActiveWindow.WindowState = xlMaximized 
 Application.Visible = True 
 myData.uFlags = 0 
 Shell_NotifyIcon NIM_DELETE, myData 
 SetWindowLong xlMainHwnd, GWL_WNDPROC, OldWindowProc 
 DrawMenuBar xlMainHwnd 
 If XWin = xlNormal Then 
 ActiveWindow.WindowState = XWin 
 End If 
 Application.Caption = App_Cap 
 Exit Function 
 End If 
 End If 
 End If 
End Function 
显示VBE窗口的代码,本来利用Application.VBE.MainWindow.Visible可以显示和隐藏VBE窗口,但会受到宏的安全性限制,因此这里也利用API来完成。 
Sub ShowVBE() 
Dim a As Long 
a = FindWindow(vbNullString, GetVBECaption()) 
ShowWindow a, SW_SHOW 
End Sub 
隐藏VBE窗口代码: 
Sub HideVBE() 
Dim a As Long 
a = FindWindow(vbNullString, GetVBECaption()) 
ShowWindow a, SW_HIDE 
End Sub 
获得VBE的标题,同样可以利用Application.VBE.MainWindow.Caption获得,但理由同上 
Function GetVBECaption() As String 
Dim a$, i 
GetVBECaption = "" 
For i = 1 To 10000 
 a$ = GetWindowTitle(i) 
 If a$ Like "Microsoft Visual Basic - *" Then 
 GetVBECaption = a$ 
 Exit Function 
 End If 
Next 
End Function 
判断VBE窗口的可见壮态 
Function GetVBEVisible() As Boolean 
Dim a As Long 
If Len(GetVBECaption()) = 0 Then 
 GetVBEVisible = False 
Else 
 a = FindWindow(vbNullString, GetVBECaption()) 
 GetVBEVisible = IsWindowVisible(a) 
End If 
End Function 
获得所有进程的标题 
Function GetWindowTitle(ByVal hwnd As Long) As String 
On Error Resume Next 
Dim l As Long, s As String 
l = GetWindowTextLength(hwnd) 
s = Space(l + 1) 
GetWindowText hwnd, s, l + 1 
GetWindowTitle = Left$(s, l) 
End Function 
最后是ThisWorkbook的代码 
退出时还原最小化按钮及删除添加的菜单项 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
 xlMainHwnd = FindWindow(vbNullString, Application.Caption) 
 IStyle = GetWindowLong(xlMainHwnd, GWL_STYLE) Or WS_MINIMIZEBOX 
 SetWindowLong xlMainHwnd, GWL_STYLE, IStyle 
 DrawMenuBar xlMainHwnd 
 Menu_Del 
End Sub 
加载时初始化类、禁用最小化按钮与添加相应的菜单项 
Private Sub Workbook_Open() 
 Set XlbHide.xlbookapp = Application 
 xlMainHwnd = FindWindow(vbNullString, Application.Caption) 
 IStyle = GetWindowLong(xlMainHwnd, GWL_STYLE) And Not WS_MINIMIZEBOX 
 SetWindowLong xlMainHwnd, GWL_STYLE, IStyle 
 DrawMenuBar xlMainHwnd 
 Menu_Add 
End Sub 
        Excel VBA中设定指针

在excel的VBA中,找到Cursor 属性可以设定指针,下面是Cursor 属性在帮助中的说明:  
返回或设置 Microsoft Excel 中鼠标指针的形状。XlMousePointer 类型,可读写。 
expression.Cursor 
expression 必需。该表达式返回“应用于”列表中的对象之一。 
说明 
当宏停止运行时,Cursor 属性不会自动重设。在宏停止运行前,应将指针重设为 xlDefault。 
示例 
本示例将鼠标指针形状更改为 I 形,稍停片刻,然后将其重新变为默认指针形状。 
Sub ChangeCursor() 
 Application.Cursor = xlIBeam 
 For x = 1 To 1000 
 For y = 1 to 1000 
 Next y 
 Next x 
 Application.Cursor = xlDefault 
End Sub 

但XlMousePointer只有四种常量, 可为以下 XlMousePointer 常量之一。  
xlDefault 默认指针。  
xlIBeam I 型指针。  
xlNorthwestArrow 西北向箭头指针。  
xlWait 沙漏型指针。  
      双击在Excel中的妙用

       1. 巧分窗口 

  如果仔细观察可能会发现,在Excel垂直滚动条上方与带黑三角形按钮相邻的地方,有一个折叠起来的按钮,双击(以下双击均指双击鼠标左键)它,即可将当前窗口上下一分为二;双击水平滚动条右方的折叠起来的按钮,可将当前窗左右一分为二。 

  2. 调整列宽 

  单元格内的文本或数字在列宽不够时,超出宽度部分不显示或显示为#,这时可将鼠标指向此列列标右边界线,待鼠标指针变成左右的双向箭头时双击,可得到最适合的列宽,即列宽刚好容纳此单元格内最长的内容,用同样的办法可得到最适合的行高。 

  3. 快速移动 

  利用鼠标,可使单元格指针快速移动很长距离。假如在A1∶A30内有一连续数据,若要使单元格指针从A1迅速移到A30,只需用鼠标双击A1单元格的下边框,单元格指针则快速向下移动,直到最后一个不是空白的单元格为止,若要使单元格指针在连续数据上向右快速移动,则双击单元格的右边框。 

  4. 填充有规律数据 

  某列的相邻列(左或右列)已有数据或文字,若要在该列得到有规律的数据或文字,双击鼠标可快速填充,方法如下:要得到相同的一列数据、文字或需要复制公式,只需在此列的第一个单元格内输入内容,然后用鼠标双击这个单元格右下角的填充柄,即可在此列快速填充,直到空白单元格为止;若要得到等差数列,只需在此列的第一和第二单元格内输入等差数列的前两个数据并选定它们,用鼠标双击右下角的填充柄,即可快速填充,直到空白单元格为止。
        Excel模板实用技巧五则

    自定义模板 

  进入C:\Documents and Settings\用户名\Templates文件夹下,在空白处右击,选择“新建”→“Microsoft Excel工作表”新建一个Excel文件,并把它命名为excel9.xls。双击excel9.xls文件,然后对其中的字体等作一些个性设置。

  以后在“资源管理器”中右击鼠标,选择“新建”→“Microsoft Excel工作表”,再双击新建文档,你就会发现,它已经套用了在excel9.xls中的设置了。 从而可以使用自己的个性Excel表格了。

       默认工作表自己改

  一般情况下,选择“插入”→“工作表”,会使用默认工作表模板在当前工作簿中插入新工作表。不过,可以修改这个默认工作表:先建立一个只有一张工作表的工作簿,并将其保存为名称Sheet的模板,接着再把它复制到C:\Program Files\Microsoft Office\Office10\XLStart文件夹下。以后,在Excel中新建一个文件时,将会以此文件作为模板来插入新工作表。

  获得更多模板资源

  如果觉得Excel中内置的模板不能满足需要,可从网上下载更多的模板:启动Excel,选择“文件”→“新建”,再在“新建工作簿”任务窗格,然后单击下面的“Microsoft.com上的模板”链接,这样就能打开微软网站的中文模板库。其中提供了很多类别的模板。只要单击网页上的模板类型链接,就能在网页上看到该类模板的名称和提供商等内容。单击模板名称,并在“模板最终用户许可协议”窗口中单击“同意”按钮,同时单击“在 Microsoft Excel中编辑”,IE会将模板下载回来,并自动用Excel XP打开模板。如果对模板效果满意,再用“另存为”将它保存为模板,就可以像普通模板那样调用了。

  小提示

  另外,现在网上有很多的Excel模板下载,如http://www./、http://www./index.html等。

  模板也来共享

  对局域网中的Windows用户来说,自定义模板可以让网络上的其他用户共享。将自定义模板放入某个共享文件夹中,并为该共享文件夹建立一个快捷方式。网络上的其他用户可以把这个快捷方式放入自己的C:\Program Files\Microsoft Office\Templates\2052文件夹中,然后就可以像本地安装的模板那样调用了。

  让默认工作簿更有个性

  很多用户反映不能修改默认工作簿和工作表模板,其实这是他们没有掌握修改方法所致,运行Excel将工作表Sheet1全部选中,使用“格式” 或“行”菜单下的“行高”修改行高。再次将Sheet1全部选中,单击“格式”工具栏中的“格式刷”。单击工作表标签切换至Sheet2,用“格式刷”单击Sheet2左上角(即“1”和“A”交界处),则Sheet1的格式就会“克隆”到Sheet2。重复上述操作,就可以将整个工作簿的格式修改完毕,然后把它保存名称为Book的模板,再进入C:\Program Files\Microsoft Office\Office10\XLStart文件夹下,删除掉名为Book的模板文件(如果有的话)。最后再将前面修改后的Book模板复制到 XLStart文件夹,则Excel再次启动时就会使用该模板建立新的默认工作簿。

       创建模板 彻底修改Excel常用默认设置

       在Excel 2003中可以保存的默认设置相当少,只有“工具→选项”中的小部分设置可以被保存下来,对于最常用的页眉页脚、打印页边距、单元格格式设置等等就无能为力了。其实修改一下Excel的默认模板同样可以将它们保存为默认设置,不过和word不一样的是,Excel本来并没有设置默认模板,我们得自己动手帮它建两个。

      一、创建默认工作簿模板

      1.打开Excel 2003,把三个工作表分别重命名为:工作表(1)、工作表(2)、工作表(3)。

       2.按住Ctrl键逐一单击工作表标签,选中这三个工作表,按我们的需要进行页面设置、修改“工具→选项”中的项目以及各单元格的格式等等,还可以录制一些常用的宏。在此按Ctrl键全选是为了对三个工作表做相同设置,当然你也可以对三个工作表逐一进行不同的设置。

       注意:请不要在表格中随便输入文字,这些内容将会直接出现在以后新建的工作簿中。

       3.点击“文件→另存为”,在“保存类型”中选择“模板(*.xlt)”,输入模板的文件名为book.xlt,“保存位置”则选择“C:\Program Files\Microsoft office\office11\XLStart”。这是默认安装时的位置,如果你不是按默认路径安装,请做相应修改。

       现在再重新打开Excel,你会发现新建的工作簿已经保存了我们在book.xlt中做的全部修改设置,当然你可以随时修改book.xlt文件中的设置来改变默认设置。此外,在设置默认工作簿后,“工具→选项”中的“新工作簿内的工作表数”设置将会失效,你只能通过修改book.xlt中的工作表个数来改变。

        二、创建默认工作表模板

       经过上面设置后新建的工作簿确实已保存了我们的设置,但是当我们单击“插入→工作表”的时候,新插入的工作表却还是保持最原始的未设置状态,我们还得再设置一个默认的工作表模板才行。

      新建一个工作簿,删除工作表(2)、(3),只保留下工作表(1)。同样另存为“模板(*.xlt)”类型,保存在“C:\Program Files\Microsoft office\office11\XLStart”中,不过模板的文件名则改为sheet.xlt。

       现在再插入工作表,它的格式设置就和我们的设置一样了。在此如果你在sheet.xlt中保留了两张工作表,则选择插入工作表时就会一次插入两张,以此类推。以后如果需要修改插入新工作表的设置,只要对sheet.xlt进行修改并保存就OK了。

      该方法不仅可以把页面设置、自定义工具栏、宏、超链接和窗体上的 ActiveX 控件等默认设置彻底改变,甚至连打印区域设置、单元格格式设置、数据有效性设置、工作表和行列的隐藏保护乃至工作表中输入的文字、公式、图片、背景等等都可以直接作为默认设置保存下来。只要用该方法我们完全可以按自己的使用习惯定制出一套适合自己使用的Excel

        注意:自定义的工具栏必须在保存前将它附加到book.xlt模板上才能使用。右击工具栏选择“自定义”,在“工具栏”选项卡中单击“附加”按钮,在“自定义工具栏”列表中选中要附加的工具栏,单击“复制”按钮即可。

        更改OfficeWord默认字体格式

       大家都知道word程序默认使用的字体格式大小为“五号”,这种大小的字体并不适用于所有人的需要。尤其是在1024×768像素以上的高屏幕分辨率状态时,“五号”字体就显得太小了,看起来不仅费劲,时间长了还容易引起眼睛疲劳。虽然我们可以随时更改“字号”大小来解决这个问题,但这只是个临时办法,因为下次打开word程序时它又恢复成“五号”字体。怎样才能一劳永逸的解决问题呢?其实方法很简单。

       打开word程序后,点击“格式/字体”选项,打开“字体”窗口。在“字体”标签页中可以设置当前文字使用的“字形”、“字号”等字体格式,其它还有“字间行距”和“字体效果”等格式设置。按照自己的需要选择好合适的字体格式后,点击下方的“默认”按钮,弹出提示框点击“是”按钮即可(如图)。这样就把你选择的字体格式设置成当前模板默认的字体格式了,以后再打开word程序就会发现默认的“五号”字体已经更换为自己喜欢的字体大小了。

         用Excel玩纸牌游戏

         启动Excel2003程序,依次点击工具栏中“工具/自定义”菜单,切换至“命令”标签页,选中左侧“类别”栏中的“工具”菜单,向下拖动右侧“命令”栏侧边滑块,找到带有纸牌图形的“自定义”选项(如图),将它拖至Excel工具栏中,点击“关闭”按钮将“自定义”对话框关闭。现在,Excel工具栏中就多了一个纸牌按钮,点击该按钮,熟悉的纸牌游戏界面就出现在你面前了。


随时都要玩 让纸牌游戏进驻Excel里
自定义纸牌

Excel制表技巧(29)自定义 - 冬日冰点 - 冰点休闲工作室

    友情提示:知道了这个小诀窍,千万别按捺不住心中激动,上班开始打扑克呀。

      Excel 2000中隐藏着一个3D赛车游戏

     1、开启Excel之后随便开一新档,将它「另存成Web画面」时,按下发布后再将“增加互动功能”打勾,再将档案储存为2000.htm

  2、在IE中开启2000.htm,你应该会看到电子表格出现在网页中央。

  3、找到第2000行、WC列。将第2000行整个选取,再利用Tab键将第WC列选中

  4、同时按住Shift+Crtl+Alt然后点选左上方的office LOGO

  5、开始玩了,呵呵...

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多