工作簿基本操作应用实例

上一篇 / 下一篇  2006-10-24 14:49:57 / 个人分类:Excelvba

查看( 926 ) / 评论( 4 )
今天向Fanjy(blog:http://fanjy.blog.excelhome.net/user1/fanjy/index.html)学习了工作簿常用方法和属性,现总结如下:
8jf8Jz4hE+|#rYn(h0
M9br};y^ W HA0 一、工作簿方法
j4_ y`!}0V0 1、workbooks.add 表示增加一个工作簿,可以将其赋值给一个工作簿对象变量,以便对其进行操作。如:
;KF5D)e z(mU!_u0 dim Wb as workbook
J,a z9^Y N0 set wb=workbooks.add
%{ ]+D4|p0 2、workbooks.open filename:="工作簿路径及文件名" 表示打开指定的文件,在实际运用中可以参考帮助理解打开工作簿的其他参数精英博客,R;}OiCQB&S
3、workbooks.opentext filename:="文本文件"表示载入一个文本文件并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据。
{1Q&[NtG?o9qF0 4、workbooks.close表示关闭所有已打开的工作簿
&y-hC["X|0 其中savechanges:=true表示在关闭工作簿时,保存原来的更改,否则不保存更改
X4q j4N@,XN _PV0 5、workbooks.opendatabase 返回一个workbook精英博客Cw*c|LX!a/[({
类似从数据库中导数据到工作簿中,如:精英博客|d{F?sH i8qTAC
Sub test()
v3u8y [i:O/l9`K0 Workbooks.OpenDatabase Filename:="F:\vba程序集\1.mdb"精英博客6S c-?v&? p'P-u&f%t4h
End Sub
XC6N0a'} sV)M%g0 7、workbooks(2).activate激活工作簿
F3j]l\;O`7{0 9、workbooks.protect/unprotect保护或者解除工作簿
Ed5qM"jk+Dg0 10、workbooks.save/saveas保存工作簿
p#c3MP])S X0 二、工作簿属性
,rZ s,r_0 1、Activeworkbook.name 返回活动工作簿的名称
B~.?LT!l b r0 2、Activeworkbook.path 返回活动工作簿的路径,不含工作簿名称
H lb8K/hK;L"a1QT0 3、activeworkbook.fullname 返回活动工作簿的名称,包含路径精英博客5G1dCfGP/Q9_0_
4、activeworkbook.password "123" 设置活动工作簿的密码(在打开指定的工作簿时,提示输入密码方可打开)精英博客B'|0]1]T7]'tnD"Y
5、activeworkbook.readonly精英博客 |!z-I.Bw
6、activeworkbook.builtindocumentproperties设置活动工作簿属性
)^\9q y&\R;?$U0 三、具体实例
$F{V [Z(Ub~&O0 1、activeworkbook.haspassword判断活动工作簿是否含有密码
h0m'v`*D g0 2、ActiveWorkbook.EnableAutoRecover检查工作簿的自动恢复功能
s)R XdtPf(w(P tJ0 3、workbooks.names指定工作簿名称精英博客H |9Nb{1?uw2l n
Sub WbNames()
I)H6M$~1m'W@1}0 '批量指定工作簿名称
"P k|_)O L0 For i = 1 To 10
4V}F] |&C E|0 ActiveWorkbook.Names.Add Name:="姓名" & i, RefersTo:=Worksheets("Sheet2").Range("a1:a" & i + 5)
3e3|i4j8LM0 Next i
0Dq6B S|0 End Sub
g9f w6w1Atkd |0
8SjVS7v'fz4RI0 Sub WbNames1()
A(O&zzL#q{0 '返回自定义名称,类似excel中的粘贴名称
,H/^S4]Oy2_ t7A h H0 Dim t As Name
)H1T;bnf'o3[7Y0 For Each t In ActiveWorkbook.Names精英博客W^%FQ gFS6z
i = i + 1
l u#~o o5o1m0 Cells(i, 1) = t.Name精英博客Pp2wT8L
Cells(i, 2) = t
ytvl\H&s0 Next t
T6R'ke2tF#C0 End Sub
&p|'I0@T0 4、删除指定的自定义格式
q/qqKl? cUA5m5[0 Sub DeleteFormat()精英博客#|u4G;}j8aw
'删除数字格式
3T3H @+V)A0 ActiveWorkbook.DeleteNumberFormat ("000-00-00")
hdp gR O0 End Sub
!|uz| x3k7q0 5、工作簿的一些通用属性精英博客m}Eq~
Sub WbGeneralProperties()精英博客(@g1wGz R\e
Dim msg As String
$bq3b2f.J-m3DPq0 msg = "返回活动工作簿的名称:" & ActiveWorkbook.Name精英博客+XuNf~)T
msg = msg & vbCrLf & vbCrLf & "活动工作簿带路径名称为:" & ActiveWorkbook.FullName精英博客9Y#V8_ Q F%SX S
msg = msg & vbCrLf & vbCrLf & "活动工作簿的路径为:" & ActiveWorkbook.Path
n@C1?:t0 msg = msg & vbCrLf & vbCrLf & "活动工作簿代码名称为:" & ActiveWorkbook.CodeName
'^'j,r5}v[8w&@!b0 MsgBox msg
,k;q,[ Upa-s&u0 If ActiveWorkbook.ReadOnly Then
QL*O&[#TNH4T1E0    MsgBox "活动工作簿以只读方式打开"
:[{|dX0 Else精英博客7ci)GE,\IkLM
   MsgBox "活动工作簿为可读写"精英博客8[l.|T'jg3fap
End If
9O-V2SFfu,O'Z/L.?$\0 If ActiveWorkbook.Saved Then精英博客-^v*D9b&b1yl
   MsgBox "活动工作簿已保存"精英博客+\+Y!{"q7Y
Else
s~D5bi4M0    MsgBox "活动工作簿未保存", vbOKOnly, "温馨提示"精英博客:@ dJFH@0vuC a
End If
#Y'QyEl}E0 End Sub精英博客jD6W}F)e5W
6、保护工作簿精英博客RH?4]W'Fu{
Sub WbProtect()精英博客2w wCyG c6K
MsgBox "测试工作簿保护"精英博客/i^y.pW2e:I$J1\
ActiveWorkbook.Protect Password:="888", structure:=True, Windows:=False
f M DO2a?V0 End Sub
ea!n#z*Dl"vm3I0 Sub WbUnProtect()精英博客Y0R2U @:t%q3l5yGm
ActiveWorkbook.Unprotect Password:="888"精英博客"]7g*i$Nt,F] d
End Sub
AESZ2l0 7、测试工作簿中是否包含指定的工作表精英博客k"F]kg}S"JM
Sub WsBoolean()
K9]v5Bn#O2jn9a0 '测试工作簿中是否包含指定的工作表精英博客8i dn&j]"z e
Dim Ws As String
!FE}{,a!n,u M0 Dim t As Worksheet
o9tP$jCJ0 On Error Resume Next
fS1FIx!y:u0 Ws = InputBox("请输入要查询的工作表:", "查询工作表")
/o&M/Nqn;Jz$U0 Set t = Worksheets(Ws)
3F;^'D+S%J ?5t7l4W0 If Err <> 0 Then精英博客e9yY#B/bv
   MsgBox "不存在该工作表"精英博客9dI sww%yR]$V:u
Else精英博客"q'QOHEp
   MsgBox "存在该工作表"
WF6D:\#~W5GxF~0 End If
Tk De0t I;s ]0 End Sub精英博客!d:ky3W1t"Y"_tV+Q-{
8、打开工作簿精英博客4~} ^[,mi;J pt
Sub WbOpen()精英博客9M"P E*s O4l.O0b u}V
Dim Wb As Workbook精英博客f,\b'ia\A
On Error Resume Next精英博客9cH0QIGJ7[_
Workbooks.Open Filename:="F:\vba程序集\4.XLS"
:STD+R\0 MsgBox "打开工作簿的名称为:" & ActiveWorkbook.FullName
&@}*},[f9j T&U0 End Sub
KKH)AS C0 Sub test()
neJo6bi0 Workbooks.OpenDatabase Filename:="F:\vba程序集\1.mdb"
4_ ^$R\i U9J{0 End Sub
aST;?s_ d0 9、对未打开的工作簿重命名精英博客6H'kg!o R:W
Sub ReNameOutFile()
1[2f2SrVY0 '该方法不但可以对未打开的文件重命名,还可以移动文件到别的磁盘
1{#`k&u [5mj?_A8O0 精英博客}.x%{Jz2N~@
Name "d:\1.txt" As "f:\测试.txt"精英博客H#q4a/Z%_ d+eI%G X
End Sub
&pv#?5i$?xUy0 10、返回工作簿用户状态信息
'H \w5H&u6z#n vG0 Sub UseInformation()精英博客YB_O3q/TIp~
Dim UserIn As Variant精英博客1o-IS:o9MY/tP
'返回用户状态信息,userstatus返回一个二维数组精英博客Zp&\ pokl
'数组第二维的第一个元素为用户名,第二个元素是用户打开工作簿的日期和时间,第三个元素是一个表示清单类型的数字(1 表示独占,2 表示共享)。Variant 类型,只读。精英博客^ D c6^tKd

V/HlHr1NaB }^7J0 UserIn = ActiveWorkbook.UserStatus精英博客 {} } U"q(wAU2k
With ActiveWorkbook.Worksheets("Sheet2")精英博客 v[ m1} o;Ki
   .Cells(1, 1) = "姓名"精英博客U/C&v E)@g&Uz!^3r
   .Cells(1, 2) = "日期和时间"精英博客N8Nw$q`(|
   .Cells(1, 3) = "使用方式"精英博客8w;U T@[ ]3T-S;Fua
   For i = 1 To UBound(UserIn, 1)
)C4W x%Ec R1p$a6FT6X0       .Cells(i + 1, 1) = UserIn(i, 1)
D)T"Cr}0       .Cells(i + 1, 2) = UserIn(i, 2)
!c|-E2z6}Qp(a0       Select Case UserIn(i, 3)精英博客 s X/}-ti_
         Case 1精英博客TY[F_$^9S3lLA
             .Cells(i + 1, 3) = "独占工作簿"
5zvo+Ue ^]"\'pM^0          Case 2精英博客-]LB+t5a
             .Cells(i + 1, 3) = "共享工作簿"
9S M1t0YIG0       End Select精英博客 XW@-xR5B4A
    Next i精英博客&y5x$P.B&S[0u+slj8r
    .Range("a:c").Columns.AutoFit精英博客Q+Qh3U ~m0QM$\
End With精英博客{H;Ge+`C
End Sub精英博客&sxh}#B

t ~&h*lw)_8W3@b`0 11、返回工作簿的内置属性
yqS*d XmV+|-Nc0 Sub TestDocumentProterties()
rM^fw-sN0 'BuiltinDocumentProperties属性返回一个DocumentPerties集合精英博客Ih pZ U9x ]4\'{#E
'该集合代表指定工作簿的所有内置属性
x a H6x3d3R |5_ ?0 Dim t As Object精英博客H3LR'MA1@KZj
For Each t In ActiveWorkbook.BuiltinDocumentProperties
8G vfZS-S I0    i = i + 1精英博客T,Z%d2R)gAW
   Cells(i, 1) = t.Name精英博客)?2s^7Q&w3R
Next t
yLv-y UHm0 End Sub精英博客 [\d1M%NMh!T O"h&s
Sub TestDocumentProterties1()
P?:X9Z)g0 '测试文档最后保存的时间
u4HETl0 Dim t As String精英博客4E1i Yi+w6? J
t = ActiveWorkbook.BuiltinDocumentProperties("Last save time")精英博客!Bvteq
If t = "" Then
r;w6^B$`"j#WC0    MsgBox "该工作簿未保存"
1dfD+kCR0 Else精英博客1i&UK(WN'Auef8up
   MsgBox "该工作簿已于" & t & "保存", vbOKOnly精英博客 hAjy7c.Z6P7l
End If精英博客f)J$u0B,GH8seo9z
End Sub
aQq3q6};C'by0 Sub listWorkbookProperties()
Ol.q&|R3d8s0   On Error Resume Next精英博客q'H%Y6~'IQME"U
  '在名为"工作簿属性"的工作表中添加信息,若该工作表不存在,则新建一个工作表精英博客5T'L4yp c
  Worksheets("工作簿属性").Activate精英博客ier#QV3H
  If Err.Number <> 0 Then精英博客/Z zRV;y2\%v'|
    Worksheets.Add after:=Worksheets(Worksheets.Count)精英博客 j'|2W7`0[ Pjnq
    ActiveSheet.Name = "工作簿属性"精英博客%G6d!|M*o8ob
  Else
