|
楼主 |
发表于 2009-4-20 10:50
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
(续)
ChDir 语句
改变当前的目录或文件夹。
ChDir path
在 Power Macintosh 中,默认驱动器总是改为在 path 语句中指定的驱动器。完整
路径指定由卷标名开始,相对路径由冒号 (:) 开始. ChDir 可以辨认路径中指定的
别名:
ChDir "MacDrive:Tmp" ' 在 Macintosh 中
本示例显示当前路径分隔符。
MsgBox "The path separator character is " & _
Application.PathSeparator
Move 方法
将一个指定的文件或文件夹从一个地方移动到另一个地方。
语法
object.Move destination
Move 方法语法有如下几部分:
部分 描述
object 必需的。始终是一个 File 或 Folder 对象的名字。
destination 必需的。文件或文件夹要移动到的目标。不允许有通配符。
CreateFolder 方法
创建一个文件夹。
语法
object.CreateFolder(foldername)
reateFolder 方法有如下几部分:
部分 描述
object 必需的。始终是一个 FileSystemObject 的名字。
foldername 必需的。字符串表达式,它标识创建的文件夹。
本示例使用 MkDir 语句来创建目录或文件夹。如果没有指定驱动器,新目录或文件
夹将会建在当前驱动器中。
MkDir "MYDIR" ' 建立新的目录或文件夹。
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 ' 更改文件名,并移动文件。
本示例显示当前默认文件路径。
MsgBox "The current default file path is " & _
Application.DefaultFilePath
本示例设置替换启动文件夹。
Application.AltStartupPath = "C:\EXCEL\MACROS"
FolderExists 方法
如果指定的文件夹存在返回 True,不存在返回 False。
语法
object.FolderExists(folderspec)
本示例在单元格中启用编辑。
Application.EditDirectlyInCell = True
程序说明:
几种用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
你点选任何单元格,按 Selection 按钮,則则所点选的单元格均会被输入文字
"Test"。
Public Sub Selection1()
Selection.Value = "Test" '在任何你点选的单元格输入文字 "Test"。
End Sub
VBALesson2 程序说明:
几种如何把别的工作表 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
你点选任何单元格,按 Selection 按钮,则所点选的单元格均会被输入 Shee4 工
作表单元格 F1 数据。
Public Sub Selection1()
Selection.Value = Sheet4.[F1] '把 Shee4 工作表单元格 F1 数据,读到任
何你点选的单元格。
End Sub
VBALesson3 程序说明:
如何利用 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。
VBALesson4 程序说明:
如何利用 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,其它单元格则不被输
入数据。
VBALesson5 程序说明:
比较 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 一样了。
VBALesson 6 程序说明:
完整的 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
将是永远无法执行到的程序。
VBALesson 7 程序说明∶我们为什麽要用变数。
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 。
VBALesson 8 程序说明∶体会一下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()事件。
VBALesson 9 程序说明∶体会一下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 不会按你所要求的,呈现结果。
这就是所谓的事件连锁反应。
请问这个宏该如何写!
我想运行一个宏,就能在当前工作表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
VBA中怎样创建一个名为“table”的新工作表
通过VBA编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对于新创建
的工作表,由于其名字并非特定,所以就不好使用所创建的新表了。不知各位有何高
见。。。。
Sheets.Add
ActiveSheet.Name = "table"
请教:如何用VBA检索表1中A列与表2,3,4,5.....中A列相同的行并把后者整行拷
贝到表1检索到的行中,谢谢!!!!
To yxptwq∶用这程序试看看。
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
如果要用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
冒泡排序法:
冒泡排序法之所以成为“冒泡排序”是因为值较小的或是较轻的元素浮到作为继续排
序的一组数的顶部。
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 |
|