Excel 学习笔记一

来源:互联网 发布:java excel报表制作 编辑:程序博客网 时间:2024/05/22 10:14


资料主要来源: http://www.excelhome.net


Author: Tianfeng
Start Date: 2003.10.30
Last Date: 2003.11.07
************每天积累一点点**************

========================================

27. 2003.11.07 VBA 中开启 IE 的几种方法
Const myURL As String = "http://www.excelhome.net";
Const myMail As String = "mailto:excelhome@263.net"
Const myIEPath As String = "C:/Program Files/Internet Explorer/IEXPLORE.EXE"

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long

Sub LinkTest()
'-----------------------------------------------------------------
'以下链接时的表现会因连线状态,IE 修改/设置而稍有差异,可自行体会.
'未完,待各位增补.
'-----------------------------------------------------------------
'******************************************
'一、工作表相关
'******************************************
'本示例将直接打开一个超链接。
ActiveWorkbook.FollowHyperlink Address:=myURL, NewWindow:=True
'本示例为第一个图形新建一个超链接。当然,你的工作表中必须有一个图形
With Sheet1
.Shapes(1).Select
.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:=myURL
End With
'加载它的超链接
Worksheets(1).Shapes(1).Hyperlink.Follow NewWindow:=True
'本示例为单元格 A1 新建一个超链接。
With Sheet1
.Hyperlinks.Add .Range("A1"), myURL
End With
'加载它的超链接
Sheet1.Hyperlinks(1).Follow NewWindow:=True

'******************************************
'二、使用 Shell 函数
'******************************************
Dim RetVal
RetVal = Shell(myIEPath & " " & myURL, 1)

'******************************************
'三、使用 API 之 ShellExecute 函数
'******************************************
ShellExecute Application.hwnd, vbNullString, myURL, vbNullString, vbNullString, 1

End Sub

26. 2003.11.07 在sheet1中如何用VBA把sheet2设为活动工作表
sheet2.Activate
25. 2003.11.07 如何用VBA做一个定时程序每隔4秒将数据传送到另一个工作表?
有多种方法,如:
RunWhen = Now + TimeSerial(0, 0, 1)
Application.OnTime RunWhen, "你的过程", , True

24. 2003.11.07 如何在EXCEL中用宏编写货币金额小写转换大写的宏
Function rmbdx(value, Optional m = 0)
'中文大写源代码,By 对面男孩、redwin
'支持负数,支持小数点后的第三位数是否进行四舍五入处理
'默认参数为0,即不将小数点后的第三位数进行四舍五入处理
'2002-10-11--2002-10-13
On Error Resume Next
Dim a
Dim jf As String '定义角分位
Dim j '定义角位
Dim f '定义分位
If value < 0 Then '处理正负数的情况
a = "负"
Else
a = ""
End If
If IsNumeric(value) = False Then '判断待转换的value是否为数值
rmbdx = "需转换的内容非数值"
Else
value = Abs(CCur(value))
'当参数m不输入(默认为0)或为0时,小数点后的第三数不进行四舍五入处理
'当参数m为1或其它数值时,小数点后的第三数进行四舍五入处理
If m = 0 Then
jf = Fix((value - Fix(value)) * 100)
value = Fix(value) + jf / 100
Else '厘位进行四舍五入实践很少用到,但还是要照顾到
value = Application.WorksheetFunction.Round(value, 2) '-->这句是关键!只用round有bug
jf = Round((value - Fix(value)) * 100, 0)
End If
If value = 0 Or value = "" Then '当待转换数值为0或空时,不进行转换
rmbdx = ""
Else
strrmbdx = Application.WorksheetFunction.Text(Int(value), "[DBNum2]") & "元" '转换整数位
If Int(value) = 0 Then
strrmbdx = ""
End If
If Int(value) <> value Then
If jf > 9 Then '判断小数位
j = Left(jf, 1)
f = Right(jf, 1)
Else
j = 0
f = jf
End If
If j <> 0 And f <> 0 Then '角分位都有时
jf = Application.WorksheetFunction.Text(j, "[DBNum2]") & "角" _
& Application.WorksheetFunction.Text(f, "[DBNum2]") & "分"
Else
'处理出现零几分的情况
If Int(value) = 0 And j = 0 And f <> 0 Then
jf = Application.WorksheetFunction.Text(f, "[DBNum2]") & "分"
Else
If j = 0 Then '有分无角时
jf = "零" & Application.WorksheetFunction.Text(f, "[DBNum2]") & "分"
Else
If f = 0 Then '有角无分时
jf = Application.WorksheetFunction.Text(j, "[DBNum2]") & "角整"
End If
End If
End If
End If
strrmbdx = strrmbdx & jf '组装
Else
strrmbdx = strrmbdx & "整"
End If
rmbdx = a & strrmbdx '最后成型了,各位MM满意了吧
End If
End If
End Function

