免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

楼主: 后勤部长
收起左侧

[EXCEL] EXCEL表格的基本操作(excel表格教程)汇集帖,欢迎大家跟帖!

  [复制链接]

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:04 | 显示全部楼层
15、        本示例向活动工作簿添加新工作表 , 并设置该工作表的名称
Set NewSheet = Worksheets.Add
NewSheet.Name = "current Budget"
16、        本示例将新建的工作表移到工作簿的末尾
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Move After:=Sheets(Sheets.Count)
End Sub
17、        本示例将新建工作表移到工作簿的末尾
Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, _
ByVal Sh As Object)
Sh.Move After:=Wb.Sheets(Wb.Sheets.Count)
End Sub
18、        本示例新建一张工作表,然后在第一列中列出活动工作簿中的所有工作表的名称
Set NewSheet = Sheets.Add(Type:=xlWorksheet)
For i = 1 To Sheets.Count
NewSheet.Cells(i, 1).Value = Sheets(i).Name
Next i
19、        本示例将第十行移到窗口的最上面?
Worksheets("Sheet1").Activate
ActiveWindow.ScrollRow = 10
20、        当计算工作簿中的任何工作表时,本示例对第一张工作表的 A1:A100 区域进行排序
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Worksheets(1)
.Range("a1:a100").Sort Key1:=.Range("a1")
End With
End Sub
21、        本示例显示工作表 Sheet1 的打印预览
Worksheets("Sheet1").PrintPreview
22、        本示例保存当前活动工作簿?
ActiveWorkbook.Save
23、        本示例保存所有打开的工作簿,然后关闭 Microsoft Excel
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
24、        下例在活动工作簿的第一张工作表前面添加两张新的工作表
Worksheets.Add Count:=2, Before:=Sheets(1)
25、        本示例设置 15 秒后运行 my_Procedure 过程,从现在开始计时
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
26、        本示例设置 my_Procedure 在下午 5 点开始运行
Application.OnTime TimeValue("17:00:00"), "my_Procedure"
27、        本示例撤消前一个示例对 OnTime 的设置
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="my_Procedure", Schedule:=False
28、        每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度
Private Sub Worksheet_Calculate()
Columns("A:F").AutoFit
End Sub
29、        本示例使活动工作簿中的计算仅使用显示的数字精度
ActiveWorkbook.PrecisionAsDisplayed = True
30、        本示例将工作表 Sheet1 上的 A1:G37 区域剪下,并放入剪贴板
Worksheets("Sheet1").Range("A1:G37").Cut
31、        Calculate 方法
计算所有打开的工作簿、工作簿中的一张特定的工作表或者工作表中指定区域的单元格,如下表所示:
所有打开的工作簿          Application.Calculate (或只是 Calculate)
计算指定工作表          Worksheets("Sheet1").Calculate
指定区域                                 Worksheets(1).Rows(2).Calculate
本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自动进行重新计算
Worksheets(1).EnableCalculation = False
本示例计算 Sheet1 已用区域中 A 列、B 列和 C 列的公式
Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate
32、        本示例更新当前活动工作簿中的所有链接
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
33、        本示例设置第一张工作表的滚动区域
Worksheets(1).ScrollArea = "a1:f10"
34、        本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿
Set NewBook = Workbooks.Add
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName
35、        本示例打开 Analysis.xls 工作簿,然后运行 Auto_Open 宏
Workbooks.Open "ANALYSIS.XLS"
ActiveWorkbook.RunAutoMacros        xlAutoOpen
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:05 | 显示全部楼层
36、        本示例对活动工作簿运行 Auto_Close 宏,然后关闭该工作簿
With ActiveWorkbook
.RunAutoMacros xlAutoClose
.Close
End With
37、        在本示例中,Microsoft Excel 向用户显示活动工作簿的路径和文件名称
Sub UseCanonical()
’Display the full path to user.
MsgBox ActiveWorkbook.FullNameURLEncoded
End Sub
38、        本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)
MsgBox ActiveWorkbook.FullName
39、        本示例关闭 Book1.xls,并放弃所有对此工作簿的更改
Workbooks("BOOK1.XLS").Close SaveChanges:=False
40、        本示例关闭所有打开的工作簿如果某个打开的工作簿有改变,Microsoft Excel 将显示询问是否保存更改的对话框和相应提示
Workbooks.Close
41、        本示例在打印之前对当前活动工作簿的所有工作表重新计算
Private Sub Workbook_BeforePrint(Cancel As Boolean)
For Each wk In Worksheets
wk.Calculate
Next
End Sub
42、        本示例对查询表一中的第一列数据进行汇总,并在数据区域下方显示第一列数据的总和
Set c1 = Sheets("sheet1").QueryTables(1).ResultRange.Columns(1)
c1.Name = "Column1"
c1.End(xlDown).Offset(2, 0).Formula = "=sum(Column1)"
43、        本示例取消活动工作簿中的所有更改
ActiveWorkbook.RejectAllChanges
44、        本示例在商业问题中使用规划求解函数,以使总利润达到最大值SolverSave 函数将当前问题保存到活动工作表上的某一区域
Worksheets("Sheet1").Activate
SolverReset
SolverOptions Precision:=0.001
SolverOK SetCell:=Range("TotalProfit"), _
MaxMinVal:=1, _
ByChange:=Range("C4:E6")
SolverAdd CellRef:=Range("F4:F6"), _
Relation:=1, _
FormulaText:=100
SolverAdd CellRef:=Range("C4:E6"), _
Relation:=3, _
FormulaText:=0
SolverAdd CellRef:=Range("C4:E6"), _
Relation:=4
SolverSolve UserFinish:=False
SolverSave SaveArea:=Range("A33")
45、        本示例隐藏 Chart1、Chart3 和 Chart5
Charts(Array("Chart1", "Chart3", "Chart5")).Visible = False
46、        当激活工作表时,本示例对 A1:A10 区域进行排序
'Private Sub Worksheet_Activate()
Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending
End Sub
47、        本示例更改 Microsoft Excel 链接
ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _
"c:\excel\book2.xls", xlExcelLinks
48、        本示例启用受保护的工作表上的自动筛选箭头?
ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
49、        本示例将活动工作簿设为只读?
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
50、        本示例使共享工作簿每三分钟自动更新一次?
ActiveWorkbook.AutoUpdateFrequency = 3
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:05 | 显示全部楼层
51、        下述 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容
Sub ClearSheet()
Worksheets("Sheet1").Cells.ClearContents
End Sub
52、        本示例对所有工作簿都关闭滚动条?
Application.DisplayScrollBars = False
53、        如果具有密码保护的工作簿的文件属性没有加密,则本示例设置指定工作簿的密码加密选项
Sub SetPasswordOptions()
With ActiveWorkbook
If .PasswordEncryptionProvider <> "Microsoft RSA SChannel Cryptographic Provider" Then
.SetPasswordEncryptionOptions _
PasswordEncryptionProvider:="Microsoft RSA SChannel Cryptographic Provider", _
PasswordEncryptionAlgorithm:="RC4", _
PasswordEncryptionKeyLength:=56, _
PasswordEncryptionFileProperties:=True
End If
End With
End Sub
54、        在本示例中,如果活动工作簿不能进行写保护,那么 Microsoft Excel 设置字符串密码以作为活动工作簿的写密码
Sub UseWritePassword()
Dim strPassword As String
strPassword = "secret"
' Set password to a string if allowed.
If ActiveWorkbook.WriteReserved = False Then
ActiveWorkbook.WritePassword = strPassword
End If
End Sub
55、        在本示例中,Microsoft Excel 打开名为 Password.xls 的工作簿,设置它的密码,然后关闭该工作簿本示例假定名为 Password.xls 的文件位于 C:\ 驱动器上
Sub UsePassword()
Dim wkbOne As Workbook
Set wkbOne = Application.Workbooks.Open("C:\Password.xls")
wkbOne.Password = "secret"
wkbOne.Close
'注意 Password 属性可读并返回 “********”
End Sub
56、        本示例将 Book1.xls 的当前窗口更改为显示公式
Workbooks("BOOK1.XLS").Worksheets("Sheet1").Activate
ActiveWindow.DisplayFormulas = True
57、        '本示例接受活动工作簿中的所有更改?
ActiveWorkbook.AcceptAllChanges
58、        本示例显示活动工作簿的路径和名称
Sub UseCanonical()
MsgBox '消息框
[b7] = ActiveWorkbook.FullName '当前工作簿
[b8] = ActiveWorkbook.FullNameURLEncoded '活动工作簿
End Sub
59、        本示例显示 Microsoft Excel 启动文件夹的完整路径
MsgBox Application.StartupPath
60、        本示例显示活动工作簿中每个工作表的名称
For Each ws In Worksheets
MsgBox ws.Name
Next ws
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:05 | 显示全部楼层
61、        本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容
For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close savechanges:=True
End If
Next w
62、        Activate 事件
激活一个工作簿、工作表、图表或嵌入图表时产生此事件
当激活工作表时,本示例对 A1:A10 区域进行排序
Private Sub Worksheet_Activate()
Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending
End Sub
63、        Calculate 事件
对于 Worksheet 对象,在对工作表进行重新计算之后产生此事件
每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度
Private Sub Worksheet_Calculate()
Columns("A:F").AutoFit
End Sub
64、        BeforeDoubleClick 事件
应用于 Worksheet 对象的 Activate 方法
当双击某工作表时产生此事件,此事件先于默认的双击操作
Private Sub expression_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量
Target 必需双击发生时最靠近鼠标指针的单元格
Cancel 可选当事件发生时为 False如果事件过程将该参数设为 True,则该过程执行完之后将不进行默认的双击操作
65、        BeforeRightClick 事件
应用于 Worksheet 对象的 Activate 方法
当用鼠标右键单击某工作表时产生此事件,此事件先于默认的右键单击操作
Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量
Target 必需右键单击发生时最靠近鼠标指针的单元格
Cancel 可选当事件发生时为 False如果该事件过程将本参数设为 True,则该过程执行结束之后不进行默认的右键单击操作
66、        Change 事件
当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生此事件
Private Sub Worksheet_Change(ByVal Target As Range)
Target 更改的区域可以是多个单元格
说明
重新计算引起的单元格更改不触发本事件可使用 Calculate 事件俘获工作表重新计算操作
67、        本示例将更改的单元格的颜色设为蓝色
Private Sub Worksheet_Change(ByVal Target as Range)
Target.Font.ColorIndex = 5
End Sub
68、        Deactivate 事件
图表、工作表或工作簿从活动状态转为非活动状态时产生此事件
Private Sub object_Deactivate()
object Chart、Workbook 或者 Worksheet有关对 Chart 对象使用事件的详细信息,请参阅 Chart 对象事件的用法
69、        本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列
Private Sub Workbook_Deactivate()
Application.Windows.Arrange xlArrangeStyleTiled
End Sub
70、        FollowHyperlink 事件
当单击工作表上的任意超链接时,发生此事件对于应用程序级或工作簿级的事件,请参阅 SheetFollowHyperlink 事件
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Target Hyperlink 类型,必需一个代表超链接目标位置的 Hyperlink 对象
71、        本示例对在当前活动工作簿中访问过的所有链接保留一个列表或历史记录
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With UserForm1
.ListBox1.AddItem Target.Address
.Show
End With
End Sub
72、        PivotTableUpdate 事件
发生在工作簿中的数据透视表更新之后
Private Sub expression_PivotTableUpdate(ByVal Target As PivotTable)
expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量
Target 必需选定的数据透视表
73、        本示例显示一则消息,说明数据透视表已经更新本示例假定您已在类模块中声明了带有事件的 Worksheet 类型的对象
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
MsgBox "The PivotTable connection has been updated."
End Sub
74、        SelectionChange 事件
当工作表上的选定区域发生改变时,将产生本事件
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Target 新选定的区域
75、        本示例滚动工作簿窗口,直至选定区域位于窗口的左上角
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveWindow
.ScrollRow = Target.Row
.ScrollColumn = Target.Column
End With
End Sub
76、        本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值
MsgBox Worksheets("Sheet1").Range("A1").Value
77、        本示例显示活动工作簿中每个工作表的名称
For Each ws In Worksheets
MsgBox ws.Name
Next ws
78、        本示例向活动工作簿添加新工作表,并设置该工作表的名称
Set newSheet = Worksheets.Add
newSheet.Name = "current Budget"
79、        本示例关闭工作簿 Book1.xls,但不提示用户保存所作更改Book1.xls 中的所有更改都不会保存
Application.DisplayAlerts = False
Workbooks("BOOK1.XLS").Close
Application.DisplayAlerts = True
80、        本示例设置保存文件时显示提示,要求用户输入汇总信息
Application.PromptForSummaryInfo = True
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:05 | 显示全部楼层
本帖最后由 后勤部长 于 2011-3-30 09:07 编辑

