-
在工具栏中将"开发工具"菜单调出来,点击VBA script或者快捷键ALT+F11, 打开编程窗口
-
下拉列表:选中要处理的单元格>>数据>>数据验证(数据有效性)>>序列>>输入示例:1,2,3
-
function和sub最大区别在两点
1.function可以返回值,sub则不可以返回值
2.sub可以直接执行,但function需要调用才可以执行 -
定义宏
sub mysub()
'you code here
end sub
- 定义函数
'定义返回类型为Intteger
Function GetLogTypeID(LogType As String) As Integer
Set GetLogTypeID = 129 '返回
End Function
- 退出,类似其他程序中的return
Exit Sub '退出宏
Exit Function '退出函数
-
Range和Cells
- Range是对象,根据参数获得一个区域对象
- Cells为属性,在某个对象上调用时返回该对象上指定的单元格,直接使用Cells(1,1)实际是省略了
Application.
-
alert一个消息
'下面两种都可以
MsgBox(123)
MsgBox 123
- For 循环
For i = 1 to 10
MsgBox i
Next i
- For Each
For Each R in Range("C2:C20")
R = 123
Next
- 选择工作表
'根据序号和名字都可以
Worksheets(1)
Worksheets("ListData")
-
单元格点击事件处理
单元格好像没有指定宏的功能,按钮什么的倒是有。处理单元格点击事件就是检测整个工作表的Worksheet_SelectionChange
事件,然后判断是否 -
Q:在VBA中,如何输入录入多行的字符串?A:这个是VBA中的基本功。使用“&+空格+_”换行,
Sub lyq()
sStr = "abc" & _
"dsfkjd" & _
"sdflj"
MsgBox sStr
End Sub
-
字符串连接
在VBA中用于字符串连接的只有“&”和“+”两种运算符。- “&”是强制性连接,就是不管什么都连接。
- “+”是对字符串进行连接,对数字则进行加法运算。(用“+”号的时候,“+”前后类型要一致)
-
复制到剪切板
将变量的值或文本内容复制或发送到剪贴板,仅对窗体有效,DataObject 是MSFORM子类
'声明新DataObject 类
Dim MyData As New DataObject
'设定文本,可以将Me.TextBox1.Text作为文本传递
MyData.SetText("文本内容")
'送入剪贴板
MyData.PutInClipboard
- 获取剪切板内容
Function GetClipBoardText()
'将剪贴板中的文本输出到一变量。
Dim MyData As DataObject
Set MyData = New DataObject
'如果剪贴板的数据是文本
If MyData.GetFormat(1) = True Then
'从剪贴板中获得数据
MyData.GetFromClipboard
'把数据返回给函数值
GetClipBoardText = MyData.GetText(1)
End If
End Function
- 获取剪切板内容
Dim a As New DataObject
a.GetFromClipboard
Range("a1").Value=a.GetText
- 单元格复制粘贴
Sub C2R()
Dim RCount As Integer
RCount = 2
Dim FillIn, FillIn2
Set FillIn = Worksheets("Fill-in Forms")
Set FillIn2 = Worksheets("fillinforms2")
Application.ScreenUpdating = False
Dim ENComment$
For Each EN In FillIn.Range("B2:DG2")
ENComment = FillIn.Cells(2, EN.Column + 1).Value
If InStr(0, ENComment, EN.Value) >= 0 Then
For Each Fill In FillIn.Range("A2:A166")
If Cells(Fill.Row, EN.Column).Value <> "" Then
EN.Copy (FillIn2.Range("A" & RCount))
Fill.Copy (FillIn2.Range("B" & RCount))
Cells(Fill.Row, EN.Column).Copy (FillIn2.Range("C" & RCount))
RCount = RCount + 1
End If
Next
End If
Next
End Sub
-
类型定义符
%是整型,存储范围为-32768到32767
&是长整型,存储范围为-2147483648到2147483647
$是字符串,string
Dim wipID&
Dim wipID as Long -
非空行数,A列的非空行数
Application.CountA(Range("A:A"))
- 清除单元格
Range("A1").clear '啥都清除
Range("A1").clearFormats
Range("A1").clearContents
- 背景色
Cells(1).Interior.ColorIndex = 3'该单元格填充红色
- 已用非空行
UsedRows = Application.CountA(Worksheets("MonthSummary").Range("A:A")) + 1
- with 语句使用
summary.Range("B" & UsedRows) = feedate & fee.Value
With summary.Range("B" & UsedRows)
.Offset(0, -1) = UserName
.Offset(0, 1) = fee.Offset(0, 1).Value
.Offset(0, 2) = fee.Offset(0, 2).Value
.Offset(0, 3) = fee.Offset(0, 3).Value
.Offset(0, 4) = fee.Offset(0, 4).Value
.Offset(0, 5) = fee.Offset(0, 5).Value
End With
- 使用过渡变量,会报错"需要对象", 慎用
Dim copy2cell as Range,UsedRows%,fee
UsedRows = 2
fee = Range("A2")
set copy2cell = ssummary.Range("B" & UsedRows)
copy2cell.Offset(0, 1) = fee.Offset(0, 1).Value
copy2cell.Offset(0, 2) = fee.Offset(0, 2).Value