23. 2003.11.05 VB编程的七个优良习惯[转帖]作者: 木子
同样适用于VBA
1、"&"替换"+"
2、变量命名大小写,语句错落有秩,源代码维护方面
3、请养成以下的“对象命名约定”良好习惯
4、在简单的选择条件情况下,使用IIf()函数
5、尽量使用Debug.Print进行调试
6、在重复对某一对象的属性进行修改时,尽量使用With....End With
7、MsgBox中尽量使用消息图标,这样程序比较有规范
8、在可能的情况下使用枚举
1、"&"替换"+"
在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.
不正确:
Dim sMessage As String
sMessage = "1" + "2"
正确:
Dim sMessage As String
sMessage = "1" & "2"
注意:"&"的后面有个空格
2、变量命名大小写,语句错落有秩,源代码维护方面
下面大家比较一下以下两段代码:
读懂难度很大的代码:
Dim SNAME As String
Dim NTURN As Integer
If NTURN = 0 Then
If SNAME = "vbeden" Then
Do While NTURN < 4
NTURN = NTURN + 1
Loop
End If
End If
容易读懂的代码:
Dim sName As String
Dim nTurn As Integer
If nTurn = 0 Then
If sName = "vbeden" Then
Do While nTurn < 4
nTurn = nTurn + 1
Loop
End If
End If
[返回索引]
3、请养成以下的“对象命名约定”良好习惯
推荐使用的控件前缀
控件类型 前缀 例子
3D Panel pnl pnlGroup
ADO Data ado adoBiblio
Animated button ani aniMailBox
Check box chk chkReadOnly
Combo box, drop-down list box cbo cboEnglish
Command button cmd cmdExit
Common dialog dlg dlgFileOpen
Communications com comFax
Control (当特定类型未知时,在过程中所使用的) ctr ctrCurrent
Data dat datBiblio
Data-bound combo box dbcbo dbcboLanguage
Data-bound grid dbgrd dbgrdQueryResult
Data-bound list box dblst dblstJobType
Data combo dbc dbcAuthor
Data grid dgd dgdTitles
Data list dbl dblPublisher
Data repeater drp drpLocation
Date picker dtp dtpPublished
Directory list box dir dirSource
Drive list box drv drvTarget
File list box fil filSource
Flat scroll bar fsb fsbMove
Form frm frmEntry
Frame fra fraLanguage
Gauge gau gauStatus
Graph gra graRevenue
Grid grd grdPrices
Hierarchical flexgrid flex flexOrders
Horizontal scroll bar hsb hsbVolume
Image img imgIcon
Image combo imgcbo imgcboProduct
ImageList ils ilsAllIcons
Label lbl lblHelpMessage
Lightweight check box lwchk lwchkArchive
Lightweight combo box lwcbo lwcboGerman
Lightweight command button lwcmd lwcmdRemove
Lightweight frame lwfra lwfraSaveOptions
Lightweight horizontal scroll bar lwhsb lwhsbVolume
Lightweight list box lwlst lwlstCostCenters
Lightweight option button lwopt lwoptIncomeLevel
Lightweight text box lwtxt lwoptStreet
Lightweight vertical scroll bar lwvsb lwvsbYear
Line lin linVertical
List box lst lstPolicyCodes
ListView lvw lvwHeadings
MAPI message mpm mpmSentMessage
MAPI session mps mpsSession
MCI mci mciVideo
Menu mnu mnuFileOpen
Month view mvw mvwPeriod
MS Chart ch chSalesbyRegion
MS Flex grid msg msgClients
MS Tab mst mstFirst
OLE container ole oleWorksheet
Option button opt optGender
Picture box pic picVGA
Picture clip clp clpToolbar
ProgressBar prg prgLoadFile
Remote Data rd rdTitles
RichTextBox rtf rtfReport
Shape shp shpCircle
Slider sld sldScale
Spin spn spnPages
StatusBar sta staDateTime
SysInfo sys sysMonitor
TabStrip tab tabOptions
Text box txt txtLastName
Timer tmr tmrAlarm
Toolbar tlb tlbActions
TreeView tre treOrganization
UpDown upd updDirection
Vertical scroll bar vsb vsbRate
---------------------------------------------------
推荐使用的数据访问对象 (DAO) 的前缀
用下列前缀来指示数据访问对象
数据库对象 前缀 例子
Container con conReports
Database db dbAccounts
DBEngine dbe dbeJet
Document doc docSalesReport
Field fld fldAddress
Group grp grpFinance
Index ix idxAge
Parameter prm prmJobCode
QueryDef qry qrySalesByRegion
Recordset rec recForecast
Relation rel relEmployeeDept
TableDef tbd tbdCustomers
User usr usrNew
Workspace wsp wspMine
--------------------------------------------------------------------------------
应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放 在名称字符串的最后。下表列出了一些例子。
推荐使用的菜单前缀
菜单标题序列 菜单处理器名称
File Open mnuFileOpen
File Send Email mnuFileSendEmail
File Send Fax mnuFileSendFax
Format Character mnuFormatCharacter
Help Contents mnuHelpContents
当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的“属性”窗口中。而且,菜单控件的名字清楚地表示出它们所属的菜单项。
为其它控件选择前缀
对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。
常量和变量命名约定
除了对象之外,常量和变量也需要良好格式的命名约定。本节列出了 Visual Basic 支持的常量和变量的推荐约定。并且讨论标识数据类型和范围的问题。
变量应该总是被定义在尽可能小的范围内。全局 (Public) 变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。
Visual Basic 中的变量可以有下列范围
范围 声明位置 可见位置
过程级 过程,子过程或函数过程中的 ‘Private’ 在声明它的过程中
模块级 窗体或代码模块(.frm、.bas )的声明部分中的 ‘Private’ 窗体或代码模块中的每一个过程
全局 代码模块(.bas)的声明部分中的 ‘Public’ 应用程序中的每一处
在 Visual Basic 的应用程序中,只有当没有其它方便途径在窗体之间共享数据时才使用全局变量。当必须使用全局变量时,在一个单一模块中声明它们,并按功能分组。给这个模块取一个有意义的名称,以指明它的作用,如 Public.bas。
较好的编码习惯是尽可能写模块化的代码。例如,如果应用程序显示一个对话框,就把要完成这一对话任务所需要的所有控件和代码放在单一的窗体中。这有助于将应用程序的代码组织在有用的组件中,并减小它运行时的开销。
除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。此外,应该用 ByVal 将参数传递给 Sub 过程及 function 过程,除非明显地需要改变已传递的参数值。
随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。
变量范围前缀
范围 前缀 例子
全局 g gstrUserName
模块级 m mblnCalcInProgress
本地到过程 无 dblVelocity
如果一个变量在标准模块或窗体模块中被声明为 Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为 Private,那么该变量有模块级范围。
注意: 一致性是卓有成效地使用这种技术的关键;Visual Basic 中的语法检查器不会捕捉以"p." 开头的模块级变量。
常量
常量名的主体是大小写混合的,每个单词的首字母大写。尽管标准 Visual Basic 常量不包含数据类型和范围信息,但是象 i、s、g 和 m 这样的前缀对于理解一个常量的值和范围还是很有用的。对于常量名,应遵循与变量相同的规则。例如:
mintUserListMax '对用户列表的最大限制
'(整数值,本地到模块)
gstrNewLine '新行字符
'(字符串,应用程序全局使用)
变量
声明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是 aUserNameTmp,还是 sUserNameTmp,还是 sUserNameTemp)。在“选项”对话框的“编辑器”标签中,复选“要求变量声明”选项。Option Explicit 语句要求在 Visual Basic 程序中声明所有的变量。
应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。
用下列前缀来指明一个变量的数据类型。
变量数据类型
数据类型 前缀 例子
String (字符串类型) str strFName
Integer (短整数类型) int intQuantity
Long (长整数类型) lng lngDistance
Single (单精度浮点数类型) sng sngAverage
Double (双精度浮点数类型) dbl dblTolerance
Boolean (布尔类型) bln blnFound
Byte (字节类型) byt bytRasterData
Date (日期类型) dte dteNow
Currency (货币计算与定点计算类型) cur curRevenue
Object (对象类型) obj objCurrent
Variant (变体类型) vnt vntCheckSum
描述变量和过程名
变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。
对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。
当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。
用户定义的类型
在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 "u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。
[返回索引]
4、在简单的选择条件情况下,使用IIf()函数
罗索的代码:
If nNum = 0 Then
sName = "sancy"
Else
sName = "Xu"
End If
简单的代码:
sName=IIf(nNum=0,"sancy","Xu")
5、尽量使用Debug.Print进行调试
在很多初学者的调试中,用MsgBox来跟踪变量值.其实用Debug.Print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.
通常:
MsgBox nName
应该:
Debug.Print nName
6、在重复对某一对象的属性进行修改时,尽量使用With....End With
通常:
Form1.Height = 5000
Form1.Width = 6000
Form1.Caption = "This is MyLabel"
应该:
With Form1
.Height = 5000
.Width = 6000
.Caption = "This is MyLabel"
End With
这种结构程序执行效率比较高,特别在循环语句里。
7、MsgBox中尽量使用消息图标,这样程序比较有规范
一般来说
vbInformation 用来提示确认或成功操作的消息
vbExclamation 用来提示警告的消息
vbCritical 用来提示危机情况的消息
vbQuestion 用来提示询问的消息
[返回索引]
8、在可能的情况下使用枚举
枚举的格式为
[Public | Private] Enum name
membername [= constantexpression]
membername [= constantexpression]
....
End Enum
Enum 语句包含下面部分:
部分 描述
Public 可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是 Public。
Private 可选的。表示该 Enum 类型只在所声明的模块中是可见的。
name 必需的。该 Enum 类型的名称。name 必须是一个合法的 Visual Basic 标识符,在定义该 Enum 类型的变量或参数时用该名称来指定类型。
membername 必需的。用于指定该 Enum 类型的组成元素名称的合法 Visual Basic 标识符。
constantexpression 可选的。元素的值(为 Long 类型)。可以是别的 Enum 类型。如果没有指定 constantexpression,则所赋给的值或者是 0(如果该元素是第一个 membername),或者比 其直接前驱的值大 1。
说明
所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum 语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:
Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum
Enum 语句只能在模块级别中出现。定义 Enum 类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。类模块中的 Public Enum 类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的 Enum 类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个 Enum 类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。
不能在 With 块中使用 Enum 类型作为目标。
Enum 语句示例
下面的示例演示用 Enum 语句定义一个命名常数的集合。在本例中是一些可以选择的颜色常数用于设计数据库的数据输入窗体。
Public Enum InterfaceColors
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFBF00&
icSpringGreen = &H7FFF00&
icForestGreen = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
End Enum
好处是加快编程速度
22. 2003.11.05 如何用VBA读取系统信息?
shell "MSINFO32.EXE"
21. 2003.11.05 将数据写道列表的最后
自己写了一个类似记录单的窗口,但如何将数据写到列表的最后呢?
listbox.additem "列值变量(你想加入列表的内容)",listbox.listcount+1
20. 2003.11.05 用VBA打开一个打开权限为"12345"的工作簿
Workbooks.Open Filename:="Drive:/Path/YourFile.xls", Password:="12345"
19. 2003.11.05 用下面的方法可测出任一列使用的行数
a=Sheet1.range("b1").End(xlDown).
18. 2003.11.05 有没有在aa.xls 中 可以判断 BB.xls是否打开的方法?
Sub IsBookOpen()
Dim WBook As Workbook
For Each WBook In Workbooks
If WBook.Name = "bb.xls" Then
MsgBox "bb.xls opened."
Else
MsgBox "bb.xls not opened"
End If
Next WBook
End Sub
17. 2003.11.05 复选框使用方法?
Private Sub CheckBox1_change()
If CheckBox1.value = 0 Then
CommandButton3.Visible = False
Else
CommandButton3.Visible = True
End If
End Sub
这段程序有没有问题?我的目的就是当复选按钮打"V"时,commandbutton3按钮显示出来,而当没有"V"时,隐藏commandbutton3按钮.
应该是没问题的,但userform_Activate时,CheckBox1=False, 但CommandButton3却是显现的,所以代码中可加上
Private Sub UserForm_Activate()
CommandButton3.Visible = False
End Sub
16. 2003.11.05 关于星期的计算?
如何通过输入一个日期:2003-10-20 即可得到该天在本年度的第几个星期?
日期在a1
=INT((A1-DATE(YEAR(A1),1,0)+WEEKDAY(DATE(YEAR(A1),1,0),1)+7-WEEKDAY(A1,1))/7)
15. 2003.11.05 怎样隐藏工作表?
worksheets("test").visible=false
14. 2003.11.05 在VBA中如何得到当前Excel文件所在的路径
thisworkbook.path
13. 2003.11.05 如何消除系统信息
application.DisplayAlerts =False
12. 2003.11.04 关闭语句
不保存直接关闭当前的工作簿的VBA语句
Workbooks("BOOK1.XLS").Close SaveChanges:=False
不保存直接关闭EXCEL窗口(关闭所有的工作簿)的VBA语句
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Application.Quit
End Sub

