VBA

  1. 在工具栏中将"开发工具"菜单调出来,点击VBA script或者快捷键ALT+F11, 打开编程窗口

  2. 下拉列表:选中要处理的单元格>>数据>>数据验证(数据有效性)>>序列>>输入示例:1,2,3

  3. function和sub最大区别在两点
    1.function可以返回值,sub则不可以返回值
    2.sub可以直接执行,但function需要调用才可以执行

  4. 定义宏

sub mysub()
    'you code here
end sub
  1. 定义函数
'定义返回类型为Intteger
Function GetLogTypeID(LogType As String) As Integer

    Set GetLogTypeID = 129 '返回
End Function
  1. 退出,类似其他程序中的return
Exit Sub '退出宏
Exit Function '退出函数
  1. Range和Cells

    1. Range是对象,根据参数获得一个区域对象
    2. Cells为属性,在某个对象上调用时返回该对象上指定的单元格,直接使用Cells(1,1)实际是省略了Application.
  2. alert一个消息

'下面两种都可以
MsgBox(123)
MsgBox 123
  1. For 循环
For i = 1 to 10
    MsgBox i
Next i
  1. For Each
For Each R in Range("C2:C20")
    R = 123
Next
  1. 选择工作表
'根据序号和名字都可以
Worksheets(1)
Worksheets("ListData")
  1. 单元格点击事件处理
    单元格好像没有指定宏的功能,按钮什么的倒是有。处理单元格点击事件就是检测整个工作表的Worksheet_SelectionChange事件,然后判断是否

  2. Q:在VBA中,如何输入录入多行的字符串?A:这个是VBA中的基本功。使用“&+空格+_”换行,

Sub lyq()
    sStr = "abc" & _
    "dsfkjd" & _
    "sdflj"
    MsgBox sStr
End Sub
  1. 字符串连接
    在VBA中用于字符串连接的只有“&”和“+”两种运算符。

    1. “&”是强制性连接,就是不管什么都连接。
    2. “+”是对字符串进行连接,对数字则进行加法运算。(用“+”号的时候,“+”前后类型要一致)
  2. 复制到剪切板
    将变量的值或文本内容复制或发送到剪贴板,仅对窗体有效,DataObject 是MSFORM子类

'声明新DataObject 类
Dim MyData As New DataObject 
'设定文本,可以将Me.TextBox1.Text作为文本传递   
MyData.SetText("文本内容")
'送入剪贴板     
MyData.PutInClipboard           
  1. 获取剪切板内容
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
  1. 获取剪切板内容
Dim a As New DataObject
a.GetFromClipboard
Range("a1").Value=a.GetText
  1. 单元格复制粘贴
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
  1. 字符串搜索
    http://www.51vba.com/show.aspx?id=4202

  2. 类型定义符
    %是整型,存储范围为-32768到32767
    &是长整型,存储范围为-2147483648到2147483647
    $是字符串,string
    Dim wipID&
    Dim wipID as Long

  3. 非空行数,A列的非空行数

Application.CountA(Range("A:A"))
  1. 清除单元格
Range("A1").clear '啥都清除
Range("A1").clearFormats
Range("A1").clearContents
  1. 背景色
Cells(1).Interior.ColorIndex = 3'该单元格填充红色
  1. 已用非空行
UsedRows = Application.CountA(Worksheets("MonthSummary").Range("A:A")) + 1
  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
  1. 使用过渡变量,会报错"需要对象", 慎用
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
原文地址:https://www.cnblogs.com/wancy86/p/VBA.html