VAB学习之我见
1、 单元格附值
a. [A1] = 100 '在 A1 单元格输入100。
b. [A2:A4] = 10 '在 A2:A4 单元格输入10。
c. Range("B1") = 200 '在 B1 单元格输入200.
d. Range("C1:C3") = 300 '在 C1:C3 单元格输入300。
e. Cells(1, 4) = 400 '在 D1 单元格输入400.
f. Range(Cells(1, 5), Cells(5, 5)) = 50 '在 E1:E5单元格输入50。
2、 读取其他单元格数值
a. Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表(只能是原始名字,sheet改名后不可用)单元格 D1 数据,读到 D1 单元格。
b. Cells(1, 4) = worksheets(2).Cells(1, 4) '把第2个sheet(从左向右数) 工作表单元格 D1 数据,读到 D1 单元格。也可以写成Cells(1, 4) = sheets(2).Cells(1, 4)
c. Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表单元格 D1 数据,读到 D1 单元格。
d. Range(Cells(1, 5), Cells(5, 5)) = Sheets("name").Cells(1, 1) '读取名字为name 工作表单元格 A1 数据。
e. i = activecell.Row ’是把当前单元格的行数,指定给变量 i。j = activecell.Column ’是把当前单元格的栏数,指定给变量 j。
f. vba中range(cells,cells)插入变量,选择不连续单元格区域的问题
就是我编vba的时候,通过录制发现Range("A1:B4,D1:E4").Select可以选取不连续的单元格区域。
但是我实际上单元格区域是不定的,比如A1:B4中的行4是不定的,我用i=range("A65536").end(xlup).row计算的。
所以当我现在选取这些不连续单元格区域的时候,就有变量了
但是我实际上单元格区域是不定的,比如A1:B4中的行4是不定的,我用i=range("A65536").end(xlup).row计算的。
所以当我现在选取这些不连续单元格区域的时候,就有变量了
首先我把4改成i,那么就变成了range("A1:Bi,D1:Ei"),当然这句话肯定是错的,于是又改成range(""A1:B"&i,"D1:E"&i"),还是错的,又改成range("'A1:B'&i,'D1:E'&i"),但变量在""中似乎不能识别。
于是去掉外面的""后就成了range("A1:B"&i,"D1:E"&i),这样又成了连续的单元格区域,我实在晕死,不知道怎么办了,我的区域很多,操作的变量不止i一个,而且后面操作的代码一大串。
所以请问高手如何解决插入变量,选择不连续单元格区域的问题啊
于是去掉外面的""后就成了range("A1:B"&i,"D1:E"&i),这样又成了连续的单元格区域,我实在晕死,不知道怎么办了,我的区域很多,操作的变量不止i一个,而且后面操作的代码一大串。
所以请问高手如何解决插入变量,选择不连续单元格区域的问题啊
最佳答案
你的意思是想在range中插入变量对吧?
你的原来写法是:
range(""A1:B"&i,"D1:E"&i")
你把它改成:
Range("a1:b" & i & ", d1:e" & i & "")看看
你一定要分清这串字符串中的变量和字符
你的原来写法是:
range(""A1:B"&i,"D1:E"&i")
你把它改成:
Range("a1:b" & i & ", d1:e" & i & "")看看
你一定要分清这串字符串中的变量和字符
要了解双分号和&的用法
记得要在&和i中间加入空格
记得要在&和i中间加入空格
3、 Worksheet_SelectionChange
a. Private Sub Worksheet_SelectionChange(ByVal Target As Range)Target = 100End Sub
‘利用 Worksheet_SelectionChange 输入数据, Target 指的是你鼠标所选的单元格,Worksheet_SelectionChange() 事件的参数。可以是一个也可以是好几个单元格。
Range 是 Excel 特有的变量形态,叫范围。
Target As Rang 是把 Target 这个参数设定为 Range 变量形态。
Target = 100 是把你点选的单元格输入数字100。
b. Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Row >= 2 And Target.Column = 2 ThenTarget = 100End IfEnd Sub
‘Target.Row >= 2,指的是鼠标选定的单元格的行数大于或等于2。Target.Column = 2 ,指的是鼠标选定的单元格的列数等于 2。If Target.Row >= 2 And Target.Column = 2 Then 指的是 (Target.Row >= 2) 为True及(Target.Column = 2)为True时,才执行B 栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输入数据。
等同方法:利用CommandButton1_Click()
Private Sub CommandButton1_Click()
If ActiveCell.Row >= 2 And ActiveCell.Column >= 3 Then
ActiveCell = 100
End If
End Sub
4、 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
Application.EnableEvents = False与Application.EnableEvents = True,这是个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序。它的目的在抑制事件连锁执行。简单的说就是,在 B 字段所触发的事件,不愿在其它单元格再触发另一个Worksheet_Change()事件。
5、 Worksheet_Activate()
6、 Worksheet_Calculate ( )
7、 Worksheet_BeforeRightClick ()
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("D8")) Is Nothing Then Cancel = True
MsgBox ("Target is Range D8 and Cancel is True !")
Else
Cancel = False
End If
End Sub
‘在 D12 按鼠标右键将呈现正常的右键菜单;在 D8 按鼠标右键将呈现一个对话框并且屏闭掉右键菜单。
8、 Worksheet_FollowHyperlink ( )
9、 Worksheet_BeforeDoubleClick ( )
10、 语句和语法
A、 if ----then-------
else
end if
B、 select case
Select Case ActiveCell.Value
Case Is < 60
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "不及格"
Case 60 To 89.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "良"
Case Else
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "优"
End Select
C、 Do Until
Loop
11、 设置忽略错误
语句1:On Error Resume Next
表示:若发生错误,则忽略它,跳到下一条语句继续执行。
语句2:On Error GoTo 行号(或标号)
表示:若运行有错,则跳到标号指定位置,转去执行错误处理例程。
获取错误信息在宏执行过程中,可以通过专用调试对象Err的属性值来了解是否发生实时错误以及发生了什么样的错误。若Err.Number值为0,则表明没有产生错误,反之有错误。下面通过两个例子说明如何使用错误捕获技术。
例1,假设有一工作簿StudentBook,其中已有若干工作表Student1、St
udent2……以及其它一些工作表。现需要建立一个新的Student工作表,但又不想删除已有的Student工作表,如同Excel增加新工作表一样,只将工作表名称的后缀加1。
SubMakeNextStudent()
DimSheetAsWorksheet
DimBaseAsString
DimSuffixAsIntegervba自学好学吗
SetSheet=WorkSheets.Add
Base=“Student”
Suffix=1
OnErrorResumeNext
Sheet.Name=Base&Suffix
DoUntilErr.number=0
Err.Clear
Suffix=Suffix+1
Sheet.Name=Base&Suffix
Loop
EndSub
MakeNextStudent宏的执行过程是:先建立一个新工作表,再试着以Student为基本名、1为后缀构成的名称给新工作表命名。OnErrorResumeNext语句的作用是:若已有同名工作表存在,Excel不能给新工作表命名时,VisualBaisc并不终止所执行的程序,而是自动给Err对象的Number属性赋值,设置出错信息代码,执行DoUntil循环。DoUntil循环首先检查命名是否成功,若不成功,则增加后缀值,再试着重新命名,再检查……直到没有产生错误(即重新命名成功Err.Number=0),才结束循环。Do语句后面的Err.Clear语句的作用是将出错信息代码重新置为0,让VisualBaisc忘记曾经发生的错误。
例2,下面宏的功能是:当试图删除打开的文件时,错误处理例程先调用MsgBox函数提示用户文件正在使用,让用户确认是否要删除该文件,再作相应的处理。
SubKillFile()
OnErrorGoToKillFile_Err
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论