11. 2003.11.02 控制回车键的下移,右移
Private Sub 向右_Click()
Application.MoveAfterReturnDirection = xlToRight 输入本行
End Sub
再建一个按钮向下
Private Sub 向下_Click()
Application.MoveAfterReturnDirection = xlDown 输入本行
End Sub
不用这么麻烦,
下移 enter
上移 shift+enter
右移 tab
左移 shift+tab

10. 2003.11.02 请问怎么才能一打开excel,窗口form就能自动载入?
Private Sub Workbook_Open()
UserForm1.Show
End Sub

9. 2003.11.02 自动运行宏?

打开自动运行:
Private Sub Workbook_Open()
name'宏的名称
End Sub
关闭时自动运行:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
name'宏的名称
End Sub

8. 10.31 htpt://www.excelhome.net 在第11行前插入一行, 内容同第10行, 思路将第十行的内容COPY后,粘贴到第十一行, 不知可行不, 请试一下:
Sub InsertRow()
Rows("11:11").Select
Selection.Insert Shift:=xlDown
Rows(10).Select
Selection.Copy
Range("A11").Select
ActiveSheet.Paste
End Sub


7. 10.31 htpt://www.excelhome.net 求助:VBA中,如何写“打开同个文件夹中的其他文件“

Sub OpenFile()
Dim pth As String
Dim flNm As String
pth = ThisWorkbook.path & "/" '当前路径
flNm = pth & "Test.xls" '路径+文件名
Workbooks.Open flNm '打开文件
End Sub

