精华内容
下载资源
问答
  • Excel VBA String 数据类型

    千次阅读 2020-02-11 13:45:55
    Excel VBA String 数据类型 字符串有两种类型:可变长度字符串和固定长度字符串。 可变长度字符串最多可以包含大约 20 亿 (2^31) 个字符。 固定长度的字符串可以包含1到大约 64 K (2 ^ 16) 个字符。 ' 使用两个双...

    Excel VBA String 数据类型

    字符串有两种类型:可变长度字符串和固定长度字符串。

    • 可变长度字符串最多可以包含大约 20 亿 (2^31) 个字符。
    • 固定长度的字符串可以包含1到大约 64 K (2 ^ 16) 个字符。
      ' 使用两个双引号来转义出单个双引号
      Dim s As String
      s = "This string literal has an embedded "" in it."
    	
      ' 使用 Chr 函数 和 & 连接符
      Dim s As String
      s = "This string literal has an embedded " & Chr(34) & " in it."
    

    固定长度的字符串包括附加空格或根据需要截断:

        ' 定义定长字符串 
        Dim s As String * 3
        Debug.Print Len(s) & " characters [" & s & "]" 'Prints 3 characters [   ]
        s = "a"
        Debug.Print Len(s) & " characters [" & s & "]" 'Prints 3 characters [a  ]
        s = "abcdefghijklmnopqrstuvwxyz"
        Debug.Print Len(s) & " characters [" & s & "]" 'Prints 3 characters [abc]
    

    数字转String

    Dim MyString
    MyString = Str(459)    ' Returns " 459".
    MyString = Str(-459.65)    ' Returns "-459.65".
    MyString = Str(459.001)    ' Returns " 459.001".
    

    参考:
    String 数据类型 | Microsoft Docs

    展开全文
  • 数据类型判断、转化,对话框(弹框输入、提示,返回文件路径、文件夹),空的一些情况,正则表达式语法,其他常用语句。

    这里整理下自己觉得VBA可能会比较有用的一些内容,主要涉及到数据类型的判断、转化,对话框的使用,关于‘空’的阐述以及正则表达式的基本语法。


    一些常用的语句

    取消当前工作表所有超链接

    Cells.Hyperlinks.Delete
    

    刷新透视表

    ActiveSheet.PivotTables("数据透视表1").PivotCache.Refresh
    

    结束exit语句

    • exit do ’ 结束do循环
    • eixt for ’ 结束for循环
    • exit sub ’ if condition then ~~~ : end end是结束整个程序。exit sub只是结束这个过程。
    • exit function ’ 结束函数运行
    sub test()
    	num = 1
    	if num=1 then exit sub   ' 如果num的值为1,则结束过程,下面的语句不会执行
    	debug.print "do other things"
    end sub
    

    循环语句

    • for循环1:
      exit for 表实结束for循环,可以结合if判断结束循环。
      for i = 1 to n

      next

    • for循环2,遍历的变量必须是变体型变量variable,不然会报错
      for each var in list

      next

    • do循环类型1:
      do while +条件 while表示符合条件时执行循环

      loop

    • do循环类型2:
      do until + 条件 until表示当符合条件时跳出循环

      loop

    • do循环类型3:
      使用if + exit do 结束循环。
      do
      if + 条件
      exit do
      end if
      loop

    • do循环4:
      do

      loop until+ 条件 while和until灵活使用,一个符合条件执行循环,一个符合条件跳出循环。
    sub test()
    ' 示例:从1打印到99
    num = 1
    do while num<100 
    	debug.print num    
    	num = num + 1
    loop
    end sub
    

    格式刷

    .Range("a6:at6").Copy
    .Range("a7:a7").PasteSpecial Paste:=xlPasteFormats
    

    shell打开txt文件

    Shell "Notepad.exe " & f, vbNormalFocus	' f:txt文件完整路径
    

    选择性粘贴为值

    With ActiveSheet.UsedRange
        .Copy
        .PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False		'复制后要清空剪切板,不然再操作复制,会出错。
    End With
    

    错误相关

    on error resume next		' 遇到错误忽略继续
    on error goto line		' 遇到错误跳转
    on	error goto 0		' 遇到错误报错。可以再on error resume next 后调用恢复报错。
    ' goto是跳转语句,也可以结合判断使用
    If VBA.IsError(Range("A1").Value) = True Then		' 判断单元公式返回的是否是错误值
    

    插入批注

    ActiveCell.AddComment ("Hello")  
    

    自动调整列宽

    Range("a1:h1").EntireColumn.AutoFit
    

    公式自动向下填充

    Cells(2, 3).Formula = "=a2&b2"	输入公式
    Range(Cells(2, 3), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 3)).FillDown	' 使用filldown公式向下填充
    range("a2:b" & usedrange.rows.count).filldown   ' 假设分别在a1和b1单元格输入公式的情况下,下面单元格自动填充
    

    隐藏excel网格线,隐藏行列

    ActiveWindow.DisplayGridlines = False     ' 隐藏网格线
    Range("C:C,E:E").EntireColumn.Hidden = True   ' 隐藏列
    ' 取消行列隐藏
    Cells.EntireColumn.Hidden = False 
    Cells.EntireRow.Hidden = False
    

    背景颜色索引

    range("a1").Interior.ColorIndex = xlNone   ' 取消背景颜色
    range("a1").Interior.ColorIndex =3    ' 红色
    Range("h:l,o:o,r:s,aa:ab").Interior.Color = vbGreen  ' 也可以直接设置color
    

    在这里插入图片描述

    判断字符串是否包含xx字符:instr

    index = instr("who you are","are")
    

    数据类型的判断

    类型判断:返回bool值;

    • typename(i) :判断数据格式
    • IsNumeric:判断变量的值是否为数值
    • isdate:判断变量的值是否为日期
    • isnull:判断变量的值是否包含任何有效数据
    • isempty:判断变量的值是否为空
    • IsArray : 判断出变量是否为一个数组。
    • IsError:判断变量是否返回的是一个错误值
    • IsObject:判断变量是否表示对象变量

    数据类型转化

    很多时候在判断时候,数据类型不一致会带来干扰,这时候可以使用类型转化函数。

    • CBool :Boolean
    • CDate :Date 任何有效的日期表达式。可以使用isdate判断date是否可以被转化为日期或时间。
    • CInt :Integer -32,768 至 32,767,小数部分四舍五入。
    • CLng :Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。
    • CSng :Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
    • CStr :String 依据 expression 参数返回Cstr。
    • CVar :Variant 若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。
    • Val :将数字转化为值value。
    • int: 转化为整数。比如int(“10”)

    关于“空”

    variant类型

    A = Null '一个variant变量可以赋值为Null
    IsNull(A) '判断一个varint变量是否为Null
    一个尚未初始化的variant变量是empty
    a = empty
    A 等于 Empty, 因为尚未初始化的“不定型变量”都等于 Empty。
    isempty(a)可判断是否为空对象
    '但如果检测 A = “” 或 A = 0, 也都可以得到 True 值。

    string类型

    判断一个string变量为""(空字符串)
    a = “”

    integer类型

    定义一个integer变量后,它自动初始化为0
    a = 0

    object类型

    定义一个object变量后,它自动初始化为nothing。对象要使用is判断
    a is nothing


    对话框的使用

    这里主要涉及到inputbox输入框、msgbox弹出框、以及选择文件、文件夹对话框

    输入框:inputbox

    • Application.inputbox(prompt,title,default,left,top,helpfile,helpcontextid,type)

      • prompt:提示信息 - 必选参数
      • title:标题
      • default:输入框内默认显示内容
      • Left:指定对话框相对于屏幕左上角的 X 坐标(以磅为单位)
      • Top:指定对话框相对于屏幕左上角的 Y 坐标(以磅为单位)
      • HelpFile:此输入框使用的帮助文件名, 如果有 HelpFile 和 HelpContextID 参数,对话框中会显示帮助按钮
      • HelpContextID:HelpFile 中帮助主题的上下文 ID 号
      • Type:指定返回的数据类型, 如果省略此参数,则对话框返回文本
        • type参数: {0:公式,1:数字,2:文本,4:逻辑值,8:range单元格引用,16:错误值,64:数值数组}
    • inputbox和Application.inputbox区别:
      点击取消,前者返回是空。后者返回是false,用以区分返回输入是空还是点击了取消;后者可以限定输入的数据类型,如果输入数据类型与要求不符合会报错。

      Sub inputbox()
      '通过inputbox传入单元格
      Dim inputbx
      On Error GoTo 100
      Set inputbx = Application.inputbox("请选择单元格", "Title", "点击工作表单元格", , , , , 8)
      inputbx.Interior.Color = vbGreen
      100:
      End Sub
      

    消息框:MsgBox

    • MsgBox(prompt[,buttons][,title][,helpfile,context])

      • 参数
        • prompt - 必需的参数。在对话框中显示为消息的字符串。提示的最大长度大约为1024个字符。 如果消息扩展为多行,则可以使用每行之间的回车符(Chr(13))或换行符(Chr(10))来分隔行。
        • buttons - 可选参数。一个数字表达式,指定要显示的按钮的类型,要使用的图标样式,默认按钮的标识以及消息框的形式。如果留空,则按钮的默认值为0。
        • title - 可选参数。 显示在对话框的标题栏中的字符串表达式。 如果标题留空,应用程序名称将被放置在标题栏中。
        • helpfile - 可选参数。一个字符串表达式,标识用于为对话框提供上下文相关帮助的帮助文件。
        • Context - 可选参数。一个数字表达式,用于标识由帮助作者分配给相应帮助主题的帮助上下文编号。 如果提供上下文,则还必须提供helpfile。
      • Buttons参数
        该参数可以是用过数字或者英文标志,同时也可以多个一起使用,中间使用‘+’号连接。
        • 0 vbOKOnly - 仅显示“确定” 按钮。
        • 1 vbOKCancel - 显示“确定” 和“取消” 按钮。
        • 2 vbAbortRetryIgnore - 显示“中止”,“重试”和“忽略” 按钮。
        • 3 vbYesNoCancel - 显示“是”,“否”和“取消” 按钮。
        • 4 vbYesNo - 显示“是”和“否”按钮。
        • 5 vbRetryCancel - 显示“重试”和“取消”按钮。
        • 16 vbCritical - 显示严重消息图标。
        • 32 vbQuestion - 显示警告查询图标。
        • 48 vbExclamation - 显示警告消息图标。
        • 64 vbInformation - 显示信息消息图标。
        • 0 vbDefaultButton1 - 第一个按钮是默认的。
        • 256 vbDefaultButton2 - 第二个按钮是默认的。
        • 512 vbDefaultButton3 - 第三个按钮是默认的。
        • 768 vbDefaultButton4 - 第四个按钮是默认的。
        • 0 vbApplicationModal 应用程序模式 - 当前的应用程序将不会工作,直到用户响应消息框。
        • 4096 vbSystemModal 系统模式 - 所有的应用程序将不会工作,直到用户响应消息框。
      • MsgBox函数返回值
        • vbOK - 确定 按钮被点击。
        • vbCancel - 取消 按钮被点击。
        • vbAbort - 中止 按钮被点击。
        • vbIgnore - 忽略 按钮被点击。
        • vbYes - 是 按钮被点击。
        • vbNo - 否 按钮被点击。
      msb = MsgBox("选择是、否或取消", vbYesNoCancel + vbInformation, "标题")
      

      在这里插入图片描述


    返回文件路径:GetOpenFilename

    • 返回文件完整路径:fullname
      可以调用改对话框选择文件,再打开对应的文件。
      Application.GetOpenFilename(文件类型筛选规则,优先显示第几个类型的文件,标题,是否允许选择多个文件名)
      • 限制文件为excel文件:
      f = Application.GetOpenFilename("Excel文件,*.xls")
      
      • 打开多种文件类型(word和excel):
      f = Application.GetOpenFilename("Excel2003文件,*.xls,Word文件,*.doc")
      
      • 打开多种文件类型,默认显示word文件(最后的参数2表示根据前边的选项,默认打开第几个):
      f = Application.GetOpenFilename("Excel2003文件,*.xls,Word文件,*.doc,文本文件,*.txt", 2)
      
      • 设置对话框名称:
      f = Application.GetOpenFilename("Excel2003文件,*.xls,Word文件,*.doc,文本文件,*.txt", 2, "选择要汇总的文件")
      
      • 选择多个文件,并以数组形式返回:
      Dim f
      ChDrive "E"
      ChDir Application.Path
      f = Application.GetOpenFilename("Excel2003文件,*.xls,Word文件,*.doc,文本文件,*.txt", 1, MultiSelect:=True)
      MsgBox f(1)		'返回数组第一个
      

    返回文件夹:FileDialog

    • 选择并返回文件夹:FileDialog
    • FileDialog属性和方法:
      • AllowMultiSelect 如果允许用户从文件对话框中选择多个文件,则返回 True。Boolean 类型,可读写
      • SelectedItems 选取的多个文件集合
      • InitialFileName 属性:设置初始路径和文件名称
      • InitialView 属性 :可以设置初始文件的显示样多
      • show 可以判断用户是否点击了取消按钮,如果点击取消会返回0,否则返回-1
      Sub test()
      On Error Resume Next
      Dim dig As Object
      Set dig = Application.FileDialog(msoFileDialogFolderPicker)
      With dig
      .InitialFileName = "d:\"		'对话框初始从d盘选择文件夹
      	.Show
      	MsgBox .SelectedItems(1)
      End With
      Set dig = Nothing
      On Error GoTo 0
      End Sub
      

    遍历文件夹下的文件:dir

    Dir [ (pathname, [ attributes ] ) ]

    • pathname
      可选。 指定文件名的字符串表达式,可包括目录或文件夹和驱动器。 如果未找到 pathname,则返回零长度字符串 ("")。
    • attributes
      可选。 其和指定文件属性的常量或数值表达式。 如果省略它,则返回与 pathname 匹配但没有属性的文件。参数设置为:
      • vbNormal 0 (默认)指定没有属性的文件。
      • vbReadOnly 1 指定只读文件以及不带属性的文件。
      • vbHidden 2 指定隐藏文件以及不带属性的文件。
      • vbSystem 4 指定系统文件以及不带属性的文件。 在 Macintosh 上不可用。
      • vbVolume 8 指定卷标;如果指定任何其他属性,则忽略 vbVolume。 在 - Macintosh 上不可用。
      • vbDirectory 16 指定目录或文件夹以及不带属性的文件。
      • vbAlias 64 指定文件名为别名。 仅在 Macintosh 上可用。
    Sub find_file()
    ' 遍历f\Others文件夹下的excel文件
    ChDrive "f"
    ChDir "f:\Others"
    f = Dir("*.xls*")
    Do While f <> ""
    	Debug.Print f
    	f = Dir    ' 找下一个符合条件的文件
    Loop
    End Sub
    

    正则表达式

    常用属性

    • Global: 如果值为True,则搜索全部字符;如果值为False,则搜索到第1个即停止
    • IgnoreCase:bool类型,是否区分大小写
    • Pattern:正则表达式
    • Multiline:字符串是不是使用了多行,如果是多行,$(表示以…结尾)适用于每一行的最后一个

    常用方法

    replace:替换

    replace(string,replace_str)

       Sub test()
           Dim regexp As Object
           Dim sr
    	Set regexp = CreateObject("vbscript.regexp")
           sr = "苹果12斤"
           With reg
             .Global = True
             .Pattern = "[\u4e00-\u9fa5]"
             Debug.Print .Replace(sr, "")		'把文字替换成空,取出数字
           End With
         End Sub
    

    test:是否匹配

    正则表达式是否能在字符串匹配到,返回bool值;test(string)

    Execute:执行

    执行返回一个 MatchCollection (集合)对象,该对象包含每个成功匹配的 Match 对象,如果只匹配一个的话,可以用数组m(0)直接返回匹配结果。如果有使用小括号“()”分组匹配,可以使用MatchCollection对象的SubMatches获取分组的内容,再使用数组切片到对应内容。

    如果有使用多个小括号分组,submatches的排序先从左往右,从外到里;

    比如.Pattern = "(from|join)\s+((\w+\.?\w+)(\))?(\s+)?(\w+)?)"
    submatches(0):(from|join)
    submatches(1):((\w+.?\w+)())?(\s+)?(\w+)?)
    submatches(2):(\w+.?\w+)
    submatches(3):(\))
    submatches(4):(\s+)
    submatches(5):(\w+)

    Sub test()
    Dim regexp As Object
    Dim sr
    Dim collections As Object
    Dim submat
    Dim m
    
    sr = "5月2号销售量15,销售金额30,5月3号销售量20,销售金额40;"
    Set regexp = CreateObject("vbscript.regexp")
    With regexp
        .Global = True
        .Pattern = "销售量(\d+).+?销售金额(\d+)"
        If .test(sr) Then		'如果能匹配到再输入
            Set collections = .Execute(sr)
            For Each m In collections
                Debug.Print m
                For Each submat In m.submatches
                    Debug.Print submat
                Next
            Next
        End If
        Debug.Print collections(0).submatches(1)   '我们也可以直接切片,比如第一个匹配对象的第二个分组
    End With
    End Sub
    

    在这里插入图片描述

    ___
    
    • MatchCollection对象的属性
      • FirstIndex : 匹配内容在整个字符串中的起始位置
      • Length : 匹配长度
      • Value:匹配的值
      • count:匹配对象的数量
      • item:匹配对象,如上使用集合或者对象索引切片,比如:collections(0)
    • SubMatches对象属性
      • count:匹配的分组数量
      • value:匹配的值
      • item:使用对象的索引切片,比如:collections(0).submatches(1)
        -

    关于正则的语法各编程语言基本一致,这里就不再多赘述了,有需要mina就网上搜罗吧~~~
    关于程序调试,以及查看对象的属性,查看VBE的本地窗口变量的变化及详情会是个不错的选择,此外,VBA帮助有中文译本,阅读容易,遇到问题可以查找官方文档。以下为官方文档链接:
    https://docs.microsoft.com/zh-cn/office/client-developer/excel/excel-home

    正则表达式测试工具分享:
    链接:https://pan.baidu.com/s/1Smn65HVXcpS6H3Bes9VjvQ
    提取码:6j6w

    参考:《兰色幻想》VBA教程

    展开全文
  • 大家好,我们今日继续讲解VBA代码解决方案的第134讲内容:随机文件的特点及如何用自定义数据类型访问随机文件。当某文件包含结构数据时,就可以以随机模式打开它。以随机模式打开文件你可以做到:同时读写、快速访问...

    大家好,我们今日继续讲解VBA代码解决方案的第134讲内容:随机文件的特点及如何用自定义数据类型访问随机文件。当某文件包含结构数据时,就可以以随机模式打开它。以随机模式打开文件你可以做到:同时读写、快速访问某特别记录。

    随机文件有什么特点呢?原来,在随机文件里,所有记录都是等长度的,并且每条记录都有相同数目的固定大小区域。区域的长度必须在文件写入数据之前就确定。如果写入某区域的字符串长度小于该区域的大小,那么VBA就会自动在该字符串后面加空格来填充区域。如果写入的文本比区域长度长的话,超出的字符就不会被写入。说到这里,你是不是看到了数据库的影子呢?数据库就是这样,有很多朋友问到数据库的相关问题,在这套“VBA代码解决方案”中虽然会有所涉及,但不会很多,在之后,会专门出一本关于数据库的书。

    再次归纳一下,随机文件是指储存的记录可以随机访问的文件,这意味着随机文件里的任何记录都可以读取,而不必读取它之前的每条记录。这是同顺序文件的最为显著的区别。

    为什么要自定义一种数据类型呢?因为在操作随机文件时经常会用到这类自定义的数据类型,或者说你在建立数据库时会事先定义数据的类型,当你再次访问这类数据时要定义一个与之匹配的变量与数据类型相一致为好。

    在VBA中,允许你在模块的上面使用Type…End Type语句定义一个非标准的数据类型。这种非标准数据类型也经常成为用户自定义的数据类型。用户自定义数据类型可以包括各种数据类型(字符串,整型,日期等等)的内容。当你在使用随机访问的文件时,该变量使你可以轻易地访问个别记录。

    下面我们将实例说明一下如何自定义一个数据类型:

    Option Explicit

    Type MyDictionary

    myen As String * 10

    mysp As String * 20

    End Type

    Sub Mytype()

    Dim myrecord As MyDictionary '声明一个MyDictionary类型的变量

    myrecord.myen = InputBox("请输入一个数据", "记录信息")

    myrecord.mysp = InputBox("请输入另一个数据", "记录信息")

    MsgBox "数据1:" & myrecord.myen & vbLf & "数据2:" & myrecord.mysp, vbOKOnly, "基本信息"

    MsgBox "数据1的长度:" & Len(myrecord.myen) & vbLf & "数据2的长度:" & Len(myrecord.mysp), vbOKOnly, "基本信息"

    End Sub

    代码截图:

    b81610f0d050e40bc034b1b61a99c600.png

    上面的例子中,用户定义的名为MyDictionary的类型包括两个声明为String(字符串)的项目,并且有特定的大小。成员myen可以接受最多10个字符,第二个项目mysp的大小不能超过20个字符。

    在运行过程中,要求输入两个字符,然后用对话框显示你的输入,最后为了验证字符的长度,再次显示一下你录入字符的长度。下面我们看一下运行的结果:

    aff46f94d651575e2f39f1a4bc4224b9.png

    上面的对话框显然是超过了10个字符。第二个对话框:

    2c244e1ddec8edc79bc907215dd79910.png

    这次我录入的字符是小于20个字符的数据。

    我们看弹出的结果:

    e3d2f06529ca8f3e09564dfd326530f1.png

    可以看出数据1被截取了,再看长度:

    174c8f5f1a24688c37f12fe07d27a1ba.png

    数据1的长度是10,数据2的长度是20,和我们的定义是完全一致的。这就是自定义数据的神奇之处。

    今日内容回向:

    1 什么是自定义数据?

    2 什么是随机文件?谈到随机文件,你会想到什么常用文件呢?

    展开全文
  • 一、VBA介绍 ...录制的宏是vba里最简单的程序,正因为如此,录制宏存在许多缺陷:如无法进行判断和循环,能显示用户窗体,能进行人机交互……  解决录制宏的这些问题,需要掌握vbs编...

     

    转载自:https://www.cnblogs.com/wzh313/articles/9737573.html

     

     

    一、VBA介绍

    1、宏和VBA的关系

      vba是编程语言,宏是用vba代码保存下来的程序。录制的宏是vba里最简单的程序,正因为如此,录制宏存在许多缺陷:如无法进行判断和循环,不能显示用户窗体,不能进行人机交互……

      解决录制宏的这些问题,需要掌握vbs编程的方法,自主的编写vba程序。

    2VBA程序结构

    • 代码:vba程序由代码组成。
    • 过程:例如Sub过程、Function过程
    • 模块:保存过程的地方,一个模块可以保存多个不同类型的过程
    • 对象:用代码操作或控制的东西即为对象,例如工作簿、工作表、单元格、图片、图表、透视表等
    • 对象的属性:每个对象都有属性,属性是对象包含的内容或特点,例如A1单元格的内容:A1.内容,代码表达为Range("A1).Value
    • 对象的方法:方法是指在对象上执行的某个动作,例如Range("A1").Select
    • 关键字:关键字是vba中的保留字或符号,例如语句名称、函数名称、运算符等都是关键字

    3VBE介绍

      VBEVisual Basic EditorVBA的编程环境

      1)打开VBE编辑器

        Alt+F11Alt+F8是查看宏)

        依次执行:(2003版本)工具————Visual Basic编辑器,(2007以上版本)在视图下的选项卡下

        右键单击工作表标签,执行查看代码命令

      2)主窗口:包含工程资源管理器属性窗口菜单栏工具栏代码窗口立即窗口

         https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002210913019-557680448.png

      3)菜单栏:包含VBE中各种组件的命令

      4)工具栏:可以在视图”——“工具栏菜单里显示或隐藏

      5)工程资源管理器:在这里可以看到所有打开的Excel工作簿和已加载的宏,一个Excel的工作簿就是一个工程,工程名称为“VBA Project(工作簿名称),这里最多可以显示工程里的4类对象,即Excel对象(包括sheet对象和ThisWorkbook对象)、窗体对象、模块对象和类模块对象。

        https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002211529739-304468028.png

      6)属性窗口:在这里查看或设置对象的属性

      7)代码窗口:包含对象列表框、过程列表框、边界标识条、视图按钮、代码编辑区、过程分界线。

        https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002211942405-869746445.png

      8)立即窗口:一个重要用途是用来调试代码,想显示立即窗口,可以在视图选项卡中选择或者用快捷键“Ctrl+G”

    4、牛刀小试:用vba生成工资条

    Sub 生成工资条()

    '

    ' 生成工资条 宏

    '

    ' 快捷键: Ctrl+m

    '

        Application.ScreenUpdating = False

        For i = 2 To 7

            ActiveCell.Rows("1:1").EntireRow.Select

            Selection.Copy

            ActiveCell.Offset(2, 0).Rows("1:1").EntireRow.Select

            Selection.Insert Shift:=xlDown

            ActiveCell.Select

        Next

    End Sub

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002204434394-832372585.png

     

    二、VBA数据类型

    1VBA中的数据类型

    数据类型就是对同一组数据的统称,如文本、日期、数值等。

    VBA里的数据类型有:字节型(Byte)、整数型(Integer)、长整数型(Long)、单精度浮点型(Single)、双精度浮点型(Double)、货币型(Currency)、小数型(Decimal)、字符串型(String)、日期型(Date)、布尔型(Boolean)等,如表3-1

     类型声明符:用特殊符号代替变量类型进行变量类型声明,例如Dim str$   $代表String类型。只有部分数据类型可以使用类型声明符。

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002223718617-1432867911.png

     

    三、VBA变量、常量

    1、变量命名要求

    变量必须以字母或汉字开头,不能包含空格、句号、感叹号、@&$#,最长不能超过255个字符(一个汉字计2个字符)

    2、声明变量

    • 单变量定义:Dim 变量名 As 数据类型  

      示例:

      Dim str As String  声明一个String类型(变长)的变量,名称是str

      Dim str As String*10  声明一个String类型(定长,最大存储10个字符)的变量,名称为str

      Dim str$  声明一个String(变长)类型变量,$变量类型声明符,代表String

    • 多变量定义(变量类型相同):Dim 变量1,变量2,…… As 数据类型

      Dim x, y, z As String

    • 多变量定义(变量类型不同):Dim 变量1 As 数据类型1,变量2 As 数据类型2

      Dim str As String,nu As Integer  不同变量之间用逗号隔开

    •   不指定类型的变量定义,默认为Variant类型

      Dim str  每个变量都要指定数据类型,如果不指定,默认为Variant类型

    3、声明常量

    常量定义:Const 变量名称 As 数据类型=数值

    示例:

    Const pi As Single=3.14 

     

    4、变量的作用域

    Public 变量名称  As 数据类型  【公有变量】

    Private 变量名称  As 数据类型   【私有变量】

    Static 变量名称 As 数据类型  【静态变量,整个代码运行期间值不变】

     

    单个变量:本地变量

    单个模块:模块级变量,用DimPrivate

    所有模块:公共变量,用Public

     

    5、强制声明所有变量(未定义变量则提示,否则不提示)

    Option Explicit  在模块的第一句表示。

    可以在VBE下的工具”——“选项”——“编辑器选项卡中进行设置,这里设置后,每个模块的第一句会自动写下“Option Explicit”,无需手动输入。

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002225028761-680101331.png

     

    6、给变量赋值

    • 给文本、数值、日期等数据类型变量赋值

      语句为:[Let]变量名称 = 数据  这里的Let可以省略,即:变量名称=数据

      例如:

      Dim str As String

      Let str = “一起来学习VBA”

     

    • 给对象变量(object型,例如单元格)赋值

      语句为:Set 变量名称=对象  这里Set千万不能少。

      例如:

      Dim rng = Range    '声明rng变量为Range类型

      Set rng = Worksheets("sheet1").Range("A1")  '给变量rng赋值

      rng.Value="欢迎来到ExcelHome论坛"    '将文本写入变量指定的单元格

     

    四、VBA数组

    1、一维数组 

    声明:Public|Dim 数组名(a to b) As 数据类型

    示例:

    Dim 6(1 to 50) As String  '声明一个String类型的数组,名称为6,可以存储50个元素。

    等价于:

    Public|Dim Arr(0 to 49) As String

    Public|Dim Arr(49) As String   '数组索引默认是从0开始计数,如果在模块的第一句写“Option Base 1”,则数组的起始索引从1开始,而不是0.

     

     6(1)="张青"

     6(2)="邓城"

    ……

     6(50)="冯吉"

     

    2、多维数组:

    Dim 酱油(1 to 3,1 to 20)  

    等价于

    Dim 酱油(2,19)

     

    3、多维动态数组

      不确定数组中存储多少个元素,即不能预知元素的大小,可以在首次定义数组时括号内为空,写成:

      Dim 数组名称() 

    例子:

    Sub dtsz()

        Dim arr() As String '定义多维动态数组

        Dim n As Long

        '统计A列有多少非空单元格

        n = Application.WorksheetFunction.CountA(Range("A:A"))

        MsgBox n

        '使用Dim语句声明变量时,括号内的参数不能是变量,所以必须使用ReDim语句重新指定大小

        ReDim arr(1 To n) As String '重新定义数组的大小

    End Sub

     

    4、其他常用的创建数组的方式

      1)使用Array函数创建数据 

    Sub ArrayTest()

        Dim arr As Variant '定义变量

        '将1-10的自然数赋给数组

        arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

        MsgBox "arr数组的第2个元素为:" & arr(1)

    End Sub

      2)使用split创建数组 

    Sub ArrayTest()

        Dim arr As Variant '定义变量

        '无论是否在模块中写入Option Base 1,Split函数返回的数组的最小索引都是0

        arr = Split("邓成,林梅,张青,孔丽,冯吉维,孔佳", ",") '第一个参数包含分隔符或字符串变量,第二个参数是分隔符

        MsgBox "arr数组的第2个元素为:" & arr(1)

    End Sub

      3)通过Range对象直接创建数组 

    Sub ArrayTest()

        Dim arr As Variant '定义变量

        arr = Range("A1:C3").Value '将A1:C3单元格内容存储到数组arr里

        Range("E1:G3").Value = arr '将数组arr的数据写入大E1:G3

        '将数组的值写入到单元格区域时,单元格区域的大小必须与数组相同

    End Sub

     

    5、数组相关函数:UBoundLBound函数

    UBound(arr) 获取数组arr的最大索引号

    LBound(arr)  获取数组arr的最小索引号

    数组的元素个数可以表示为:UBound(arr)-LBound(arr)+1

    Sub arrcount()

        Dim arr(10 To 50)

        'Char(13)表示回车,_表示代码换行连接符

        MsgBox "数组的最大索引号是:" & UBound(arr) & Chr(13) _

        & "数组最小的索引号是:" & LBound(arr) & Chr(13) _

        & "数组的元素个数是:" & UBound(arr) - LBound(arr) + 1

    End Sub

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002235350493-1504250372.png

    Sub arrcount()

        Dim arr(1 To 10, 1 To 100)

        'Char(13)表示回车,_表示代码换行连接符

        MsgBox "第一维的最大索引号是:" & UBound(arr, 1) & Chr(13) _

        & "第二维的最小索引号是:" & LBound(arr, 2)

    End Sub

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181002235645264-1737423969.png

     

    6、数组相关函数:Join函数

    将一个以为数组里的元素使用指定的分隔符连接成一个新的字符串

    Sub joinTest()

        Dim arr As Variant, txt As String

        arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

        '分割符@可以省略,如果省略,默认使用空格作为分隔符

        txt = Join(arr, "@")

        MsgBox txt

    End Sub

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003000058373-1493022281.png

    将数组写入单元格区域

    Sub ArrToRng1()

        Dim arr As Variant

        arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

        '将一维数组写入单元格区域,单元格区域必须在同一行。如果要写入垂直的一列单元格区域,必须先使用工作表的Transpose函数进行转换

        Range("A1:A9").Value = Application.WorksheetFunction.Transpose(arr)

    End Sub

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003000505174-465361899.png

     

    五、VBA运算符

    1、算术运算符

     用于算术运算,返回值类型为数值型。

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003081801754-2028738841.png

    2、比较运算符

     用于比较运算

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003082450327-1924794428.png

    3、连接运算符

     连接运算符用来连接两个文本字符串,有+&两种

    示例:

    a="欢迎来到"

    b="ExcelHome论坛!"

    ?a+b       '问号?告诉VBA在立即窗口中显示问号后面命令的结果,可以用Print关键字代替问号。

    欢迎来到ExcelHome论坛!

    ?a & b

    欢迎来到ExcelHome论坛!

    ?4+5 '符号+两边都是数值,执行算术运算

    9

    ?"4"+5 '其中5是数值,执行算术运算

    9

    ?"4"+"5" '两个都是文本,执行连接运算

    45 

    4、逻辑运算符

    逻辑运算符用于判断逻辑运算式的真假,参与逻辑运算的数据为逻辑型数据,返回结果为Boolean型,只能为TrueFalse 

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003084543124-894204369.png

    5VBA中的通配符 

     https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003083108565-1181009932.png 

    6、运算符优先级

     VBA中要优先处理蒜素运算符,接着处理连接运算符,然后处理比较运算符,最后再处理逻辑运算符,可以用括号来改变运算顺序。

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003085551348-1987099985.png 

    7、换行符 

    VBA中字符换行显示需要使用换行符来完成。下面是常用的换行符

       'chr(10) 可以生成换行符

       'chr(13) 可以生成回车符

       'vbcrlf 换行符和回车符

       'vbCr 等同于chr(10)

       'vblf 等同于chr(13)

    '例:

    Sub test3()

      MsgBox "我爱" & Chr(10) & "Excel"

     ' MsgBox "我爱你" & Chr(13) & "Excel"

     ' MsgBox "今天" & vbCrLf & "我是大王"

     

    End Sub

    六、VBA内置函数

    使用VBA中内置函数与在工作表中使用工作表函数类似。

    例如,我们想知道当前系统时间

    Sub NowTime()

        MsgBox "现在的时间是:" & Time()

    End Sub

     

    VBA中的内置函数有哪些?查看VBA内置函数的方法:

    1、在VBE帮助(H”——“Microsoft Visual Basic 帮助(H F1”——“Visual Basic 语言参考”——“函数或者在VBE下快捷键“F1”

    地址:https://docs.microsoft.com/zh-cn/office/vba/language/reference/functions-visual-basic-for-applications

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003105413753-1268765509.png

    2、在VBE代码窗口中首先键入“VBA.”系统会自动提示函数列表,如图

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003105127248-2074359819.png

     

    七、VBA控制结构

     1If…Then语句 

    Sub SayHello1()

        If Time < 0.5 Then MsgBox "早上好!"

        If Time >= 0.5 Then MsgBox "下午好!"

    End Sub

     

    Sub SayHello2()

        If Time < 0.5 Then

            MsgBox "早上好!"

        Else

            MsgBox "下午好!"

        End If

    End Sub

     

    Sub SayHello3()

        If Time < 0.5 Then

            MsgBox "早上好!"

        ElseIf Time > 0.75 Then

            MsgBox "晚上好!"

        Else

            MsgBox "下午好!"

        End If

    End Sub

    2Select Case语句 

    Sub SayHello1()

        Select Case Time

            Case Is < 0.5

                MsgBox "早上好!"

            Case Is > 0.75

                MsgBox "晚上!"

        End Select

    End Sub

     

    Sub SayHello2()

        Select Case Time

            Case Is < 0.5

                MsgBox "早上好!"

            Case Is > 0.75

                MsgBox "晚上!"

            Case Else

                MsgBox "下午好!"

        End Select

    End Sub

     

    Sub xingji()

        Dim xj As String

        Select Case Cells(2, "H")

            Case Is < 85

                xj = "不评定"

            Case Is < 100

                xj = "一星级"

            Case Is < 115

                xj = "二星级"

            Case Is < 130

                xj = "三星级"

            Case Is < 150

                xj = "四星级"

            Case Else

                xj = "五星级"

        End Select

        Cells(2, "I") = xj

    End Sub

    3For…Next语句

     语法结构:

    For <循环变量>=<初值>To<终值> [Step 步长值]

      <循环体>

            [Exit For'可以在循环体中任意处加一句或多句Exit For,当遇到这个语句,退出For循环,执行Next后语句

      <循环体>

    Next [循环变量]

     

    Sub xingji()

        Dim xj As String, i As Integer

        For i = 2 To 19 Step 1

            Select Case Cells(i, "H")

                Case Is < 85

                    xj = "不评定"

                Case Is < 100

                    xj = "一星级"

                Case Is < 115

                    xj = "二星级"

                Case Is < 130

                    xj = "三星级"

                Case Is < 150

                    xj = "四星级"

                Case Else

                    xj = "五星级"

            End Select

            Cells(i, "I") = xj

        Next i

    End Sub

    4Do While语句

    • 语法结构1

    Do [While 逻辑表达式]

        <循环体>

        [Exit Do]

        [循环体]

    Loop

    对应示例:

    Sub xingji()

        Dim xj As String, i As Integer

        i = 2

        Do While Cells(i, "H") <> ""

            Select Case Cells(i, "H")

                Case Is < 85

                    xj = "不评定"

                Case Is < 100

                    xj = "一星级"

                Case Is < 115

                    xj = "二星级"

                Case Is < 130

                    xj = "三星级"

                Case Is < 150

                    xj = "四星级"

                Case Else

                    xj = "五星级"

            End Select

            Cells(i, "I") = xj

        i = i + 1

        Loop

    End Sub

    • 语法结构2

    Do

        <循环体>

        [Exit Do]

        [循环体]

    Loop  [While 逻辑表达式]

    对应示例:

    Sub xingji()

        Dim xj As String, i As Integer

        i = 2

        Do

            Select Case Cells(i, "H")

                Case Is < 85

                    xj = "不评定"

                Case Is < 100

                    xj = "一星级"

                Case Is < 115

                    xj = "二星级"

                Case Is < 130

                    xj = "三星级"

                Case Is < 150

                    xj = "四星级"

                Case Else

                    xj = "五星级"

            End Select

            Cells(i, "I") = xj

        i = i + 1

        Loop While Cells(i, "H") <> ""

    End Sub

     

    5Do Until语句

      do Until 后的逻辑表达式为False则执行循环体,否则退出循环,跟Do While相反。

    • 语法结构1

    Do [Until 逻辑表达式]

        <循环体>

        [Exit Do]

        [循环体]

    Loop

     对应示例: 

    Sub xingji()

        Dim xj As String, i As Integer

        i = 2

        Do Until Cells(i, "H") = ""

            Select Case Cells(i, "H")

                Case Is < 85

                    xj = "不评定"

                Case Is < 100

                    xj = "一星级"

                Case Is < 115

                    xj = "二星级"

                Case Is < 130

                    xj = "三星级"

                Case Is < 150

                    xj = "四星级"

                Case Else

                    xj = "五星级"

            End Select

            Cells(i, "I") = xj

        i = i + 1

        Loop

    End Sub

    • 语法结构2

    Do

        <循环体>

        [Exit Do]

        [循环体]

    Loop [Until 逻辑表达式]

     对应示例:

    Sub xingji()

        Dim xj As String, i As Integer

        i = 2

        Do

            Select Case Cells(i, "H")

                Case Is < 85

                    xj = "不评定"

                Case Is < 100

                    xj = "一星级"

                Case Is < 115

                    xj = "二星级"

                Case Is < 130

                    xj = "三星级"

                Case Is < 150

                    xj = "四星级"

                Case Else

                    xj = "五星级"

            End Select

            Cells(i, "I") = xj

        i = i + 1

        Loop Until Cells(i, "H") = ""

    End Sub

    6For Each…Next语句

    当前活动工作簿中有许多工作表,但并不知道数量。如果要把所有工作表的名称按次序写入活动工作表的A列,For Each…Next是更适合的循环。

    For Each 元素变量 In 集合名称或数组名称

        <语句块1>

        [Exit For]

        [语句块2]

    Next [元素变量]

    示例1

    Sub shtName()

        Dim sht As Worksheet, i As Integer

        i = 1

        For Each sht In Worksheets

            Cells(i, "A") = sht.Name

            i = i + 1

        Next sht

    End Sub

    示例2

    Sub shtName()

        Dim c As Range, i As Integer

        i = 1

        For Each c In Range("A1:A10")

            c.Value = i

            i = i + 1

        Next c

    End Sub

    7GoTo语句

     “去到指定地点,用来让程序转到另外一条语句去执行。

    Sub he()

        Dim mysum As Long, i As String

        i = 1

    x:    mysum = mysum + i

        i = i + 1

        If i <= 100 Then GoTo x

        MsgBox "1到100的自然数和是:" & mysun

       

    End Sub

    8With语句

     当需要对相同的对象进行多次操作时,会编写一些重复代码

    Sub FontSet()

        With Worksheets("sheet1").Range("A1").Font

            .Name = "仿宋"

            .Size = 12

            .Bold = True

            .ColorIndex = 3

        End With  '这里的With语句结束标志,不可缺少

    End Sub 

    八、过程Sub

    1Sub定义语句

    声明sub过程的规范语句

    '所有[]内容都是可选的

    'Exit Sub:可选语句,执行它将中断执行并退出过程

    '如果选用Static,运行程序的过程中将保存该过程里声明的本地变量

    'Private和Public用于声明过程的作用域名,如果省略,过程默认为公共过程

    [Private|Public][Static] Sub 过程名([参数列表])

        [语句块]

        [Exit Sub]

        [语句块]

    End Sub 

    2Sub间调用

    被调用过程定义:

    Sub SayHello()

        If Time < 0.5 Then

            MsgBox "早上好!"

        ElseIf Time > 0.75 Then

            MsgBox "晚上好!"

        Else

            MsgBox "下午好!"

        End If

    End Sub

    方法一:过程名[参数1,参数2…]

    Sub RunSub()

        SayHello

    End Sub

    带参数调用

    Sub PrintInfo(info)

        MsgBox info

    End Sub

     

    Sub RunPara()

        PrintInfo ("Hello World")

    End Sub

    方法二:Call 过程名[(参数1,参数2…)]

    Sub RunSub()

        Call SayHello

    End Sub

    方法三:利用Application对象的Run方法,Application.Run 表示过程名的字符串(或字符串变量)[,参数1,参数2…]

    Sub RunSub()

        Application.Run "SayHello"

    End Sub

    3、过程的作用域

     公共过程:可以跨模块调用,用Public 或省略不写。

    Public Sub gggc()

        MsgBox "我是公共过程"

    End Sub

     私有过程:只能在模块内调用,用Private

    Private Sub gggc()

        MsgBox "我是私有过程"

    End Sub

     

    九、自定义Function

     Function过程也称为函数过程,编写一个Function过程,就是编写一个函数。

    1、定义语法格式 

    '最后必须将结果赋值给函数名称

    [Private|Public][Static] Function 函数名([参数列表])[As 数据类型]

        [语句块]

        [函数名=过程结果]

        [Exit Function]

        [语句块]

        [函数名=过程结果]

    End Function

    2、定义函数

    定义函数:生成1-10之间的随机整数

    Public Function Fun()

        Fun = Int(Rnd() * 10) + 1

    End Function

    3、使用函数

    • 使用函数方法一:直接在单元格加“=”调用

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003175415145-1555827260.png

    • 使用函数方法二:通过函数”——“用户定义选择

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003175650768-2071988064.png

    • 用户定义函数可以和其他函数嵌套使用

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003175813829-130215427.png

    •  VBA过程中使用自定义函数

    Sub msg()

        MsgBox Fun()

    End Sub

    4、函数实例

     RGB函数中,R代表红色,G代表绿色,B代表蓝色

     RGB(255,255,0)  表示黄色

    • 判断单元格是否是黄色,是则返回1,否则返回0

    '最后必须将结果赋值给函数名称

    Function CountColor()

        If Range("A1").Interior.Color = RGB(255, 255, 0) Then

            CountColor = 1 '如果是黄色,函数值等于1

        Else

            CountColor = 0

        End If

    End Function

    • 统计指定颜色的单元格个数

    '最后必须将结果赋值给函数名称

    Function CountColor()

        Dim rng As Range

        For Each rng In Range("A1:A10")

            If rng.Interior.Color = RGB(255, 255, 0) Then

                CountColor = CountColor + 1

            End If

        Next rng

    End Function

    • 用参数指定计算区域

    '最后必须将结果赋值给函数名称

    Function CountColor(arr As Range)

        Dim rng As Range

        For Each rng In arr

            If rng.Interior.Color = RGB(255, 255, 0) Then

                CountColor = CountColor + 1

            End If

        Next rng

    End Function

    • 给自定义函数第2个参数

    '最后必须将结果赋值给函数名称

    Function CountColor(arr As Range, c As Range)

        Dim rng As Range

        For Each rng In arr

            If rng.Interior.Color = c.Interior.Color Then

                CountColor = CountColor + 1

            End If

        Next rng

    End Function

    • 设置自定义函数为易失性函数

    工作表重新计算(按F9重新计算,或重启工作簿)之后,自定义函数并不会重新计算。

    如果将自定义函数设置为易失性函数,无论何时重新计算工作表,函数都会重新计算。

    使用命令:Application.Volatile True

    '最后必须将结果赋值给函数名称

    Function CountColor(arr As Range, c As Range)

        Application.Volatile True

        Dim rng As Range

        For Each rng In arr

            If rng.Interior.Color = c.Interior.Color Then

                CountColor = CountColor + 1

            End If

        Next rng

    End Function 

    十、代码美化

    合理缩进:tab

    取消缩进:Shift+Tab

    更改长行代码为短行代码,在子句后面输入一个空格和一个下划线(_),然后换行,这就把一行代码分成两行。

    Sub test()

        Application.Workbooks("Book1").Worksheets("sheet1") _

                .Range("A1:D100").Font.Bold = True

    End Sub

    把多行合并为一行,在第一行代码后加上英文冒号(:),可以接着写第二行代码

    Sub test()

        Dim a%, b%, c%: a = 1: b = 2: c = 3

    End Sub

    注释:用英文单引号(')表示后面的语句为注释

    注释Rem:用Rem注释只能注释一整行,注释行不能有代码逻辑

    Sub test()

        '=================注释

        Application.Workbooks("Book1").Worksheets("sheet1") _

                .Range("A1:D100").Font.Bold = True

        Rem ==============注释

    End Sub

    批量注释:在VBE窗口中,视图”——“工具”——“编辑”——“设置注释块”  【或解除注释块】

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003194316892-1287805115.png

     

    十一、VBE其他设置

    自动列出成员设置:VBE工具”——“选项”——“编辑器选项卡下——“自动列出成员

    https://img2018.cnblogs.com/blog/1165829/201810/1165829-20181003090440979-1804395796.png

     

    展开全文
  • VBA中的数据类型在定义程序中的变量或常量时,需要设定各变量或常量的数据类型。设定数据类型后,程序在运行时可以节省内存空间,优化运行性能。VBA数据类型与其他编程语言的数据类型相似,甚至个别是相同的,详细...
  • 没有归类的包括,在VBA里,总是当成Variant数据类型。高度建议你产生归类了的变量。当你声明变量为某种数据类型,你的VBA程序会运行得更快一些,因为VB需要停下来分析Variant变量到底是什么类型。VB可以使用很多种...
  • VBA 数据透视表的创建

    千次阅读 2021-01-21 15:21:37
    方法 读/写 值类别 默认值 说明 .ColumnGrand ...数据透视表在刷新或移动域时自动设置格式 ...如果数据透视表在有错误的单元格中显示用户自定义的错误字符串,则该值为 True。 .ErrorString 返回...
  • 每天一篇Excel技术图文微信公众号:Excel星球NO.79-什么是数据类型?作者:看见星光微博:EXCELers / 知识星球:Excel嗨,大家好,我是星光,今天咱们来继续学习VBA编程。在零基础学Excel的入门教程里咱们讲过,...
  • 前言 经过《VB的任性,从Variant开始》、《变量,还有这些秘密》和《VB的天地,横看成岭侧成峰》的铺垫,似乎可以隐隐约约...VB中的数值类型除了Byte是无符号的,Integer,Single,Long,Double,Date,Currency都是有符...
  • 本文介绍了利用 Excel 中的 Power Query 与 VBA 实现 CSV 格式数据清洗的关键步骤及思路,对实操过程中的性能提升等具体问题给出了解决办法,最后对此类问题给出了通用的注意事项,具备一定的指导性。
  • excel vba 数据分析

    千次阅读 2019-01-20 12:20:00
    VBA(Visual Basic for Application)是Microsoft Office系列软件的内置编程语言,其语法结构与Visual Basic编程语言互相兼容,采用的是面向对象的编程机制和可视化的编程环境。 第一节 标识符 一.定义 标识符是一...
  • vba数据导入数据库

    2021-01-19 01:38:42
    VBA and Access>>.用vba连接ACESS:SetConn=Server.CreateObject("ADODB.Connection")Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;...文章技术小大人2017-11-22770浏览量VBA将Excel数据导入...
  • vba导入数据库数据

    2021-01-19 18:13:41
    年轻人耗子尾汁我们大家都知道,EXCEL是工作中最常用的一款数据工具,除了做数据录入,还可以用来写函数公式、做透视表等等,但是这些都是最基本的功能,如果只是会这些,还称上是一个高手。按照以下对EXCEL熟练...
  • (仍先以最基本的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻)3.1数据:在Excel中,所需要处理和计算的内容就是Excel里的数据。...3.2.1数据类型:(Excel的VBA为例)1、字节型 Byte ...
  • 每天一篇Excel技术图文微信公众号:Excel星球NO.79-什么是数据类型?作者:看见星光微博:EXCELers / 知识星球:Excel嗨,大家好,我是星光,今天咱们来继续学习VBA编程。在零基础学Excel的入门教程里咱们讲过,...
  • vba数据抓取屏幕数据 完美的Internet可以按照客户选择的格式(无论是CSV,XML,JSON等)向客户提供数据。真正的Internet有时会通过提供数据来取笑,但通常以HTML或PDF文档格式提供,而这些格式旨在显示数据比数据...
  • 利用VBA开发数据汇总工具通常在日常工作中总会用到Excel并且经常会遇到Excel将多个表格进行汇总。经过工作中的实践,发现用VBA开发具有一定重复性的功能,能够极大提高工作效率。最近,将本人曾开发的的Excel数据...
  • PPT新视角——VBA应用技术内容由浅入深,难易结合,理论与... 《PPT新视角——VBA应用技术》既包括了传统VBA技术的应用,又包括了众多VBA突破性技术,这些技术将为具有开发经验的VBA开发人员突破技术上的瓶颈带来福音。
  • VBA编程时,需要什么数据类型一般先声明相应类型的变量。这样,有助于理清编程思路,防止出现数据类型不兼容、丢失精度、浪费存储空间等问题。声明变量类型后,变量所能赋得的值也就相应的收到了限制,具体如下所述...
  • VBA 是一种很久远的编程语言,但并过时。在满足以下两个条件时,借助 VBA 可以极大的提升生产率,降低出错率:你的电脑上允许自主安装软件; 你需要执行的工作中大部分的步骤都是固定且重复的。项目背景近期接到...
  • VBA基础语法:类型转换函数

    千次阅读 2020-01-02 13:34:55
    类型转换函数 语法 返回类型 说明 CBool 函数示例 CByte 函数示例 CCur 函数示例 此示例使用 CCur 函数将表达式转换为 Currency。 CDate 函数示例此示例使用 CDate 函数将字符串转换为 Date。通常,建议不要...
  • 控件数组的概念实际上是VB中的一个概念,在Excel VBA中并具备此功能。此处所描述的控件数组实际是将数组中各个控件对象组成一个数组。当需要赋值给工作表时,则可以使用该数组进行直接赋值。但该数组的作用域必须...
  • 从零开始学Excel VBA

    2014-10-31 10:02:36
    Excel VBA基础篇系统地讲解了Excel VBA开发环境,以及Excel VBA数据类型、运算符、函数与过程等语法知识。Excel VBA对象模型篇针对性地详细讲解了Excel VBA中常用的Application对象、Workbook工作簿、Worksheet...
  • 不同数据类型的清洗

    2015-10-08 19:38:48
    第一步:定义文本格式类型 一般为 .txt .cvs两种 ...excel格式数据以逗号为分隔符. ...用excel打开----->另存为---->选择csv文本格式 (如图)----->用...第二步:定义数据编码类型一般为 utf-8 第三
  • 『Office·Word高级·VBA基础概念语法』 编写人 | SCscHero 编写时间 | Monday, June 29, 2020 文章类型 | 系列 完成度 | 待完善 座右铭 每一个伟大的事业,都有一个微不足道的开始。Hello World! ...
  • excel-vba的常用功能普通功能变量定义日期计算插入链接与图片如何插入一段漂亮的代码片生成一个...如果定义变量,默认变量的数据类型是Variant格式,这样会占据大量的内存空间。 变量的几种分类: Date、String、In
  • MYSQL 数据类型 详解

    2021-01-25 20:28:12
    请问在数据类型里1,char,nchar,nvarchar,varchar有什么区别?2,text和ntext有什么区别以及和上面各种字符类有什么区别?3,关于带big和带small的类型,比如:smallint,int和bigint;以及smalldatetime,datetime...
  • VBA通用ADO数据访问模型

    千次阅读 2019-04-16 16:11:36
    ADO是基于OLE DB的数据访问技术。它直接与数据交互,而是把这个任务交给了...由于ADO是基于COM实现的,所以基本上任何语言都可以使用这种数据访问技术,VBA例外。 一、ADO对象模型 ADO对象库中主要有9个对象...
  • 大家好,今日推出常用“积木”过程案例分享第305期,今日内容是利用字典,对多列指定类型单元格数据排重。提供给大家的这些内容是我多年经验的记录,来源于我多年的实践。大家在学习VBA的时候,可以把这些代码块作为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,350
精华内容 1,740
关键字:

vba的数据类型不包括