81、        本示例显示 Microsoft Excel 的完整路径
Private Sub aa()
MsgBox "The path is " & Application.Path
End Sub
82、        示例显示每一个可用加载宏的路径及文件名
For Each a In AddIns
MsgBox a.FullName
Next a
ChDir 语句
83、        改变当前的目录或文件夹
ChDir path
在 Power Macintosh 中,默认驱动器总是改为在 path 语句中指定的驱动器完整路径指定由卷标名开始,相对路径由冒号 (:) 开始. ChDir 可以辨认路径中指定的别名:
ChDir "MacDrive:Tmp" ' 在 Macintosh 中
84、        本示例显示当前路径分隔符
MsgBox "The path separator character is " & _
Application.PathSeparator
85、        Move 方法
将一个指定的文件或文件夹从一个地方移动到另一个地方
语法
object.Move destination
Move 方法语法有如下几部分:
部分 描述
object 必需的始终是一个 File 或 Folder 对象的名字
destination 必需的文件或文件夹要移动到的目标不允许有通配符
86、        CreateFolder 方法
创建一个文件夹
语法
object.CreateFolder(foldername)
reateFolder 方法有如下几部分:
部分 描述
object 必需的始终是一个 FileSystemObject 的名字
foldername 必需的字符串表达式,它标识创建的文件夹
87、        本示例使用 MkDir 语句来创建目录或文件夹如果没有指定驱动器,新目录或文件夹将会建在当前驱动器中
MkDir "MYDIR" ' 建立新的目录或文件夹
88、        Name 语句示例
本示例使用 Name 语句来更改文件的名称示例中假设所有使用到的目录或文件夹都已存在 在 Macintosh 中,默认驱动器名称是 “HD” 并且路径部分由冒号取代反斜线隔开
Dim OldName, NewName
OldName = "OLDFILE": NewName = "NEWFILE" ' 定义文件名
Name OldName As NewName ' 更改文件名
OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"
Name OldName As NewName ' 更改文件名,并移动文件
89、        本示例显示当前默认文件路径
MsgBox "The current default file path is " & _
Application.DefaultFilePath
90、        本示例设置替换启动文件夹
Application.AltStartupPath = "C:\EXCEL\MACROS"
FolderExists 方法
91、        如果指定的文件夹存在返回 True,不存在返回 False
语法
object.FolderExists(folderspec)
92、        本示例在单元格中启用编辑
Application.EditDirectlyInCell = True


程序说明:
93、        几种用VBA在单元格输入数据的方法:
Public Sub Writes()
1-- 2 方法,最简单在 "[ ]" 中输入单元格名称
1 [A1] = 100 '在 A1 单元格输入100
2 [A2:A4] = 10 '在 A2:A4 单元格输入10
3-- 4 方法,采用 Range(" "), " " 中输入单元格名称
3 Range("B1") = 200 '在 B1 单元格输入200
4 Range("C1:C3") = 300 '在 C1:C3 单元格输入300
5-- 6 方法,采用 Cells(Row,Column),Row是单元格行数,Column是单元格栏数
5 Cells(1, 4) = 400 '在 D1 单元格输入400
6 Range(Cells(1, 5), Cells(5, 5)) = 50 '在 E1:E 5单元格输入50
End Sub
94、        你点选任何单元格,按 Selection 按钮,则所点选的单元格均会被输入文字 "Test"
Public Sub Selection1()
Selection.Value = "Test" '在任何你点选的单元格输入文字 "Test"
End Sub
95、        几种如何把别的工作表 Sheet4 数据,读到这个工作表的方法:在被读取的单元格前加上工作表名称 Sheet4
Public Sub Writes()
1-- 2 方法,最简单在被读取的 "[ ]" 前加上被读取的工作表名称 Sheet4
1 [A1] = Sheet4.[A1] '把Sheet4 A1 单元格的数据,读到 A1单元格
2 [A2:A4] = Sheet4.[B1] ''把 Shee4 工作表单元格 B1 数据,读到 A2:A4 单元格
3-- 4 方法,在被读取的工作表 Range(" ")的 Range 前加上被读取的工作表名称Sheet4
3 Range("B1") = Sheet4.Range("B1") ''把 Shee4工作表单元格 B1 数据,读到 B1 单元格
4 Range("C1:C3") = Sheet4.Range("C1") '把 Shee4 工作表单元格 C1 数据,读到 C1:C3 单元格
5-- 6 方法,在被读取的工作表 Cells(Row,Column),Cells 前加上被读取工作表名称 Sheet4
5 Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表单元格 D1 数据,读到 D1 单元格
6 Range(Cells(1, 5), Cells(5, 5)) = Sheet4.Cells(1, 5) '把 Shee4 工作表单元格 E1 数据,读到 E1:E 5单元格
End Sub
96、        你点选任何单元格,按 Selection 按钮,则所点选的单元格均会被输入 Shee4 工作表单元格 F1 数据
Public Sub Selection1()
Selection.Value = Sheet4.[F1] '把 Shee4 工作表单元格 F1 数据,读到任何你点选的单元格
End Sub
97、        如何利用 Worksheet_SelectionChange 输入数据的方法
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target = 100
End Sub
Target 指的是你鼠标所选的单元格,Worksheet_SelectionChange() 事件的参数
可以是一个也可以是好几个单元格
Range 是 Excel 特有的变量形态,叫范围
Target As Rang 是把 Target 这个参数设定为 Range 变量形态
Target = 100 是把你点选的单元格输入数字100
98、        如何利用 Worksheet_SelectionChange 在限定的单元格输入数据的方法
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 2 And Target.Column = 2 Then
Target = 100
End If
End Sub
If ... Then ... End If 这是我们学的这一个逻辑判断语句
Target.Row >= 2,指的是鼠标选定的单元格的行大于或等于 2
Target.Column = 2 ,指的是鼠标选定的单元格的栏等于 2
If Target.Row >= 2 And Target.Column = 2 Then 指的是只有在Target.Row >= 2及Target.Column = 2二个条件成立时
就是 (Target.Row >= 2) 为True及(Target.Column = 2)为True时,才执行下面的程序 Target=100,
也就是 B 栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输入数据
99、        比较 Worksheet_SelectionChange() 与用按钮 CommandButton1_Click() 来执行程序二者的方法与写法有何不同
Worksheet_SelectionChange()事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 2 And Target.Column = 2 Then
Target = 100
End If
End Sub
按钮CommandButton1_Click()
Private Sub CommandButton1_Click()
If ActiveCell.Row >= 2 And ActiveCell.Column >= 3 Then
ActiveCell = 100
End If
End Sub
二者执行方法最大的地方,在于 Worksheet_SelectionChange() 是自动的,你不用了解他是怎么完成工作的
按钮 CommandButton1_Click() 是人工的,比 SelectionChange()多一道手续,就是要去按那接钮,程序才会执行
SelectionChange() 有一个参数 Target 可用;CommandButton1_Click ()没有
所以我们要用 ActiveCell 内定函数来取代Target,ActiveCell 与 Target最大的不同点他只能指定一个单元格
就是你选取多个单元格也只有最上面的单元格会加上数据;用 Selection 取代 ActiveCell, 用法就跟 Target 一样了