6. 10.31 htpt://www.excelhome.net如何获取当前工作薄中每个工作表的名称和序号?
<1>
Sub ListNmId()
Dim i As Integer
For i = 1 To Worksheets.Count
Cells(i, 1) = i
Cells(i, 2) = Worksheets(i).Name
Next i
End Sub
<2>
定义名称x=get.workbook(1)
a1处输入公式:=index(x,row())
向下拖即可得到所有工作表名,行号即为序号
<3>
如何得到工作表的原始顺序?
我们知道Worksheets(i)=Sheets(i)=Sheet & i 不总是成立的。前面两个可以用循环,后面一个要怎么循环?
'新建工作簿,把表名:Sheet1-Sheet4 改为A/C/B/D,然后把工作表顺序调为ABCD,再插入一图表。
Sub test()
Dim i As Integer
'Worksheets(i)
For i = 1 To Worksheets.Count
Debug.Print "Worksheets(" & i & "):" & Worksheets(i).Name
Next i
Debug.Print
'Charts(i)
For i = 1 To Charts.Count
Debug.Print "Charts(" & i & "):" & Charts(i).Name
Next i
Debug.Print
'Sheets(i)
For i = 1 To Sheets.Count
Debug.Print "sheets(" & i & "):" & Sheets(i).Name
Next i
Debug.Print
'Sheet & i, 即工作表的原始顺序,如在VBE中所看到的。
'怎样把下面几句也用变量来循环:如Sheet & i
Debug.Print "Sheet1:" & Sheet1.Name
Debug.Print "Sheet2:" & Sheet2.Name
Debug.Print "Sheet3:" & Sheet3.Name
Debug.Print "Sheet4:" & Sheet4.Name
'Chart &i
Debug.Print "Chart5:" & Chart5.Name
End Sub
5. 10.31 htpt://www.excelhome.net 如何用VBA实现EXCEL某区域内填色?
Sub AddColor()
Range("a1").Interior.Color = RGB(100, 100, 100) '单元格填充颜色
Range("a1").Interior.Color = vbRed
Range("a3").Interior.ColorIndex = 3
Range("a4").Font.Color = RGB(100, 100, 100) '字体颜色
Range("a5").Font.Color = vbBlue
Range("a6").Font.ColorIndex = 3
End Sub

