Sub Worksheet_SelectionChange(ByVal Target As Range )
Dim rng As Range, i As Integer
For Each rng In Selection
i = 1
Do While InStr(i, rng , "A") > 0
rng.Characters (InStr( i, rng, "A" ), 1). Font.ColorIndex = 3
i = InStr( i, rng, "A" ) + 1
Loop
Next
End Sub
22.是不是需要其他事件如SELECTIONCHANGE事件来做配合啊!
—是的,很多时候都需要这两个事件配合起来用,比如上面说的加“公司”,还有单元格数据的累加时候都可能会需要到。还是加“公司”的例子,当你输入“皮包”后,回车,单元格会自动变为“皮包公司”,可当我们再一次双击该单元格,但并不对单元格进行值的修改时,也会变为“皮包公司公司”,而实际上我们并没有修改它的值。那么,我们就可以用这个事件配合Change事件判断单元格的值是否修改了。
代码可为:
Dim x '定义一个公共变量,让两个程序都可以用
Private Sub Worksheet_Change( ByVal Target As Range)
If Target.Value = x Then Exit Sub '如果修改的单元格的值等于变量x的值,退出程序
Application.EnableEvents = False
Target.Value = Target.Value & "公司"
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange( ByVal Target As Range)
x = Target.Value '将选中的单元格的值赋给变量x
End Sub
23. sheet1和sheets(1)区别
sheet2属于CodeName属性,如:sheets("myname").codename
sheets(2)中的2是index属性,如:sheets("myname").index
24.区域选择
mxrow = Range("a1"). CurrentRegion.Rows.Count + 1 ' 行号
mxcol = Range("a1"). CurrentRegion.Columns.Count + 1 ' 列号
Cells(mxrow, mxcol ).Select ' 选中单元格
Set rng = Range("a1", Cells(mxrow, mxcol)) '也可以写成:Set rng = [a1].Resize(mxrow, mxcol)
rng.Select '选中组成区域
rng.EntireRow.RowHeight = 20 '设置行高
rng.EntireColumn.ColumnWidth = 10 '设置列宽
25. 打开一个指定的工作表,并将其中sheet(1)工作表的A1单元格数据复制到当前工作薄中sheets(2)工作表的B2单元格。
Sub test()
Application.ScreenUpdating = False ' 关闭屏幕更新
Dim Filename As String ' 定义一个字符串变量
Filename = Application.GetOpenFilename '选择一个 Excel文件(如果文件是已知的,可以直接打开)
Workbooks.Open Filename '打开选择的文件
ThisWorkbook.Sheets(2).Range( "b2").Value = ActiveWorkbook.Sheets(1).Range ("a1" ).Value '将打开的文件的 sheet(1)工作表里的A2单元格数值赋给当前工作薄 sheets(2)工作表的B2 单元格
ActiveWorkbook.Close '关闭选择打开的工作表
Application.ScreenUpdating = True ' 打开屏幕更新
End Sub
26.set 主要作用于对象类型的变量的初始化,如:
Dim c_coll As CollectionSet c_coll = New Collection
27.call用来执行子程序
28.加载宏的特点
A、 隐藏的
B、 一打Excel程序就会打开
加载“加载宏”
A、 Office按钮——>>Excel选项——>>加载项——>>转到——>>加载项对话框——>>勾起“加载项名”前面的勾——>>确定
29. 对象实例
A. Workbooks 代表工作簿集合,所有的工作簿,Workbooks(i),表示已打开的第i个工作簿
B. Workbooks ("汇总表") 代表“汇总”工作簿
C. ActiveWorkbook 当前正在操作的工作簿
D. ThisWorkBook 代码所在的工作簿
E. Sheets("汇总") 代表“汇总”工作表
F. Sheet1表示第一个插入的工作表,Sheet2表示第二个插入的工作表.......
G. Sheets(i) 表示按排列顺序,第i个工作表
H. ActiveSheet 表示当前活动工作表
I. Worksheet 也表示工作表,但不包括图表工作表、宏工作表等。
J. Cells 所有单元格
K. Range ("单元格地址")
L. Cells(行数,列数)
M. Activecell 当前选中的单元格
N. Selection 被选中的单元格或者单元格区域
30.变量强制声明
A. 变明使用前声明是一个好习惯,但我们会忘记,怎么办呢
B. 方法一 Alt+F11——>>工具菜单——>>选项——>>编辑器选项卡中——>>勾起“要求变量声明”复选框
C. 方法二 在代码模块顶端输入 Option Explicit
31.变更作用域
A. 过程变量:定义变量是写在过程中的,其作用是在过程运行中,当过程结束变量也就销毁了。
B. 模块级变量:定义变量写在模块的顶端,在此模块中可以调用此变量,其值还是存在,别的模块就不行了
C. 全局性变量 也是定义变量写在模块的顶端,不过就不是用Dim来定义了,要用Public,这个变量就在所有的模块都可以调用,也就是这个变量值一直存在,直到把Excel程序关闭,变量值才会销毁。
32. &符号的两端没有空格会造成语法错误
33.Range("a1").Select报错"类range的select方法无效"
1. 在代码行 “Sheets(1).Range("A1").Select ”
之前加下面这个语句
Sheets(1).activate
回答:选择单元格前要激活所在工作表
2. Sheets(1).Range("A1").Select 改为 application.goto Sheets(1).Range("A1")
回答:激活工作表和选择单元格在同一语句完成
34.重定义动态数组时,要想保持数组中原有的数据,只能修改最后一维的维数
35.currentregion只的是连续单元格组成的矩形区域,除了边界的单元格,一般单元格有8个相邻单元格,(下图中红线区域)
usedrange是当前工作表已经使用的单元格组成的矩形区域,设置格式也属于已经使用(下图中的兰线区域)
这两个区域有时相同,有时不同,本图中,二者结果不同的原因在于黄色区域是空白的