o"[PN:O0     ActiveSheet.Clear精英博客,F4n"yEh,b+n*N
  End If
j9|HJ _ y:F:K rW%A0   On Error GoTo 0
E4|n8@:W0   ListProperties
$hJAwUI0 End Sub精英博客L5I LT]
Sub ListProperties()精英博客R:@XYO
  Dim i As Long精英博客$?l4~?$T&?8b
  Cells(1, 1) = "名称"精英博客v SSK)`4VmH B
  Cells(1, 2) = "类型"
"C$W)IP] vZL.ke0   Cells(1, 3) = "值"精英博客[s+K^+^ |5dF
  Range("A1:C1").Font.Bold = True
.eg2A t}h\0   With ActiveWorkbook
Nvgk mnB0     For i = 1 To .BuiltinDocumentProperties.Count精英博客po8CVTpB Q0E
      With .BuiltinDocumentProperties(i)
r?)eK8p5rrK$j0         Cells(i + 1, 1) = .Name精英博客 ` t?'i0yh9P
        Select Case .Type
/C|g)U&[ky0           Case msoPropertyTypeBoolean
!Y xC:o#h-S Rg T#q0             Cells(i + 1, 2) = "Boolean"精英博客-KJ.C+Y#B6t[
          Case msoPropertyTypeDate精英博客e+mZ-Vt ji/[
            Cells(i + 1, 2) = "Date"精英博客2N][INa
          Case msoPropertyTypeFloat
J.CZ)`,G,XDI d0             Cells(i + 1, 2) = "Float"精英博客3@.o$x!_ b+vZ
          Case msoPropertyTypeNumber精英博客h#j\u'v ^PPY ?
            Cells(i + 1, 2) = "Number"精英博客 O'{-hh8U9Q7@8QV
          Case msoPropertyTypeString
#m-G;o r3u$~y)b$G0             Cells(i + 1, 2) = "string"精英博客+fpd7?/w4p1\
        End Select精英博客AW5y*\/A@9m
        On Error Resume Next
C$l2f-OUEn(Y+\0         Cells(i + 1, 3) = .Value
L-F;d2Sl0         On Error GoTo 0
*J"a gl3|o;^-\!c {0       End With
qZ~H*`4?)u0     Next i
w~%M.q\G o0   End With
\+?,M$cq~X0   Range("A:C").Columns.AutoFit精英博客 tA1B*lf(['XM"e%Z
End Sub
Q n^nsI0 12、关闭工作簿
2L9G"XB)k0 Sub CloseWb1()
Q"xg6E,g+W Y2C0 '不保存所做的更改,关闭工作簿 1、activeworkbook.close savechanges:=false精英博客|{l R|oN-XS ~
'2、activeworkbook.saved=true 表示如果指定的工作簿从上次至今未发生过更改,则该值为true
`U2]/\B0 Application.DisplayAlerts = False
neH6o,]!\i'f!Q0 'ActiveWorkbook.Close savechanges:=False精英博客-POa+xR4O(A
ActiveWorkbook.Saved = True精英博客3h\r r d'Jg
ActiveWorkbook.Close精英博客;M,Y]Xg9b2D
Application.DisplayAlerts = True
7E2}/y$Yj'pZU%nR(km0 End Sub精英博客\2Z|;FD6O3H4^Z
Sub CloseWb2()精英博客]9oOU5L2] v};Vb
'保存所做的更改关闭工作簿精英博客Zx(ALsP2~ZV z
MsgBox "保存所做的更改并关闭工作簿"精英博客Y6gF U)X!B7^5P-[Jz
ActiveWorkbook.Close savechanges:=True精英博客+xO\t*yLw;m)I V8}
End Sub
VE^w1y'B0 精英博客O eq'TgC
Sub CloseWb3()精英博客$B F_X(?\&}
'关闭本工作簿,如果本工作簿已改变,则提示是否保存该工作簿
*H!~R`$[ J+V)H0 ActiveWorkbook.Close精英博客C-lpTOwvX

0ta)j%\8I6ahs#P(Y0 精英博客*EdY#?:mr
End Sub精英博客g-F)y UQg
Sub CloseWb4()
Cx*`.Ds-R7T0S0 '关闭并保存所有打开的工作簿
ZCy,dS0 Dim FlagWb As Workbook精英博客7r3fO'E o'g&j
Application.DisplayAlerts = False
gpJ!A(`I0 For Each FlagWb In Workbooks
I\-SaS$];yN'e#W0     If FlagWb.Name <> ActiveWorkbook.Name Then精英博客YWt%d1Gf9\
        FlagWb.Close savechanges:=True