vbBlack 0x0 黑色
vbRed 0xFF 红色
vbGreen 0xFF00 绿色
vbYellow 0xFFFF 黄色
vbBlue 0xFF0000 蓝色
vbMagenta 0xFF00FF 紫红色
vbCyan 0xFFFF00 青色
vbWhite 0xFFFFFF 白色

4. 2003.10.31 http://club.excelhome.net vba窗体中如何实现邮件链接?
Option Explicit
Private Sub email_Click()
ShellExecute 0, "Open", "mailto:mrstian@163.net", "", "", SW_SHOWNORMAL
End Sub
3. 2003.10.30 两种方法: 来源:http://www.excelhome.net
A.设计期绑定法,设定combobox控件的rowsource属性为sheet的区域,如a1:a10
B.运行期添加法,使用combobox控件的additem方法,如
do until cells(i,2)=""
combobox1.additem cells(i,2)
i=i+1
loop
2. 2003.10.30 来源:http://www.excelhome.net 关于打印
SheetX.PrintOut copies:=1
SHEETX是你要打印的工作
可以将打印区域设为b2:m30,然后打印,如:
sheets("sheet1").printarea="b2:m30"
sheets("sheet1").printout
打印预览命令:PrintPreview
Sub Prt()
Application.Dialogs(xlDialogPageSetup).Show '页面设置
Application.Dialogs(xlDialogPrint).Show '打印
Application.Dialogs(xlDialogPrinterSetup).Show '打印机设置
Worksheets("AA").PrintPreview '打印预览
End Sub