100、        完整的 If...Then ┅ End 逻辑判断式
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row >= 2 And Target.Column = 2 Then
Target = 200
ElseIf Target.Row >= 2 And Target.Column = 3 Then
Target = 300
ElseIf Target.Row >= 2 And Target.Column = 2 Then
Target = 400
Else
Target = 500
End If
End Sub
这是个完整的 If 逻辑判断式,意思是说,假如 If 後的判断式条件成立的话,就执行第二条程序,否则假如 ElseIf 後的判断式条件成立的话,就执行第四条程序,否则假如另一个 ElseIf 後的判断式条件成立的话,就执行第六条程序
Else 的意思是说,假如以上条件都不成立的话,就执行第八条程序
他的执行方式是假如 IF 的条件成立的话,就不执行其它ElseIf 及Else 的逻辑判断式,假如 If 後的条件不成立的话才会执行 ElseIf 或 Else 逻辑判断式第二个 ElseIf後的条件因为与 IF 後的条件一样,所以这个判断式後面的 Target=400 将是永远无法执行到的程序
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:06 | 显示全部楼层
101、        我们为什麽要用变数
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i , j As Integer
Dim k As Range
i = Target.Row
j = Target.Column
Set k = Target
If i >= 2 And j = 2 Then
k = 200
ElseIf i >= 2 And j = 3 Then
k = 300
ElseIf i >= 2 And j = 4 Then
k = 400
Else
k = 500
End If
End Sub
跟VBALesson 6比较,程序是不是明朗多了,在前课重复的用 Target.Row,Target.Column及Target来写程序是不是有一点烦用变量的第一个好处大家马上感觉得出来,就是可以简化程序
使用变量前,你得先宣告变量宣告变量的方法是在 "Dim " 后面写上变量 " i " As 后面接上变量的形态 "Integer"
Dim i , j As Integer 就是宣告 i 与 j 为整数变量,这是同时宣告二个变量 i 与 j 所以要在二个变量间加个 " , "号
Dim k As Range 是宣告 k 为范围资料形态,Range这是 Excel 特有的资料形态
i = Target.Row是把当前单元格的行数,指定给变量 i
j = Target.Column 是把当前单元格的栏数,指定给变量 j
Set k = Target 是把当前的单元格,指定给变量 k
用像 i 与 j 这样简单的变量,在程序的前面你可能还记得 i 或 j 代表着什厶程序写长了,你可能忘记 i 或 j 代表着什厶所以最好的方法是用比较有意义的代号,来为变量命名如 iRow 或 iCol 来取代 i 及 j  
102、        体会一下Worksheet_Change()事件
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow, iCol As Integer
iRow = Target.Row
iCol = Target.Column
If iRow >= 2 And iCol = 2 And Target <> "" Then
Application.EnableEvents = False
Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2
Application.EnableEvents = True
ElseIf iRow >= 2 And iCol = 2 And Target = "" Then
Cells(iRow, iCol + 1) = ""
Else
Cells(iRow, iCol + 1) = ""
End If
End Sub
前几个教程都是用Worksheet_SelectionChange 事件来举例子,大家应该能体会他是怎厶一回事了吧
这个教程就是要让你来体会什厶是Worksheet_Chang()事件因为这二个事件在VBA都是非常有用的,所以一定要了解
简单的说,前者是你鼠标移动到那个单元格,就触发那个事件的执行後者是要等到你点选的单元格,数?有了改变才会触发事件的执行二者执行的时机一前一後
Target <> "" 是代表限定当前的单元格要是有数?的,才会执行以下三行的程序
Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2,是你在 B 栏输入数?时,C 栏将可得到 B 栏二倍的数?
Target = "" 是限定当前的单元格要是没有数?的,才会执行以下一行的程序
Cells(iRow, iCol + 1) = "",是把 C 栏的数?清成空格
Application.EnableEvents = False与Application.EnableEvents = True,这是个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序它的目的在抑制事件连锁执行简单的说就是,在 B 字段所触发的事件,不愿在其它单元格再触发另一个Worksheet_Change()事件
103、        体会一下Worksheet_Change()事件连锁反应
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer
iRow = Target.Row
Application.EnableEvents = False
Cells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2)
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer
iRow = Target.Row
'Application.EnableEvents = False
Cells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2)
'Application.EnableEvents = True
End Sub
这个程序的目的是要在 B2 输入新的数?时,C2 会将 B2 输入的新数?加上 C2 原有的数?呈现在 C2 上
照上面有加上 Application.EnableEvents = False 程序执行当然没问题
现在你在 Application.EnableEvents = False 与 Application.EnableEvents = True 前加上「 '」看看
程序前加上「 '」的目的是要使「 '」之后的文字变成说明文字,程序执行时是会跳过说明文字,不执行说明文字的内容
程序前加上「 '」符号后,文字会变成绿色
执行第二个程序时,你将发现 C2 不会按你所要求的,呈现结果
这就是所谓的事件连锁反应
104、        我想运行一个宏,就能在当前工作表B3上填上一条公式;这条公式的结果是所有工作 表上的B4单元格的和.请问这个宏该如何写
Sub gg()
Dim sh As Worksheet, shname$
For Each sh In Worksheets
shname = sh.Name
ActiveSheet.Range("b3").value = ActiveSheet.Range("b3").value + Worksheets(shname).Range("b4")
Next
End Sub
105、        VBA中怎样创建一个名为“table”的新工作表
通过VBA编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对于新创建的工作表,由于其名字并非特定,所以就不好使用所创建的新表了不知各位有何高见
Sheets.Add
ActiveSheet.Name = "table"
106、        如何用VBA检索表1中A列与表2,3,4,5.....中A列相同的行并把后者整行拷贝到表1检索到的行中
Sub Copy1()
Dim Row_dn1, Row_dnN, i, j, n As Integer
Row_dn1 = Sheet1.Range("A65536").End(xlUp).Row
k = 1: n = 1
For Each wSheet In ActiveWorkbook.Worksheets
With wSheet
If .Name <> "Sheet1" Then
Row_dnN = .Range("A65536").End(xlUp).Row
For i = 2 To Row_dn1
For j = 2 To Row_dnN
If .Cells(j, 1) = Sheet1.Cells(i, 1) Then
.Rows(j & ":" & j).Copy Destination:=Sheet1.Rows(Row_dn1 + n & ":" & Row_dn1 + n)
n = n + 1
End If
Next j
Next i
End If
End With
Next wSheet
End Sub
107、        如果要用VBA程式输入密码使用下列程式码
Sub EnterNewPW()
'程式说明:利用SendKey输入VBAProject密码
'注意事项:执行本程式需要在Excel视窗,不能在VBE视窗
Application.SendKeys "%{F11}", True         'Alt + F11 切换到VBA视窗
Application.SendKeys "%T", True                         'ALT + T 工具(繁体中文是(T))
Application.SendKeys "e", True                         '工具(T)-VBproject属性(E)
Application.SendKeys "^{TAB}", True         'TAB 键(切换到PAge2 保护页面)
Application.SendKeys "{+}", True                 '选取Checkbox方块(锁定专案以供检视) ({+} 选取, {-} 取消选取)
Application.SendKeys "{TAB}", True         'TAB 键(跳到第一次输入密码 Textbox
myPW = "chijanzen"                                                         '假设密码 chijanzen
Application.SendKeys myPW, True                        '输入密码
Application.SendKeys "{TAB}", True         'TAB 键(跳到第二次输入密码 Textbox
Application.SendKeys myPW, True                         '输入密码
Application.SendKeys "{ENTER}", True         '按确定钮(预设值)
Application.SendKeys "%{F11}", True         '返回Excel视窗
End Sub
108、        冒泡排序法之所以成为“冒泡排序”是因为值较小的或是较轻的元素浮到作为继续排序的一组数的顶部
Sub Macro1()
Dim i As Integer
Dim j As Integer
Dim t as integer
Static number(1 To 10) As Integer
For i = 1 To 10
number(i) = inputbox“输入要排序的数:”
Next i
For i = 10To 2 Step -1
For j = 1 To i – 1
‘下面进行位置交换
If number(j) > number(j + 1) Then
t = number(j + 1)
number(j + 1) = number(j)
number(j) = t
End If
Next j
Next i
For i = 1 To 20
Print number(i)
Next i
End sub
首先定义一个数组:通过循环录入10个整数,然后用一个二重循环测试前一个数是否大于后一个数如果大于则交换两个数的下标,即交换两个数在数组中的位置,交换通过一个变量来进行
我先用传统的方法解决这个问题,经过比较,选用了较为简单的和高效的排序方法
——“快速排序”,具体算法可参考数据结构等有关书籍对所有数据排序后再合
并相同数据,合并程序较为简便,我开始时采用了这种方法,但后来发现对于这些
的数据,先合并后排序速度更快,因为有大量相同的数据合并是采用“标记”算
法,具体如下:(设数据已存放在sData()数组中 ,结果存到Queryp()数组,
Amount是数据个数)
'把相同元素置 0
For i = 1 To Amount
If sData(i) <> 0 Then
For j = i + 1 To Amount
If sData(i) = sData(j) Then sData(j) = 0
Next j
End If
Next i
'删除相同元素
Queryp(1) = sData(1)
k = 1
For i = 2 To Amount
If Not (sData(i) = 0) Then
k = k + 1
Queryp(k) = sData(i)
End If
Next i
kMax = k
ReDim Preserve Queryp(kMax)
虽然这样使得运算速度有所高,但是仍然要进行大量的循环运算,占据了程序大部
分的运算时间于是我一直在寻觅一种更为高效的算法
功夫不负有心人,在仔细分析数据的特征,比较了多种方案之后,我终于找到了一
种相当成功的算法,原来要3到4秒的运算缩短到仅需0.1到0.2秒
我遇到的数据具有以下特征:①相同数据很多,②最大、最小数之间相差不到3,
③都是带两位小数的正数
针对数据的特征,我采用了以下算法:
针对数据的特征,我采用了以下算法:
步骤:
1. 用一个循环找出整数和小数部分的最大、最小值小数部分的最大、最小值乘
以100转为整数
2. 定义一个二维数组,下标范围分别是整数和小数部分的最小值到最大值
3. 再用一个循环把所有源数据填入刚才定义的二维数组,填写规则是,源数据的
整数和小数部分分别对应二维数组的两个下标例如,“13.51"填到“A(13,51)"