^*?X\b#?3Dp0     End If精英博客 QC4K7E1PL8]W
Next FlagWb精英博客;Pfs|L{C3x,yU~6W)W}
ActiveWorkbook.Close savechanges:=True
XTn9lD5Os0 Application.DisplayAlerts = True精英博客&X4jn^-i%qU;U M
精英博客\ s:OB s|Kl
End Sub
'JaI"k LrP:bB0 Sub DeleteWb()
N6bS)v5s zO0 '删除磁盘中指定的文件
`5V!e)s\4B0 Kill pathname:="F:\vba程序集\新建文本文档.txt"
L'\dh!Zt+A,Ct0 精英博客:TCz d8m R!Qka#pY0N
End Sub
8X?#K8iE'gN `0 Sub CloseWb5()精英博客/W"ag(l[`J
'关闭所有打开的工作簿,并提示是否保存工作簿精英博客,~C+U`}x;MO
Workbooks.Close精英博客)bDFC Q
End Sub精英博客 ?3rZE%E@Q

;aJS] C J T2|0 13、激活工作簿精英博客i+zz;H B1EJ
Sub WbActivate()精英博客q)N:D~/Y$y
Dim n As Long, i As Long
*M yR X-y Q*_0   Dim b As String精英博客'xhWf'A h
  MsgBox "依次激活已经打开的工作簿"精英博客)Sl(g$V[Lia
  n = Workbooks.Count
p0aF[.P*z7U&\0   For i = 1 To n
&g9A5Bb;BW%V3O"_g0     Workbooks(i).Activate
-eQQ2oGkWu0     b = MsgBox("第 " & i & "个工作簿被激活,还要继续吗?", vbYesNo)
:I*P$XZ0E7g9O$d3h"G,|0     If b = vbNo Then Exit Sub精英博客 ? _0EI w7~ YM
    If i = n Then MsgBox "最后一个工作簿已被激活."
5eVPwIQ^ZG0   Next i
B#i-DI+{}-~-x {Q0 精英博客2`u$RUD,d*if|
End Sub精英博客 t{6RS"M%L-h
Sub WbCount()精英博客:N yq1@%~K5J
MsgBox "当前已打开工作簿的数量为:" & Workbooks.Count
)R7\5]3A6YR0KA0 End Sub
#H @{u7c Y8k!`0 14、检查工作簿是否包含密码
SOq0Q?~U0 Sub HasPassWord()精英博客)Oowt%e7~7M+rq
MsgBox "检查本工作簿是否有密码保护"
&RGO,Ue-y1[0 If ActiveWorkbook.HasPassWord = True Then精英博客P'S*k(Pq8K#?
   MsgBox "本工作簿有密码保护"
|)DM:`4}*{0 Else
~ K [A+nAyl%d,|0W0    MsgBox "本工作簿无密码保护"精英博客)[6?7z'\;k.lzi
End If
7]sq,X3M5ue(EA6Y0 精英博客8V'p|6|,\;]V0w
End Sub精英博客2W/tR.QUh#KX{"p
精英博客@4moptU8]

]Y:x8u-A/kl uOFo0 精英博客CU;GJr;M

TAG: Excelvba

sky62118的个人空间 sky62118 发布于2006-10-24 19:44:18
感谢版主一同分享!
经典,收下!
*o}Qx1Xr,s(|感谢版主一同分享!
Hner的个人空间 west_wolf 发布于2006-10-25 08:08:10
其实应该感谢fanjy,是他的博客给了我启发,他的博客办的相当好了,我已经把他的博客看作我vba的培训基地了了
xcd的个人空间 xcd 发布于2006-10-25 08:33:10
谢谢west_wolf 分亨
真精彩,谢谢west_wolf 分亨,收下参研了。期待着下一期的发言。:victory: :victory:
.U9Q7NM)\sIg({1gwww.officefans.net
(i"fYq;E9lj/\[ 本帖最后由 xcd 于 2006-10-25 08:34 编辑 ]
taoyilang发布于2006-12-09 09:26:11
感谢版主一同分享!
感谢版主一同分享!
我来说两句

(可选)

日历

« 2009-01-06  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 21190
  • 日志数: 73
  • 文件数: 7
  • 建立时间: 2006-10-18
  • 更新时间: 2007-08-27

RSS订阅

Open Toolbar