1. 2003.10.30 利用VBA设置工作表使用权限 来源:http://www.excelhome.net

一般保护工作表采取的方法是用EXCEL菜单中的“保护”命令,有时这尚嫌不足,比如一些机密文件根本要让某些使用者无法看到,但又需要他来操作工作簿中的其他表,怎么办?

可以打开VBA编辑器,打开“工程资源管理器”,双击该工作表,现在出现的是设置该表属性的编辑窗口,单击窗口左上的下拉列表框,选择worksheet ,这时再从该窗口右上方的列表框中选择Active(“激活”),这时自动显示如下的语句块:
Private Sub Worksheet_Activate()

End Sub
在其中加入代码:(假设用"123"作为密码,Sheet"机密文档"为限制权限文档,sheet"普通文档"为工作簿中你认为任何适合的工作表)

If Application.InputBox("请输入操作权限密码:") = 123 Then
Range("A1").Select
Else
Msgbox "密码错误,即将退出!"
Sheets("普通文档").Select
End if

程序如下:
Private Sub Worksheet_Activate()
If Application.InputBox("请输入操作权限密码:") = 123 Then
Range("A1").Select
Else
MsgBox "密码错误,即将退出!"
Sheets("普通文档").Select
End If
End Sub
这样做仍有一个问题,就是越权使用者仍会看到一些文件的片段,即在提示密码的那段时间。好,你可以这样做,用上述方法选择工作表的Deactivate事件,输入以下代码:

Sheets("机密文档").Cells.Font.ColorIndex = 2

这段程序使得此工作表在不被激活时,所有文字为白色。然后,在第一个程序中的 Range("A1").Select后插入一行,写入以下代码:
ActiveSheet.Cells.Font.ColorIndex = 56
这段程序,在你输入正确密码后,将该表所有文字转变为深灰色。

完整的程序如下:
Private Sub Worksheet_Activate()
If Application.InputBox("请输入操作权限密码:") = 123 Then
Range("A1").Select
Sheets("机密文档").Cells.Font.ColorIndex = 56
Else
MsgBox "密码错误,即将退出!"
Sheets("普通文档").Select
End If


==============================End==========================================
 
原创粉丝点击