4. 最后顺向或逆向读取二维数组中的非零数据即可得到从小到大或从大到小排列
的数据,而且不会含有重复数据
用VB 编写的程序如下:
'****密集型数据处理****
Dim i As Long, j As Long, k As Long, kMax As Long
Dim Queryp() As Single
ReDim Queryp(Amount)
Dim IntegerPart As Integer, DecimalPart As Integer
Dim IPmax As Integer, IPmin As Integer
Dim DPmax As Integer, DPmin As Integer
Dim DiffDataArray()
'读取数据
ReadData
IPmax = 0: IPmin = 1000
DPmax = 0: DPmin = 99
For i = 1 To Amount
' 找整数和小数部分的最大、最小值
IntegerPart = Int(sData(i))
DecimalPart = (sData(i) - IntegerPart) * 100
If IntegerPart > IPmax Then
IPmax = IntegerPart
ElseIf IntegerPart < IPmin Then
IPmin = IntegerPart
End If
If DecimalPart > DPmax Then
DPmax = DecimalPart
ElseIf DecimalPart < DPmin Then
DPmin = DecimalPart
End If
Next i
ReDim DiffDataArray(IPmin To IPmax, DPmin To DPmax)
'填入数据
For i = 1 To Amount
IntegerPart = Int(sData(i))
DecimalPart = (sData(i) - IntegerPart) * 100
DiffDataArray(IntegerPart, DecimalPart) = sData(i)
Next i
Next i
'提取数据
k = 0
For i = IPmax To IPmin Step -1
For j = DPmax To DPmin Step -1
If DiffDataArray(i, j) <> 0 Then
k = k + 1
Queryp(k) = DiffDataArray(i, j)
End If
Next j
Next i
kMax = k
ReDim Preserve Queryp(kMax)
该方法对于本人遇到的这种“密集型”数据最为有效,但是如果遇上“稀疏型”数
据,例如最大、最小值相差几千,甚至上万的数据,就没什么优势了,而且会占用
较大的内存
经过改进,我得到了处理稀疏型数据的高效算法高效的前提条件同样是源数据具
有大量相同数据思路是在前一种方法的基础上增加一个单维数组,用来保存整数
部分数据,保存过程中用插入法对其进行排序因为有大量重复数据,要排序的数
据量相对较少当从二维数组中读取数据时,用单维数组代入二维数组的第一个下
标,具体代码下:
'****稀疏型数据处理****
Dim i As Long, j As Long, k As Long, kMax As Long
Dim Queryp() As Single
ReDim Queryp(Amount)
Dim IntegerPart As Integer, DecimalPart As Integer
Dim IPmax As Integer, IPmin As Integer
Dim DPmax As Integer, DPmin As Integer
Dim IPArray() As Integer, IPAamount As Integer
ReDim IPArray(Amount)
Dim DiffDataArray()
'读取数据
ReadData
IPmax = 0: IPmin = 1000
DPmax = 0: DPmin = 99
IPAamount = 0
For i = 1 To Amount
'获取整数和小数部分的最大最小值
IntegerPart = Int(sData(i))
DecimalPart = (sData(i) - IntegerPart) * 100
If IntegerPart > IPmax Then
IPmax = IntegerPart
ElseIf IntegerPart < IPmin Then
IPmin = IntegerPart
IPmin = IntegerPart
End If
If DecimalPart > DPmax Then
DPmax = DecimalPart
ElseIf DecimalPart < DPmin Then
DPmin = DecimalPart
End If
'对整数部分"IPArray()"进行插入法排序 (从大到小)
For j = 1 To IPAamount
If IntegerPart > IPArray(j) Then
IPAamount = IPAamount + 1
For k = IPAamount To j + 1 Step -1
IPArray(k) = IPArray(k - 1)
Next k
IPArray(j) = IntegerPart
Exit For
ElseIf IntegerPart = IPArray(j) Then
Exit For
End If
Next j
If j > IPAamount Then
IPAamount = IPAamount + 1
IPArray(IPAamount) = IntegerPart
End If
Next i
ReDim DiffDataArray(IPmin To IPmax, DPmin To DPmax)
'填入数据
For i = 1 To Amount
IntegerPart = Int(sData(i))
DecimalPart = (sData(i) - IntegerPart) * 100
DiffDataArray(IntegerPart, DecimalPart) = sData(i)
Next i
'提取数据
k = 0
For i = 1 To IPAamount
For j = DPmax To DPmin Step -1
If DiffDataArray(IPArray(i), j) <> 0 Then
k = k + 1
Queryp(k) = DiffDataArray(IPArray
(i), j)
End If
Next j
Next i
kMax = k
ReDim Preserve Queryp(kMax)
k
ReDim Preserve Queryp(kMax)
具体采用哪种算法,要看数据的性质而定,以下是本人的一些实测数据,仅供参考
如果你有更好的方法,可不要忘记和朋友们分享哦
自动隐藏表格中无数据的行
表1 是数据源,经常改变;
表2 引用表1 中某列有数据的单元格(利用动态位址已实现)
由于表1 的改变,表2 的大小随之而变
问题:如何实现表2 中没有数据的行(有公式)自动隐藏?谢谢赐教!
Sub abc()
For i = 1 To 300
If Cells(i, 1).value = "" Then Rows(i).Hidden = True
Next i
End Sub
你写的语句可以解决隐藏的问题,可是如果我执行了它之后,再在表1中增加数据,表2不会自动显示有了数据的行如何修改?
将此宏设为自动运行(打开文件时)
Sub abc()
For i = 1 To 300
If Cells(i, 1).value <>"" Then Rows(i).Hidden = false
Next i
End Sub
用VBA如何自动合并列的内容?
用VBA如何自动合并列的内容?
To hongjian :
Sub MergeTest()
For i = 3 To 30
Cells(i, 3) = Cells(i, 1) & Chr(10) & Cells(i, 2)
Next
End Sub
109、        基于VB和EXCEL的报表设计及打印
  在现代管理信息系统的开发中,经常涉及到数据信息的分析、加工,
最终还需把统计结果形成各种形式的报表提供给领导决策参考,或进行外
部交流在Visual Basic中制作报表,通常是用数据环境设计器(Data
Environment Designer)与数据报表设计器(Data Report Designer),或者
使用第三方产品来完成但对于大多数习惯于Excel报表的用户而言,用以
上方法生成的报表在格式和功能等方面往往不能满足他们的要求
  由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,
通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输
出这样实现了Visual Basi应用程序对Excel的控制本文将针对一个具
体实例,阐述基于VB和EXCEL的报表设计及打印过程
 1)创建Excel对象
  Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对
象到透视表,图表等复杂的对象下面简单介绍一下其中最重要,也是用
得最多的五个对象
(1)Application对象
  Application对象处于Excel对象层次结构的顶层,表示 Excel自身的
运行环境
(2)Workbook对象
  Workbook对象直接地处于Application对象的下层,表示一个Excel工
作薄文件
(3)Worksheet对象
  Worksheet对象包含于Workbook对象,表示一个Excel工作表
(4)Range对象
  Range对象包含于Worksheet对象,表示 Excel工作表中的一个或多个
单元格
(5)Cells对象
  Cells对象包含于Worksheet对象,表示Excel工作表中的一个单元格
  如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码
启动了Excel并创建了一个新的包含一个工作表的工作薄:
Dim zsbexcel As Excel.Application
Set zsbexcel = New Excel.Application
    zsbexcel.Visible = True
如要Excel不可见,可使zsbexcel.Visible = False
  zsbexcel.SheetsInNewWorkbook = 1
  Set zsbworkbook = zsbexcel.Workbooks.Add
 2)设置单元格和区域值
  要设置一张工作表中每个单元格的值,可以使用Worksheet对象的
Range属性或Cells属性
With zsbexcel.ActiveSheet
    .Cells(1, 2).value = "100"
    .Cells(2, 2).value = "200"
    .Cells(3, 2).value = "=SUM(B1:B2)"
    .Range("A3:A9") = "中国人民解放军"
  End With
  要设置单元格或区域的字体、边框,可以利用Range对象或Cells对象
的Borders属性和Font属性:
  With objexcel.ActiveSheet.Range("A2:K9").Borders  '边框设置
    .LineStyle = xlBorderLineStyleContinuous
    .Weight = xlThin
    .ColorIndex = 1
  End With
  With objexcel.ActiveSheet.Range("A3:K9").Font  '字体设置
    .Size = 14
    .Bold = True
    .Italic = True
    .ColorIndex = 3
  End With
  通过对Excel单元格和区域值的各种设置的深入了解,可以创建各种复
杂、美观、满足需要的、具有自己特点的报表
 3)预览及打印
  生成所需要的工作表后,就可以对EXCEL发出预览、打印指令了
  zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait   '
  设置打印方向
  zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4   '
  设置打印纸的打下
  zsbexcel.Caption = "打印预览"        '设置预览窗口的
  标题
  zsbexcel.ActiveSheet.PrintPreview      '打印预览
  zsbexcel.ActiveSheet.PrintOut        '打印输出
  通过打印方向、打印纸张大小的设置,不断进行预览,直到满意为止,
最终进行打印输出
  为了在退出应用程序后EXCEL不提示用户是否保存已修改的文件,需使
用如下语句:
  zsbexcel.DisplayAlerts = False
  zsbexcel.Quit    '退出EXCEL
  zsbexcel.DisplayAlerts = True
  如此设计的报表打印是通过 EXCEL程序来后台实现的对于使用者来
说,根本看不到具体过程,只看到一张张漂亮的报表轻易地被打印出来了
 4)具体实例
  下面给出一个具体实例,它在window98、Visual Basic 6.0、
Microsoft Office97的环境下调试通过
  在VB中启动一个新的Standard EXE工程,在“工程”菜单的“引用”
选项下引用Excel Object Library;然后在Form中添加一个命令按钮
cmdExcel;最后在窗体中输入如下代码:
  Dim zsbexcel As Excel.Application
      Private Sub cmdExcel_Click()
          Set zsbexcel = New Excel.Application
   zsbexcel.Visible = True
   zsbexcel.SheetsInNewWorkbook = 1
   Set zsbworkbook = zsbexcel.Workbooks.Add
   With zsbexcel.ActiveSheet.Range("A2:C9").Borders   '边框设置
      .LineStyle = xlBorderLineStyleContinuous
      .Weight = xlThin
      .ColorIndex = 1
      End With
   With zsbexcel.ActiveSheet.Range("A3:C9").Font  '字体设置
       .Size = 14
      .Bold = True
      .Italic = True
      .ColorIndex = 3
   End With
  zsbexcel.ActiveSheet.Rows.HorizontalAlignment =
xlVAlignCenter   '水平居中
  zsbexcel.ActiveSheet.Rows.VerticalAlignment =
xlVAlignCenter    '垂直居中
  With zsbexcel.ActiveSheet
    .Cells(1, 2).value = "100"
    .Cells(2, 2).value = "200"
    .Cells(3, 2).value = "=SUM(B1:B2)"
    .Cells(1, 3).value = "中国人民解放军"
    .Range("A3:A9") = "50"
  End With
 zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait    '
xlLandscape
 zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
 zsbexcel.ActiveSheet.PrintOut
 zsbexcel.DisplayAlerts = False
 zsbexcel.Quit
 zsbexcel.DisplayAlerts = True
 Set zsbexcel = Nothing
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:07 | 显示全部楼层
110、        提高EXCEL中VBA的效率
111、          方法1:尽量使用VBA原有的属性、方法和Worksheet函数
  由于Excel对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能对它们不全部了解,这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码段,而这些代码段的运行效率显然与Excel对象的属性、方法完成任务的速度相差甚大例如用Range的属性CurrentRegion来返回 Range 对象,该对象代表当前区(当前区指以任意空白行及空白列的组合为边界的区域)同样功能的VBA代码需数十行因此编程前应尽可能多地了解Excel对象的属性、方法
  充分利用Worksheet函数是提高程序运行速度的极度有效的方法如求平均工资的例子:For Each c In Worksheet(1).Range(″A1:A1000″)
   Totalvalue = Totalvalue + c.value
  Next
  Averagevalue = Totalvalue / Worksheet(1).Range(″A1:A1000″).Rows.Count
  而下面代码程序比上面例子快得多:
  Averagevalue=Application.WorksheetFunction.Average(Worksheets(1).Range(″A1:A1000″))
  其它函数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代码,提高程序的运行速度
112、          方法2:尽量减少使用对象引用,尤其在循环中
  每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调用都是需要时间的,减少使用对象引用能加快VBA代码的运行例如
  1.使用With语句
   Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″
   Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″ ...
  则以下语句比上面的快
  With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font
   .Name = ″Pay″
   .FontStyle = ″Bold″
   ...
  End With
  2.使用对象变量
   如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少对对象的访问如:
  Workbooks(1).Sheets(1).Range(″A1″).value = 100
   Workbooks(1).Sheets(1).Range(″A2″).value = 200
  则以下代码比上面的要快:
  Set MySheet = Workbooks(1).Sheets(1)
  MySheet.Range(″A1″).value = 100
  MySheet.Range(″A2″).value = 200
  3.在循环中要尽量减少对象的访问
  For k = 1 To 1000
   Sheets(″Sheet1″).Select
   Cells(k,1).value = Cells(1,1).value
  Next k
  则以下代码比上面的要快:
  Set Thevalue = Cells(1,1).value
  Sheets(″Sheet1″).Select
  For k = 1 To 1000
   Cells(k,1).value = Thevalue
 Next k
113、          方法3:减少对象的激活和选择
  如果你的通过录制宏来学习VBA的,则你的VBA程序里一定充满了对象的激活和选择,例如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等,但事实上大多数情况下这些操作不是必需的例如
  Sheets(″Sheet3″).Select
  Range(″A1″).value = 100
  Range(″A2″).value = 200
 可改为:
  With Sheets(″Sheet3″)
   .Range(″A1″).value = 100
   .Range(″A2″).value = 200
  End With
114、          方法4:关闭屏幕更新
  如果你的VBA程序前面三条做得比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效的方法,缩短运行时间2/3左右关闭屏幕更新的方法:
  Application.ScreenUpdate = False
  请不要忘记VBA程序运行结束时再将该值设回来:
  Application.ScreenUpdate = True
  以上是提高VBA运行效率的比较有效的几种方法
本示例重复最近用户界面命令本示例必须放在宏的第一行
Application.Repeat
下例中,变量 counter 代替了行号此过程将在单元格区域 C1:C20 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)
Sub RoundToZero1()
For Counter = 1 To 20
Set curCell = Worksheets("Sheet1").Cells(Counter, 3)
If Abs(curCell.Value) < 0.01 Then curCell.Value = 0
Next Counter
End Sub
述过程在单元格区域 A110 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)
Sub RoundToZero2()
For Each c In Worksheets("Sheet1").Range("A1:D10").Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub
下述过程在工作表上运行时,将在活动单元格周围的区域内循环,将所有绝对值小于 0.01 的数字都设置为 0(零)
Sub RoundToZero3()
For Each c In ActiveCell.CurrentRegion.Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub
下述过程在工作的空行写入数据
Sub 输入()
x = 3 '从第3行开始
Do While Not (IsEmpty(Cells(x, 2).Value)) '判断第2列的最后一行(即空行的上一行)
x = x + 1 '在最后一行加一行即为空行
Loop
'以下为写入数据
Cells(x, 1) = Sheets("sheet1").Cells(1, 3)
Cells(x, 2) = Sheets("sheet1").Cells(2, 3)
Cells(x, 3) = Sheets("sheet1").Cells(3, 3)
Cells(x, 4) = Sheets("sheet1").Cells(4, 3)
Sheets("sheet1").Select
Cells(2, 3) = Cells(2, 3) + 1 '每写一行自动加入序列号
Sheets("sheet2").Select
End Sub
Sub 每日结帐()
' 录入发生额 Macro
' 30 记录的宏 2002-12-18
Application.ScreenUpdating = False '关闭屏幕显示
If Application.InputBox("请输入密码:") = 1234 Then '此行与倒数3-5行设置密码
Dim Msg, Style, Title, X, MyString '设置变量
Msg = "!!!结帐后不能恢复,结帐吗?" ' 定义信息
Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定义按钮
Title = "本日结帐!" ' 定义标题
X = MsgBox(Msg, Style, Title)
If X = vbYes Then ' 用户按下“是”
Close
Call 备份
Call 重算所有表
Sheets("日报表").Select
ActiveSheet.Unprotect
Selection.AutoFilter Field:=1 '全部显示
Sheets("余额表").Select
ActiveSheet.Unprotect
Selection.AutoFilter Field:=1 '全部显示
Range("e6:g183,i6:k183").Copy
Sheets("日报表").Select
Range("n6").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
[A2].Copy
Sheets("银行帐").Select
Range("F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
Application.CutCopyMode = False
End If
Else: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码
End If
Application.ScreenUpdating = True '打开屏幕显示
End Sub
Sub 月末结帐()
Application.ScreenUpdating = False
If Application.InputBox("请输入密码:") = 1234 Then '此行与倒数3-5行设置密码
'以下三行为消息框
Dim Msg, Style, Title, X, MyString
Msg = "!!!结帐后不能恢复,结帐吗?" ' 定义信息
Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定义按钮
Title = "月末结帐!" ' 定义标题
X = MsgBox(Msg, Style, Title)
If X = vbYes Then ' 用户按下“是”
Close
Call 备份
Call 重算所有表
Sheets("余额表").Select
[L6183].Copy
Sheets("日报表").Select
Range("M6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("N6").Select
[N6:S183] = ""
Sheets("银行帐").Select
[A7:u3000] = ""
[K5].Copy
Range("K6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
End If
Else: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码
End If
Application.ScreenUpdating = True
End Sub
Sub 打日报表()
Application.ScreenUpdating = False
Sheets("日报表").Select
Call 重算所有表
ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码
Selection.AutoFilter Field:=1, Criteria1:="1.00 "
'自动筛选
'以下10行弹出窗口输入打印信息
Dim myPrintNum As Integer
Dim myPrompt, myTitle As String
myPrompt = "请输入要打印的份数"
myTitle = "打印选取范围"
myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)
If myPrintNum <> 0 Then
' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL 6 在 Ne00:" '指定打印机
ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum, Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数
Else
MsgBox "请输入要打印的份数"
End If
ActiveSheet.ShowAllData '全部显示
ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码
Sheets("封面").Select
Application.ScreenUpdating = True
End Sub
Sub 打印余额()
Application.ScreenUpdating = False
Sheets("余额表").Select
Call 重算所有表
ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码
ActiveWindow.ScrollColumn = 10
Selection.AutoFilter Field:=1, Criteria1:="<>"
'以下10行弹出窗口输入打印信息
Dim myPrintNum As Integer
Dim myPrompt, myTitle As String
myPrompt = "请输入要打印的份数"
myTitle = "打印选取范围"
myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)
If myPrintNum <> 0 Then
' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL 6 在 Ne00:" ' '指定打印机
ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum, Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数
Else
MsgBox "请输入要打印的份数"
End If
ActiveSheet.ShowAllData '全部显示
ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码
Sheets("封面").Select
Application.ScreenUpdating = True
End Sub
Sub 备份()
Dim y '变量声明-需保存工作表的路径和名称
[M1] = ActiveWorkbook.FullName '单元格M1=当前工作簿的路径和名称
y = cells(1, 14) 'Y=单元格N1的值,即计算后的需保存工作簿的路径和名称
Worksheets("封面").UsedRange.Columns("M:N").Calculate '计算指定区域
ActiveWorkbook.SaveCopyAs y '备份到指定路么Y
End Sub
Sub 重算活动表()
With Application
.Calculation = xlManual
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = True
ActiveWindow.DisplayZeros = True
ActiveSheet.Calculate
End Sub
Sub 重算指定表()
Attribute 重算指定表.VB_ProcData.VB_Invoke_Func = "z\n14"
Worksheets("银行帐").Calculate
Worksheets("日报表").Calculate
End Sub
单元格数据改变引起计算激活过程
Private Sub Worksheet_Change(ByVal Target As Range)
Dim irow, icol As Integer
irow = Target.Row '变量行irow
icol = Target.Column '变量列icol
If irow > 6 And icol = 3 And cells(irow, 3) >= cells(irow - 1, 3) Then '>大于6行,并且第3列,当本行 3列>2行3列
Application.EnableEvents = False
cells(irow, 2) = cells(irow - 1, 2) '本行 2 列=上一行2列
Application.EnableEvents = True
ElseIf irow > 6 And icol = 3 And cells(irow, 3) < cells(irow - 1, 3) Then '>大于6行,并且第3列,当本行 3列>2行3列
Application.EnableEvents = False
cells(irow, 2) = cells(irow - 1, 2) + 1 '本行 2 列=上行2列+1
Application.EnableEvents = True
ElseIf (icol = 3 Or icol = 4 Or icol = 6 Or icol = 8 Or icol = 9 Or icol = 10 Or icol = 12 Or icol = 13) And irow > 6 Then 'And Target <> ""
Application.EnableEvents = False
cells(irow, 5) = "=单位名称"
cells(irow, 7) = "=摘要"
cells(irow, 11) = "=余额"
Range(cells(irow, 14), cells(irow, 16)) = "=预内外收支NOP"
cells(irow, 17) = "=审核Q"
cells(irow, 18) = "=对帐U"
Range(cells(irow, 19), cells(irow, 20)) = "=内转收支XY"
cells(irow, 21) = "=政采Z"
Application.EnableEvents = True
End If
End Sub
'计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏
=CELL("FILENAME")
'改变Excel界面标题的宏
Private Sub Workbook_Open()
Application.Caption = "吃过了"
End Sub
'自动刷新单元格A1内显示的日期\时间的宏
Sub mytime()
Range("a1") = Now()
Application.OnTime Now + TimeValue("00:00:01"), "mytime"
End Sub
'用单元格A1的内容作为文件名保存当前工作簿的宏
Sub b()
ActiveWorkbook.SaveCopyAs Range("A1") + ".xls"
End Sub
'激活窗体的宏,此宏写入有窗体的工作表内
Private Sub CommandButton1_Click() '点数据录入按钮控件激活窗体
Load UserForm3 '激活窗体
UserForm3.StartUpPosition = 3 '激活窗体
UserForm3.Show '激活窗体
End Sub
'以下为窗体中点击各按钮运行的宏,写入窗体内
Public pos As Integer '声明变量pos
'战友确定按钮语句
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False '此句和最后一句旨在不显示宏的执行过程
'On Error GoTo ErrorHandle '可以不要
'ErrorHandle: '可以不要
'If Err.Number = 13 Then '可以不要
'Exit Sub '可以不要
'End If '可以不要
Call writeToWorkSheet '执行宏writetoworksheet
UserForm3.Hide '退出窗体,继续按钮少此句,退出按钮执行此句
Unload UserForm3 '退出窗体,继续按钮少此句,退出按钮执行此句
Call 批量打印 '[此处到接顺序2]
[L2] = "" '[到此处结束]
Sheets("打印信息").Select
Application.ScreenUpdating = True
End Sub
'退出按钮语句
Private Sub CommandButton2_Click()
UserForm3.Hide
Unload UserForm3
End Sub
'将窗体内的文本框中的数据写进工作表的单元格
Private Sub writeToWorkSheet()
ActiveSheet.Range("k2") = TextBox1.Value '将文字框内容写进k列
ActiveSheet.Range("l2") = TextBox2.Value '将文字框内容写进l列
TextBox1.Value = "" '清空文字框内容
TextBox2.Value = "" '清空文字框内容
Worksheets("打印信息").Range("a2").Value = 1 '给指定表的单元格写入数据
Worksheets("打印信息").Range("B3:E113").Value = "" '清空指定表的单元格数据
End Sub
'以下为根据条件打印的宏
Sub 打印() '部门明细查询及批星打印
Application.ScreenUpdating = False '关闭屏幕更新
If Cells(1, 4) = "" And Cells(1, 5) = "" Then '打印条件Cells(3, 13) = 1 And
' Application.ActivePrinter = "\\zdserver2\HP LaserJet 5000 PCL 6 在 Ne00:" ' '指定打印机
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True '设置默认打印机的打印信息,其中Copies:=myPrint为打印份数
Else
Call 打印信息 '打倒为假时执行
End If
Application.ScreenUpdating = True '关闭屏幕更新
End Sub
'以下的循环过程,也用于批量打印,Z的值可以是Z=1 TO 5(1到5),也可是单元格的内容
Sub 批量打印()
For Z = Cells(1, 11) To Cells(1, 12) '变量X的值从打印起始号K1到结束号L1之间逐渐递增
Cells(1, 13) = Z 'M1的值等于变量X
Next Z
End Sub
'以下是将打印情况写入工作表的宏
Sub 打印信息()
Application.ScreenUpdating = False '关闭屏幕更新
Dim Y '声明变量
Y = ActiveSheet.Name '判定活动工作表名称
Sheets("打印信息").Select
X = 3 '从第3行开始
Do While Not (IsEmpty(Cells(X, 2).Value)) '判断第1列的最后一行(即空行的上一行)
X = X + 1 '在最后一行加一行即为空行
Loop
Cells(X, 2) = Cells(2, 1)
Cells(X, 3) = Sheets(Y).Cells(4, 3)
Cells(2, 1) = Cells(2, 1) + 1
Cells(X, 4) = Sheets(Y).Cells(1, 4)
Cells(X, 5) = Sheets(Y).Cells(1, 5)
[c1] = Y
Sheets(Y).Select '返回上一次打开的工作表
Application.ScreenUpdating = True '打开屏幕更新
End Sub
将文件保存为以某一单元格中的值为文件名的宏怎么写
假设你要以Sheet1的A1单元格中的值为文件名保存,则应用命令:
ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls"
在Excel中,如何用程式控制某一单元格不可编辑修改?thanks!!!
Private Sub Workbook_Open()
ProtectSpecialRange ("A1")
End Sub
Sub ProtectSpecialRange(RangeAddress As String)
On Error Resume Next
With Sheet1
.Cells.Locked = False
.Range(RangeAddress).Locked = True
.Protection.AllowEditRanges.Add Title:="区域1", Range:=Range(RangeAddress) _
, Password:="pass"
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
End Sub
对工作表编程,有时要判断工作表的记录总数,VBA里如何实现?
x=1
do while not (isempty(sheets("").cells(x,1).value)
x=x+1
loop
在VBA中等同于EXCELE中的求和函数-sum()-的函数是什么?
Application.WorksheetFunction.Sum()
自定义菜单有三个菜单项,要求手工顺序执行为防止误操作,执行完第一个菜单项后使其变灰(禁用),如何写?
Rowen
令其 Enable 属性同步与某个工具按钮是较为方便的
如何进行表格更新?
是这样的,比如我已经有了一个原始表格A,这时有人通知我A表有错误,须加以修改,并给我一个表B,表B列出了须修改的参数(注意B的列数少于A的列数,因A的其他列无需修改)现在问题是如何根据表B中的新值,在表A中找到相应位置,并加以修改比如表B中列出了10002的JOHN的身高和体重等值需要修改,如何在A中找到10002的相应位置(身高体重),并加以修改
建议将表b复制至表a的sheet2,然后执行下列的宏即可
sub change()
dim dd as range
sheets(2).select
lastcell = range("a65536").end(xlup).row
for each dd in range(cells(2, 1), cells(lastcell, 1))
if dd = "" then exit sub
ff = dd.value
set c = sheets(1).columns(1).find(ff, lookat:=xlwhole)
if not c is nothing then
c.offset(0, 2) = dd.offset(0, 2)
c.offset(0, 3) = dd.offset(0, 3)
c.offset(0, 5) = dd.offset(0, 4)
end if
next
end sub
自定义菜单
把建立和删除自定义菜单的代码分别写在Workbook_open和Workbook_beforeclosed的事件中
应该用VBA,工作薄代码中有workbook-open()过程,在该过程中写入
with activeworkbook
.sheets("表2").active
end with
VBA实现向锁定工作表中插入行,并自动复制上面行中指定列的函数
Option Explicit
Public Const strPass = "123" 123是口令
Sub 行上再插入一行()
ActiveSheet.Unprotect password:=strPass
Selection.Copy
Selection.Insert Shift:=xlDown
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect password:=strPass
End Sub
如何使不出现每次关闭XLS文件时出现的:
“XXX.xls文件已被修改,是否可在其修改后的内容?”字样??
可以在工作表关闭之前进行手工保存工作
  ThisWorkbook.save
如何实现动态时间显示?
sub mytime
range("a1")=now()
Application.OnTime Now + Timevalue("00:00:01"), "mytime"
end sub
用 vba 判断指定 excel 文件是否打开?
For Each w In Workbooks
If w.Name <> XXX Then
…………
End If
Next w
vba怎么调用excel自带的函数?比如vlookup?
Application.WorksheetFunction.f(x)
f(x)是你想使用的工作表函数
但是用内部函数时引用单元格会出错,怎么办?
把你要引用的单元格改成VBA认可格式(类型)如在Excel中的“F7:F12”应改为“Range("F7:F12")”等
VBA中如何关闭,保存和退出Excel?
Workbooks("你的工作簿").Save
下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用
引用 含义
Rows(1) 第一行
Rows 工作表上所有的行
Columns(1) 第一列
Columns("A") 第一列
Columns 工作表上所有的列
若要同时处理若干行或列,请创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗
Sub SeveralRows()
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
End Sub
如果只是你说的只连接几个储存格那用简单的方法
Range("A1").Formula = Application.Evaluate("=[Book2.xls]Sheet1!A1")

Range("A1").Formula = "=[Book2.xls]Sheet1!A1"
请问在vba如何呼叫已定义的名称范围
我在a1:b100插入名称∶myrange
请问我如何用vba选取此范围
Range("myrange").Select
如何访问没有打开的EXCEL文件?
Sub AlternativeImport()
Dim xlapp As Excel.Application
Dim wbSource As Excel.Workbook
Set xlapp = New Excel.Application
xlapp.EnableEvents = False
Set wbSource = xlapp.Workbooks.Open("C:\test\Book2.xls")
Range("A1:A10").Value = wbSource.Sheets("Sheet1").Range("A1:A10").Value
wbSource.Close False
xlapp.Quit
End Sub
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:08 | 显示全部楼层
115、        怎样使VBAprject工程不可查看?(不用密码)
用可编辑十六进制文件的软件工具(如WinHex等)打开Excel.xls,在文件的尾部,查找ID="{00000000-0000-0000-0000-000000000000}"(有工程锁定密码时),或ID="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"(没有工程锁定密码时),修改其中的任意1位后,保存,即可达到目的.当查看工程是会出现“工程不可查看”的提示.
注意:修改前,一定要备份原文件,以防不测
116、        如何用VBA控制报表的格式(左边距,纸张大小,打印第几页等)
打印第几页控制:ActiveWindow.SelectedSheets.PrintOut From:=x, To:=y
ActiveSheet.PageSetup.LeftMargin= 左边距
ActiveSheet.PageSetup..PaperSize = 纸张大小
117、        如何使VBA自动消除使用COPY复制后产生的虚线框?
Application.CutCopyMode = False
替换Excel 97的菜单栏是很容易的,只需创建一个新的菜单栏就会删除Excel 97的菜单栏当需要恢复Excel 97的菜单栏时,只要删除新创建的菜单栏就可以了该系统的自定义菜单中只需两个命令按钮,一个用来返回到系统的主画面(ReturnMAIN),另一个用来退出系统(ExitSYS)下面是模块(Module)中有关的宏或是事件控制程序
Sub ZapMenu( )
On Error Resume Next
CommandBars(“保险查询系统”).Delete
End Sub
这是一个用来删除自定义菜单栏的宏语句On Error Resume Next保证无论自定义菜单栏是否存在都能正确删除它
Sub ExitSYS( )
ZapMenu
ActiveWorkbook.Close SaveChanges := False
End Sub
这是用来退出系统的宏它删除自定义菜单,并关闭活动的工作簿(不提示保存修改)
Sub ReturnMAIN( )
Worksheets(“保险查询系统”).Select
End Sub
该宏用来返回主画面它激活“保险查询系统”工作表
Sub SetMenu( )
Dim myBar As CommandBar
Dim myButton As CommandBarButton
ZapMenu
Set myBar = CommandBars.Add(Name:=“保险查询系统”, _
Position :=msoBarTop, _
MenuBar :=True)
Set myButton = myBar.Controls.Add(msoControlButton)
myButton.Style = msoButtonCaption
myButton.Caption = “退出[&E]”
myButton.OnAction = “ExitSYS”
Set myButton = myBar.Controls.Add(msoControlButton)
myButton.Style = msoButtonCaption
myButton.Caption = “返回[&R]”
myButton.OnAction = “ReturnMAIN”
myButton.Visible = False
myBar.Protection = msoBarNoMove + msoBarNoCustomize
myBar.Visible = True
End Sub
这个宏包含五部分第一部分定义了一对变量第二部分首先运行ZapMenu宏,保证保险查询系统菜单栏是不存在的,然后创建它参数MenuBar的值设为True,确保这个新创建的命令栏为一菜单栏第三部分和第四部分将两个命令按钮加入到菜单栏中并设置ReturnMAIN命令按钮的初始状态为不可见状态最后一部分保护这个新创建的菜单栏,使用户不能移动也不能自定义新菜单栏
118、        工作表汇总
Sub sum() '表汇总,第1张的a1:e20等于所有表的相同单元格的和
Attribute sum.VB_ProcData.VB_Invoke_Func = "z\n14"
Dim X As Worksheet
For y = 1 To 20
For z = 1 To 5
For Each X In Worksheets
shname = X.Name
ActiveSheet.Cells(y, z).Value = ActiveSheet.Cells(y, z).Value + Worksheets(shname).Cells(y, z)
Next
Next z
Next y
End Sub
地质啷http://weibo.com/943569550

7656

主题

1180

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2011-3-30 09:15 | 显示全部楼层

Excel键盘快捷键大全(未全部测试)

Excel键盘快捷键大全(一)

用于"Office 助手"和"帮助"窗口的按键

显示和使用"Office 助手"
注意 若要执行以下操作,"Microsoft Office 助手"必须打开且可见。若要打开或显示"Office 助手",请按 Alt+H 以打开"帮助"菜单,然后按 O。"Office 助手"可见后,请按 F1 以显示"助手"气球。
F1
显示"助手"气球(如果"Office 助手"关闭,则 F1 将打开"帮助"窗口)

在"助手"气球中
Alt+数字
从"助手"显示的列表中选择"帮助"主题。Alt+1 表示第一个主题,Alt+2 表示第二个主题,依此类推。
Alt+向下键
显示"助手"列表中的其他"帮助"主题
Alt+向上键
显示"助手"列表中的上一个"帮助"主题
Esc
关闭"助手"消息或提示
在向导或对话框中
Tab
移至向导中的"帮助" 按钮
选中"帮助" 按钮后,按空格键
在向导或对话框中显示"助手"。若要隐藏"助手",请再按一次空格键。请注意,并非所有的向导或对话框都具有"助手"提供的"帮助"。
注意 在使用屏幕查看实用程序或其他辅助功能助手时,如果在"帮助"窗口的"应答向导"选项卡上,而不是在"Office 助手气球"或"提出问题"框中输入问题,那么您将获得"帮助"提供的最佳结果。
显示和使用"帮助"窗口
若要使用"帮助"窗口,请关闭"Microsoft Office 助手"。若要关闭"助手",请按 F1 以显示"助手"。按 Alt+O 可以打开"Office 助手"对话框中的"选项"选项卡。按 Alt+U 可以清除"使用 Office 助手"复选框,然后按 Enter。按 F1 可以显示"帮助"窗口。
F1
如果关闭了"助手",则显示"帮助"窗口。如果打开了"助手",则按 F1 可以显示"助手"气球。

在"帮助"窗口中
F6
在"帮助"主题与"目录"、"应答向导"和"索引"窗格之间切换
Tab
选取下一个隐藏的文本或超链接,或主题顶部的"全部显示"或"全部隐藏"
Shift+Tab
选取上一个隐藏的文本或超链接,或 Microsoft Office Web 文章顶部的"浏览器查看"按钮。
Enter
执行选定?quot;全部显示"、"全部隐藏"、隐藏文本或超链接中的操作
Alt+O
显示"选项"菜单以访问任意"帮助"工具栏命令
Alt+O,然后按 T
隐藏或显示"目录"、"应答向导"和"索引"选项卡窗格
Alt+O,然后按 B
显示上一个查看过的主题
Alt+O,然后按 F
在以前显示的主题序列中,显示下一个主题
Alt+O,然后按 H
返回指定的主页
Alt+O,然后按 S
"帮助"窗口停止打开"帮助"主题(如果要停止下载 Web 页,则操作很有用)
Alt+O,然后按 I
打开 Microsoft Internet Explorer 的"Internet 选项"对话框,可以在此更改访问功能设置
Alt+O,然后按 R
刷新主题(如果有指向 Web 页的链接,则该操作很有用)
Alt+O,然后按 P
打印书中的所有主题,或者只打印选定的主题
Alt+F4
关闭"帮助"窗口
注意 在使用屏幕查看实用程序或其他辅助功能助手时,如果在"帮助"窗口的"应答向导"选项卡上,而不是在"Office 助手气球"或"提出问题"框中输入问题,那么您将获得"帮助"提供的最佳结果。

使用"目录"、"索引"和"应答向导"窗格
按 F6 可以从"帮助"主题切换到"目录、应答向导、索引"窗格。
Ctrl+Tab
切换到下一个选项卡
Alt+C
切换到"目录"选项卡
Alt+A
切换到"应答向导"选项卡
Alt+I
切换到"索引"选项卡
Enter
打开选定的书或"帮助"主题
向下键
选择下一本书或下一个"帮助"主题
向上键
选择上一本书或上一个"帮助"主题
Shift+F10
显示快捷菜单
注意 在使用屏幕查看实用程序或其他辅助功能助手时,如果在"帮助"窗口的"应答向导"选项卡上,而不是在"Office 助手气球"或"提出问题"框中输入问题,那么您将获得"帮助"提供的最佳结果。

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

Excel键盘快捷键大全(二)
使用"帮助主题"窗格
按 F6 可以从"目录、应答向导、索引" 窗格切换到"帮助"主题。
Alt+向右键
转到下一个"帮助"主题
Alt+向左键
转到上一个"帮助"主题
Tab
选取下一个隐藏的文本或超链接,或主题顶部的"全部显示"或"全部隐藏"
Shift+Tab
选取上一个隐藏的文本或超链接,或 Microsoft Office Web 文章顶部的"浏览器查看"按钮。
Enter
执行选定的"全部显示"、"全部隐藏"、隐藏文本或超链接中的操作
向上键或向下键
向"帮助"主题的开始或结束方向滚动
Page Up 或 Page Down
以较大的步长向"帮助"主题的开始或结束方向滚动
Home 或 End
前往"帮助"主题的开始或结束部分
Ctrl+P
打印当前"帮助"主题
Ctrl+A
选定整个"帮助"主题
Ctrl+C
将选定项复制到剪贴板中
Shift+F10
显示快捷菜单
用于 Office 界面的按键

显示和使用窗口
Alt+Tab
切换到下一个程序。
Alt+Shift+Tab
切换到上一个程序。
Ctrl+Esc
显示 Windows"开始"菜单。
Ctrl+W 或 Ctrl+F4
关闭选定的工作簿窗口。
Ctrl+F5
恢复选定的工作簿窗口的大小。
F6
切换到被拆分("窗口"菜单上的"拆分"命令)的工作表中的下一个窗格。
Shift+F6
切换到被拆分的工作表中的上一个窗格。
Ctrl+F6
打开多个工作簿窗口时,切换到下一个工作簿窗口。
Ctrl+Shift+F6
切换到上一个工作簿窗口。
Ctrl+F7
当工作簿窗口未最大化时,执行该工作簿窗口的"控制"菜单上的"移动"命令。使用箭头键移动该窗口,完成操作后按 Esc。
Ctrl+F8
当工作簿窗口未最大化时,执行工作簿窗口的"控制"菜单上的"大小"命令。使用箭头键调整窗口大小,完成时按 Esc。
Ctrl+F9
将工作簿窗口最小化为图标。
Ctrl+F10
最大化或还原选定的工作簿窗口。
PrtScr
将屏幕图片复制到剪贴板中。
Alt+Print Screen
将选定窗口的图片复制到剪贴板中。

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


Excel键盘快捷键大全(三)
访问和使用智能标记
Alt+Shift+F10
显示智能标记的菜单或消息。如果显示了多个智能标记,请切换到下一个智能标记并显示其菜单或消息。
向下键
选取智能标记菜单中的下一项。
向上键
选取智能标记菜单中的上一项。
Enter
执行在智能标记菜单中选定的项对应的操作。
Esc
关闭智能标记菜单或消息。
提示
可以请求不管是否出现智能标记时,用声音通知。若要听到声音提示,则必须安装了声卡。还必须在计算机上安装了 Microsoft Office Sounds。
在访问万维网时,请从 Microsoft Office Web 站点下载 Microsoft Office Sounds。在"帮?quot;菜单上,单击"网上 Office"并查找"Microsoft Office Sounds"。安装了声音文件后,需要在"工具"菜单上的"选项"对话框的"常规"选项卡中选中"提供声音反馈"复选框。选中或清除该复选框后,此设置将影响所有支持声音的 Office 程序。
注意 本主题中的超链接将跳转到 Web 上,但可以随时切换回本帮助。

访问和使用任务窗格
F6
从程序窗口的其他窗格移至任务窗格。可能需要按 F6 多次。
注意 如果按 F6 没有显示所需的任务窗格,请按 Alt 激活菜单栏,然后再按 Ctrl+Tab 移至任务窗格。
Ctrl+Tab
当菜单或工具栏处于活动状态时,移至任务窗格。可能需要按 Ctrl+Tab 多次。
Tab 或 Shift+Tab
当任务窗格处于活动状态时,从其中选择上一个或下一个选项
Ctrl+向下键
显示任务窗格菜单上的全部命令
向下键或向上键
在选定的子菜单的选项间移动,在一组选项的某些特定选项间移动
空格键或 Enter
打开选定的菜单,或执行分配给选定按钮的操作
Shift+F10
打开一个快捷菜单,打开选定的剪辑库项的下拉菜单
Home 或 End
菜单或子菜单可见时,选中其中的第一个或最后一个命令
Page Up 或 Page Down
在选定的剪辑库列表中向上或向下滚动
Ctrl+Home 或 Ctrl+End
移动到选定的剪辑库列表的顶部或底部

访问和使用菜单和工具栏
F10 或 Alt
选定菜单栏,或者同时关闭打开的菜单和子菜单。
Tab 或 Shift+Tab
选择被选定工具栏上的下一个或上一个按钮或菜单。
Ctrl+Tab 或 Ctrl+Shift+Tab
选择被选定工具栏的下一个或上一个工具栏。
Enter
打开选定的菜单,或执行所选按钮或命令的操作。
Shift+F10
显示被选项的快捷菜单。
Alt+空格键
显示 Excel 窗口的"控件"菜单。
向下键或向上键
菜单或子菜单打开时,选择下一个或上一个命令。
向左键或向右键
选定左边或右边的菜单。当子菜单打开时,在主菜单和子菜单之间切换。
Home 或 End
选择菜单或子菜单上的第一个或最后一个命令。
Esc
关闭打开的菜单。当子菜单打开时,只关闭子菜单。
Ctrl+向下键
显示菜单上的全部命令。
Ctrl+7
显示或隐藏"常用"工具栏。
注意 可用键盘来选择菜单栏或已显示的工具栏上的任意菜单命令。按 Alt 可以选定菜单栏。若要选定工具栏,请重复按 Ctrl+Tab,直到选定所需的工具栏。在包含所需命令的菜单中,按带下划线的字母即可打开菜单,然后再按所需命令中带下划线的字母。


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


Excel键盘快捷键大全(四)
调整工具栏和任务窗格的大小
1. 按 Alt 来选定菜单栏。
2. 重复按 Ctrl+Tab 以选定所需的工具栏或任务窗格。
3. 请执行下列操作之一:
调整工具栏的大小
1. 在工具栏中,按 Ctrl+空格键可显示"工具栏选项"菜单。
2. 选择"大小"命令,再按 Enter。
3. 使用箭头键调整工具栏的大小。
移动工具栏
4. 在工具栏中,按 Ctrl+空格键可显示"工具栏选项"菜单。
5. 选择"移动"命令,再按 Enter。
6. 使用箭头键可调整工具栏的位置。按 Ctrl+箭头键可以一次移动一个像素。若要使工具栏解除固定,请重复按向下键。若要将工具栏垂直固定在左边或右边,则当工具栏总在左侧或右侧时,请分别按向左键或向右键。
调整任务窗格的大小
7. 在任务窗格中,按 Ctrl+空格键可显示其他命令的菜单。
8. 使用向下键选择"大小"命令,再按 Enter。
9. 使用箭头键可调整任务窗格的大小。用 Ctrl+箭头键可一次调整一个像素。
移动任务窗格
10. 在任务窗格中,按 Ctrl+空格键可显示其他命令的菜单。
11. 用向下键选择"移动"命令,再按 Enter。
12. 使用箭头键可调整任务窗格的位置。用 Ctrl+箭头键可一次移动一个像素。
4. 完成移动或调整大小后,请按 Esc。

使用对话框
Tab
移动到下一个选项或选项组。
Shift+Tab
移动到上一个选项或选项组。
Ctrl+Tab 或 Ctrl+Page Down
切换到对话框中的下一个选项卡。
Ctrl+Shift+Tab 或 Ctrl+Page Up
切换到对话框中的上一个选项卡。
箭头键
在已打开的下拉列表中的选项之间移动,或者在选项组中的选项之间移动。
空格键
执行所选按钮的操作,或者,选中或清除所选复选框。
下拉列表中选项的首字母
如果列表已关闭,请打开它并移动到列表中的该选项上。
Alt+选项中带下划线的字母
选定选项,或者选中或清除复选框。
Alt+向下键
打开选定的下拉列表。
Enter
执行对话框中默认命令按钮(用黑体突出显示的按钮,通常?quot;确定"按钮)的操作。
Esc
取消命令并关闭对话框。

使用对话框中的编辑框
编辑框为空白,可向其中键入或粘贴内容,例如,用户姓名或访问文件夹的路径。
Home
移动到内容的开始处
End
移动到内容的末尾
向左键或向右键
向左或向右移动一个字符
Ctrl+向左键
左移一个单词
Ctrl+向右键
右移一个单词
Shift+向左键
选定或取消选定左面的一个字符
Shift+向右键
选定或取消选定右面的一个字符
Ctrl+Shift+向左键
选定或取消选定左面的一个字
Ctrl+Shift+向右键
选定或取消选定右面的一个字
Shift+Home
选定从插入点到开始处的内容
Shift+End
选定从插入点到末尾的内容

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


Excel键盘快捷键大全(五)
使用"打开"、"另存为"、和"插入图片"对话框
"打开"、"另存为"、和"插入图片"对话框支持标准对话框的键盘快捷方式。若要查看对话框的标准快捷方式,请参阅主要的键盘快捷方式主题中的"使用对话框"和"使用对话框中的编辑框"部分。这些对话框也支持下列快捷方式。
Alt+1
转至上一个文件夹(
Alt+2
"上一级" 按钮:打开当前文件夹的上一级文件夹
Alt+3
"搜索 Web" 按钮:关闭对话框并打开 Web 搜索页
Alt+4
"删除" 按钮:删除选定的文件夹或文件
Alt+5
"新建文件夹" 按钮:新建文件夹
Alt+6
"查看" 按钮:在可获得的文件夹视图中切换
Alt+7 或 Alt+L
"工具"按钮:显示"工具"菜单
Shift+F10
显示选定项(如文件夹或文件)的快捷菜单
Tab
在对话框的选项或区域间切换
F4 或 Alt+I
打开"查找范围"列表
F5
刷新文件列表


用于工作簿和工作表的按键

预览和打印
Ctrl+P 或 Ctrl+Shift+F12
显示"打印"对话框。
在打印预览中使用下列按键(若要定位到打印预览,请按 Alt+F,再按 V):
箭头键
放大显示时,在页面中移动。
Page Up 或 Page Down
缩小显示时,每次滚动一页。
Ctrl+向上键或 Ctrl+向左键
缩小显示时,滚动到第一页。
Ctrl+向下键或 Ctrl+向右键
缩小显示时,滚动到最后一页。

处理工作表
Shift+F11 或 Alt+Shift+F1
插入新工作表。
Ctrl+Page Down
移动到工作簿中的下一张工作表。
Ctrl+Page Up
移动到工作簿中的上一张工作表。
Shift+Ctrl+Page Down
选定当前工作表和下一张工作表。若要取消选定多张工作表,请按 Ctrl+Page Down,或者,若要选定其他工作表,请按 Ctrl+Page Up。
Shift+Ctrl+Page Up
选定当前工作表和上一张工作表。
Alt+O H R
对当前工作表重命名("格式"菜单的"工作表"子菜单上的"重命名"命令)。
Alt+E M
移动或复制当前工作表?quot;编辑"菜单上的"移动或复制工作表"命令)。
Alt+E L
删除当前工作表("编辑"菜单上的"删除工作表"命令)。

在工作表内移动和滚动
箭头键
向上、下、左或右移动一个单元格。
Ctrl+箭头键
移动到当前数据区域的边缘。
Home
移动到行首。
Ctrl+Home
移动到工作表的开头。
Ctrl+End
移动到工作表的最后一个单元格,该单元格位于数据所占用的最右列的最下行中。
Page Down
向下移动一屏。
Page Up
向上移动一屏。
Alt+Page Down
向右移动一屏。
Alt+Page Up
向左移动一屏。
F6
切换到被拆分("窗口"菜单上的"拆分"命令)的工作表中的下一个窗格。
Shift+F6
切换到被拆分的工作表中的上一个窗格。
Ctrl+Backspace
滚动以显示活动单元格。
F5
显示"定位"对话框。
Shift+F5
显示"查找"对话框。
Shift+F4
重复上一次"查找"操作(等同于"查找下一个")。
Tab
在受保护的工作表上的非锁定单元格之间移动。


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

Excel键盘快捷键大全(六)
在选定区域内移动
Enter
在选定区域内从上往下移动。
Shift+Enter
在选定区域内从下往上移动。
Tab
在选定区域中从左向右移动。如果选定单列中的单元格,则向下移动。
Shift+Tab
在选定区域中从右向左移动。如果选定单列中的单元格,则向上移动。
Ctrl+句号
按顺时针方向移动到选定区域的下一个角。
Ctrl+Alt+向右键
在不相邻的选定区域中,向右切换到下一个选定区域。
Ctrl+Alt+向左键
向左切换到下一个不相邻的选定区域。
注意 可在按 Enter 或 Shift+Enter 之后,更改移动方向:按 Alt+T,再按 O("工具"菜单上的"选项"命令),接着按 Ctrl+Tab 直到选中"编辑"选项卡,然后更改"按 Enter 键后移动"设置。

以"结束"模式移动或滚动
选中"结束"模式后,状态栏中将出现"结束"。
End
打开或关闭"结束"模式。
End+箭头键
在一行或一列内以数据块为单位移动。
End+Home
移动到工作表的最后一个单元格,该单元格位于数据所占用的最右列的最下一行中。
End+Enter
移动到当前行中最右边的非空单元格。如果已打开"Lotus 1-2-3 常用键"("工具"菜单上"选项"命令中的"1-2-3 的帮助"选项卡),则此快捷键次序不起作用。

在 Scroll Lock 打开的状态下移动和滚动
在 Scroll Lock 关闭的状态下使用滚动键(如 Page Up 和 Page Down)时,单元格选定区域会随之发生移动。若要在滚动时不改变选定的单元格,请先打开 Scroll Lock。
Scroll Lock
打开或关闭 Scroll Lock。
Home
移动到窗口左上角的单元格
End
移动到窗口右下角的单元格。
向上键或向下键
向上或向下滚动一行。
向左键或向右键
向左或向右滚动一列。


用于选择数据和单元格的按键

选定单元格、行和列以及对象
Ctrl+空格键
选定整列。
Shift+空格键
选定整行。
Ctrl+A
选定整张工作表。
Shift+Backspace
在选定了多个单元格的情况下,只选定活动单元格。
Ctrl+Shift+空格键
在选定了一个对象的情况下,选定工作表上的所有对象。
Ctrl+6
在隐藏对象、显示对象和显示对象占位符之间切换。

选定具有特定特征的单元格
Ctrl+Shift+*(星号)
选定活动单元格周围的当前区域(包围在空行和空列中的数据区域)。在数据透视表中,选定整个数据透视表。
Ctrl+/
选定包含活动单元格的数组。
Ctrl+Shift+O(字母 O)
选定含有批注的所有单元格
Ctrl+\
在选定的行中,选取与活动单元格中的值不匹配的单元格。
Ctrl+Shift+│
在选定的列中,选取与活动单元格中的值不匹配的单元格。
Ctrl+[(左方括号)
选取由选定区域中的公式直接引用的所有单元格。
Ctrl+Shift+{(左大括号)
选取由选定区域中的公式直接或间接引用的所有单元格。
Ctrl+](右方括号)
选取包含直接引用活动单元格的公式的单元格。
Ctrl+Shift+}(右大括号)
选取包含直接或间接引用活动单元格的公式的单元格。
Alt+;(分号)
选取当前选定区域中的可见单元格。



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


Excel键盘快捷键大全(七)
扩展选定区域
F8
打开或关闭扩展模式。在扩展模式中,状态行中将出现"扩展",箭头键可扩展选定区域。
Shift+F8
将其他区域的单元格添加到选定区域中,或使用箭头键移动到所要添加的区域的起始处,然后按 F8 和箭头键以选定下一个区域。
Shift+箭头键
将选定区域扩展一个单元格。
Ctrl+Shift+箭头键
将选定区域扩展到与活动单元格在同一列或同一行的最后一个非空单元格。
Shift+Home
将选定区域扩展到行首。
Ctrl+Shift+Home
将选定区域扩展到工作表的开始处。
Ctrl+Shift+End
将选定区域扩展到工作表上最后一个使用的单元格(右下角)。
Shift+Page Down
将选定区域向下扩展一屏。
Shift+Page Up
将选定区域向上扩展一屏。
End+Shift+箭头键
将选定区域扩展到与活动单元格在同一列或同一行的最后一个非空单元格。
End+Shift+Home
将选定区域扩展到工作表的最后一个使用的单元格(右下角)
End+Shift+Enter
将选定区域扩展到当前行中的最后一个单元格。如果已打开"Lotus 1-2-3 常用键"("工具"菜单上"选项"命令中的"1-2-3 的帮助"选项卡),则此快捷键次序将不起作用。
Scroll Lock+Shift+Home
将选定区域扩展到窗口左上角的单元格。
Scroll Lock+Shift+End
将选定区域扩展到窗口右下角的单元格。


用于输入、编辑、设置格式和计算数据的按键

输入数据
Enter
完成单元格输入并选取下一个单元格。
Alt+Enter
在单元格中换行。
Ctrl+Enter
用当前输入项填充选定的单元格区域。
Shift+Enter
完成单元格输入并向上选取上一个单元格。
Tab
完成单元格输入并向右选取下一个单元格。
Shift+Tab
完成单元格输入并向左选取上一个单元格。
ESC
取消单元格输入。
箭头键
向上、下、左或右移动一个字符。
Home
移到行首。
F4 或 Ctrl+Y
重复上一次操作。
Ctrl+Shift+F3
由行列标志创建名称。
Ctrl+D
向下填充。
Ctrl+R
向右填充。
Ctrl+F3
定义名称。
Ctrl+K
插入超链接。
Enter(在具有超链接的单元格中)
激活超链接。
Ctrl+;(分号)
输入日期。
Ctrl+Shift+:(冒号)
输入时间。
Alt+向下键
显示清单的当前列中的数值下拉列表。
Ctrl+Z
撤消上一次操作。

输入特殊字符
按 F2 可编辑单元格,打开 Num Lock,再用数字小键盘按下列键:
Alt+0162
输入分币字符 ¢。
Alt+0163
输入英镑字符 £。
Alt+0165
输入日圆符号 ¥。
Alt+0128
输入欧元符号
地质啷http://weibo.com/943569550

8

主题

9288

铜板

58

好友

至尊VIP

I&#39;m Happy *_*&nb

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
859
发表于 2011-4-1 17:58 | 显示全部楼层
来学习了,谢谢楼主们还有上面的朋友们
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表