精华内容
下载资源
问答
  • VBA学习(2) Createobject使用

    千次阅读 2020-11-07 20:50:39
    VBACreateobject函数可以创建并返回一个对ActiveX对象的引用 要创建 ActiveX 对象,只需将 CreateObject 返回的对象赋给一个变量 '声明一个对象变量来存放该对象的引用。Dim 变量 as Object采用后期绑定方式 ...

    在VBA中 Createobject函数可以创建并返回一个对ActiveX对象的引用
    要创建 ActiveX 对象,只需将 CreateObject 返回的对象赋给一个变量
    '声明一个对象变量来存放该对象的引用。Dim 变量 as Object采用后期绑定方式
    例如:

    Dim ExcelSheet As ObjectSet 
    ExcelSheet = CreateObject("Excel.Sheet")

    还可以创建如下对象:
    creatobject("adodb.recordset") 数据库记录操作 

    creatobject("scripting.filesystemobject") 文件操作 

    creatobject("wscript.shell") SHELL creatobject("wscript.network") 网络操作 

    createobject("microsoft.xmlhttp") XMLHTTP ,远程获取文件用的 

    createobject ("msxml2.xmlhttp.4.0") 同上 

    createobject("adodb.stream") 数据流传输 

    createobject("adodb.connection") 数据库连接 

    createobject ("word. application ") WORD 

    createobject ("excel. application ") EXCEL 

    createobject ("mswc.adrotator") 广告 

    createobject("scripting.dictionary") HASH表操作 

    createobject("powerpoint.application") 

    createobject("Microsoft.XMLDOM") XML操作 

    createobject("WScript.Shell") 

    createobject("wscript.network") 

    createobject("MSWC.adRotator") 

    createobject("excel.sheet") 

    createobject("frontpage.application") 

    createobject("access.application") 

    createobject("msgraph.application") 

    createobject("photoshop.application") 

    //关于SQL Server的 

    CreateObject("SQLDMO.SQLServer") 

    CreateObject("SQLDMO.Login") 

    CreateObject("SQLDMO.Backup") 

    CreateObject("SQLDMO.User") 

    CreateObject("SQLDMO.BackupDevice") 

    CreateObject("SQLDMO.Database") 

    CreateObject("SQLDMO.Restore")

    展开全文
  • VBA CreateObject 各种类型文件(transfer)

    千次阅读 2019-02-27 21:15:10
    正则表达式处理 ...Set regex = CreateObject("VBScript.RegExp") endrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row 'Change pattern for different requirement Application.Enable...
    1. 正则表达式处理
    2. 文件处理

    1.正则表达式处理

    Set regex = CreateObject("VBScript.RegExp")
    endrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row 'Change pattern for different requirement
    Application.EnableEvents = False
    
    
    With regex
      .Pattern = "(SC2)-[A-Z0-9]{5}-[A-Z]{4}-\d{6}$" 'Change pattern for different requirement
      .Global = True
    End With
    
    
    For i = 2 To endrow
    
    Set matches = regex.Execute(ActiveSheet.Range("A" & i).Value)
    Set Target = Range("A1", Range("A" & Rows.Count).End(xlUp))
    Dup = WorksheetFunction.CountIf(Target, ActiveSheet.Range("A" & i).Value)
    Dept = Mid(ActiveSheet.Range("A" & i).Value, 11, 4)
    BusApp = Mid(ActiveSheet.Range("A" & i).Value, 5, 5)
    BusAppChk = Mid(ActiveSheet.Range("P" & i).Value, 1, 5)
    BRSChk = Mid(ActiveSheet.Range("A" & i).Value, 5, 3)
    
        If matches.Count = 0 Then
                ActiveSheet.Range("A" & i).Interior.ColorIndex = 3

    2.文件处理

    VBA FileSystemObject (FSO) in Excel – Methods and Properties

    https://analystcave.com/vba-filesystemobject-fso-in-excel/

    VBS基础篇 - 对象(3) - FileSystemObject对象

    https://www.cnblogs.com/sirrah/articles/2349034.html

    VBA中的FileSystemObject对象(FSO)和文本流

    https://www.cnblogs.com/zzstone/p/5530707.html

    FileSystemObject对象

    Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set xFolder = xFileSystemObject.GetFolder(xFolderName)
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Checklist")
    
    If Len(xFolder.Path) > 0 Then
        Filename = Dir(xFolder.Path & "\" & Filename, 0)
        Debug.Print xFolder.Name
        
        'Get Most Recent File
            Do While Filename <> ""
                Debug.Print "Read:" & Filename
                    If FileDateTime(xFolder.Path & "\" & Filename) > MostRecentDate Then
                        MostRecentFile = Filename
                        MostRecentDate = FileDateTime(xFolder.Path & "\" & Filename)
                    End If
                        Filename = Dir
            Loop
      
        Debug.Print "Selected:" & MostRecentFile
        
        SelectedFile = MostRecentFile
        On Error GoTo ErrHandler

     

    展开全文
  • VBA函数定义及说明

    千次阅读 2020-06-24 11:18:28
    函数定义,函数返回对象,默认参数,不定长参数

    函数定义

    VBA定义的函数可以在工作表使用,如果是在加载插件中定义函数,本机所有打开工作簿都可以使用该函数,当然可以在过程sub中调用函数;

    VBA函数与sub过程不同的是,函数有返回内容;过程和函数都可以传入参数。
    函数使用Function关键字定义,定义规则如下:
    Function 函数名称(形参及类型)
    函数主体
    函数名称= 函数返回
    End Function
    示例:

    '定义一个数值平方的函数,形参:a,形参a类型:long,函数返回:a ^ 2;函数名称:test
    Function test(a as long)
    test = a ^ 2
    End Function
    
    '定义全局函数,使用public关键字,这个关键字跟变量定义是一致的。后面跟的as long是返回类型
    Public Function test(a as long) as long 
    test = a ^ 2
    End Function
    

    传值和传引用

    函数或方法传值使用关键字ByVal,传引用使用关键字ByRef

    Sub num_print()
    Dim i, num As Long  ' 定义一个变量
    num = 0
    For i = 1 To 10
        s = add(num)     ' 调用add函数s
        Debug.Print num     ' 函数参数是传引用,会依次打印1,2,3,,,,10
    Next
    End Sub
    
    Function add(ByRef a As Variant)
    a = a + 1
    End Function
    

    如果上述函数参数为传值ByVal,则函数不影响方法num_print中变量num的改变,全打印0;

    函数返回对象

    函数也可以返回对象,返回对象要使用set关键字;
    示例:返回字典

    Function aa()
    Dim d As Object
    
    Set d = CreateObject("scripting.dictionary")
    today = Date
    the_month_date = CDate(Year(Date) & "-" & Month(Date) & "-" & 20)   '这个月的20号
    last_month_date = Application.WorksheetFunction.EDate(the_month_date, -1)  '上个月的20号
    d("today") = today
    d("the_month_date") = the_month_date
    d("last_month_date") = last_month_date
    d("the_month") = Month(last_month_date)      '这个月
    d("last_month") =Month(Date)  '上个月
    
    Set aa = d    	'返回对象使用set关键字
    End Function
    
    '函数调用
    sub test1()
    dim d1 as object
    
    set d1 = aa()
    debug.print d1("today")    '打印字典键today对应的值
    end sub
    

    使用默认参数

    函数传入参数格式:形参 as 参数类型 = 参数默认值
    示例:正则提取函数

    Function regexp(rg As Variant, str As String, Optional mat As Byte = 0, Optional group As Variant = Empty)
    'Optional表示参数不是必需的关键字。如果使用了该选项,则参数表中该参数后的参数都必须是可选的,而且必须都使用 Optional 关键字声明。
    Dim re As Object
    Set re = CreateObject("vbscript.regexp")
        With re
            .Global = True
            .Pattern = str
            If re.test(rg) Then
                If group = Empty Then
                    regexp = re.Execute(rg)(mat)
                Else
                    regexp = re.Execute(rg)(mat).submatches(group)
                End If
            End If
        End With
    Set re = Nothing
    End Function
    

    使用不定长参数

    形参及类型固定写法:ParamArray 参数名称() As Variant(必须放在参数最后面)
    示例:只要有一个单元格为空,返回空字符串

    Function if_blank(goal_rg As Variant, ParamArray rngs() As Variant)
    Dim rg
    For Each rg In rngs
        If rg.Value = "" Then
            if_blank = ""
            Exit Function
        End If
    Next
    if_blank = goal_rg
    End Function
    

    示例:单元格求和sum

    Function rng_sum(ParamArray values() As Variant)
    Dim result As Variant      
    Dim val0 As Variant    ' for循环里的变量必须是变体型变量,否则会报错
    result = 0
    For Each val0 In values
        For Each val1 In val0
            result = result + val1
        Next
    Next
    rng_sum = result
    End Function
    
    '然后我们在工作表里写了这么一个函数
    =rng_sum(K21:L21,M22:N22,L23:N23)
    

    一些函数示例

    text_split:字符串分割

    EXCEL里面没有split函数,可以使用vba定义该函数,在工作表内使用

    Function text_split(str As String, sep As String, index As Long)
    ' 参数:str:被分割的字符串,sep:分隔符,index:分割后返回数组该索引的值,如果小于0返回数组
    ' 样例:text_split("abc,de,fg",",")(1)  返回:de
    
    If index >= 0 Then
        text_split = Split(str, sep)(index)
    Else
        text_split = Split(str, sep)
    End If
    End Function
    

    file_exists:判断文件是否存在

    判断文件是否存在,dir函数可以使用通配符:*

    Function file_exists(full_name As String) As Boolean
    file_exists = (Dir(full_name) <> "")
    End Function
    

    basename:路径提取文件名

    传入一个带路径完整的文件名,返回文件名,比如:test.xlsx

    Function basename(full_name)
    ' Application.PathSeparator:反斜杠
    ' basename("d:/filedir/text.xlsx"),返回:text.xlsx
    Dim arr As Variant
    arr = Split(full_name, Application.PathSeparator)
    basename = arr(UBound(arr))
    End Function
    

    sheet_exists:工作表是否存在

    Function sheet_exists(sheet_name As Variant) As Boolean
    ' 传入工作表名称,返回是否存在:boolean
    ' sheet_exists("工作表2")
    Dim st As Object
    On Error Resume Next
    Set st = ActiveWorkbook.Sheets(sheet_name)
    If Err.Number = 0 Then   ' 如果没有报错,返回true
        sheet_exists = True
    Else
        sheet_exists = False
    End If
    

    workbook_is_open:工作表是否存在

    Function workbook_is_open(wb_name As Variant) As Boolean
    ' 传入工作簿名称,返回是否打开:boolean
    ' sheet_exists("工作表2")
    Dim st As Object
    On Error Resume Next
    Set st = Workbooks(wb_name)
    If Err.Number = 0 Then   ' 如果没有报错,返回true
        workbook_is_open = True
    Else
        workbook_is_open = False
    End If
    

    text_join:split的反函数

    该函数在Excel2019版已经引入,早期的版本可以通过自定义函数实现

    Function text_join(sep As String, is_skip_blank As Boolean, ParamArray ranges() As Variant)
    ' sep:分隔符,is_skip_blank:是否跳过空值,ranges:数组
    Dim rngs, sub_rng As Variant
    Dim s As String
    s = ""
    For Each rngs In ranges
        For Each sub_rng In rngs
            If is_skip_blank = True Then   ' 是否跳过空格
                If Len(sub_rng) > 0 Then
                    s = s & sep & Rng
                End If
            Else
                s = s & sep & Rng
            End If
        Next
    Next
    text_join = Replace(s, sep, "", 1, 1)     ' 把开头的分隔符去掉
    End Function
    

    ifs:多判断

    该函数在excel2019版本后才有,早期的版本可以在vba中定制;无须重复if嵌套

    Function udf_ifs(ParamArray args() As Variant)
    Dim i As Byte
    Dim args_len As Byte
    
    args_len = UBound(args)   ' 参数索引下标从0开始
    If args_len < 1 Then Exit Function
    
    For i = 0 To UBound(args) Step 2
        If args(i) = True Then
            udf_ifs = args(i + 1)   ' 如果参数是true,返回后面一个参数值
            Exit Function
        End If
    Next
    
    ' 如果都没有是,参数个数是基数,返回最后一个参数
    If args_len Mod 2 = 0 Then udf_ifs = args(args_len): Exit Function
    
    udf_ifs = "#N/A"      ' 参数是偶数,且没有true对象,返回错误值
    End Function
    

    range_workbook_name:返回单元格所在的工作簿名称

    返回单元格所在工作簿的名称,parent表示父对象,比如单元格的父对象是工作表,工作表的父对象是工作簿,这里调用了两次

    Function range_workbook_name(rng As Variant) As String
    range_workbook_name = rng.Parent.Parent.Name
    End Function
    

    text_speak:说出文本

    使用的是Excel的文本转化成语音的转化生成器,讲述传入的字符串

    Function text_speak(text)
    ' Application.Speech.Speak ("hello alice")
    Application.Speech.Speak (text)
    text_speak = text
    End Function
    

    is_like:模式匹配

    使用vba的like函数,类似于sql中的like,like中pattern参数的字符

    pattern字符解释
    任意单个字符
    *0个或多个字符
    #任意单个数字(0-9)
    [charlist]字符列表中的任意单个字符
    [!charlist]不在字符列表中的任意单个字符
    Function is_like(str As String, pattern As String) As Boolean
    is_like = str Like pat
    End Function
    
    展开全文
  • Private Sub CommandButton3_Click() Dim myarr, mybrr() ReDim mybrr(0) myarr = Range("H3:L5") Set myadic = CreatObject("scripting.dictionary") Set mybdic = CreatObject("scripting.dictionary") Set mycdic...
  • access vbaCREATEOBJECT 和getobject的区别

    千次阅读 2017-11-27 10:16:16
    我前几天不是搞了个按钮要将报表输出到excel中么, 其中有行代码是需要打开excel这个程序的, ...后来我将代码改成------Set xlApp = CreateObject("Excel.Application")------居然就运行成功了, 这让

    我前几天不是搞了个按钮要将报表输出到excel中么,

    其中有行代码是需要打开excel这个程序的,

    但是总是遇到问题,

    运行到这里(Set xlApp = GetObject(, "Excel.Application") )就不行了,

    后来我将代码改成------Set xlApp = CreateObject("Excel.Application")------居然就运行成功了,

    这让我很奇怪,到底这个GetObject和这个CreateObject到底有什么区别,

    于是我在百度上查------CREATEOBJECT 和getobject的区别

    查到如下代码:

    分别打开和关闭Word后运行下面代码你就知道它们的区别是什么了:
    Sub Macro1()
        Dim MyWord As Object
        On Error Resume Next
        Set MyWord = GetObject(, "word.application")
        If Not MyWord Is Nothing Then
    '        MyWord.Visible = True
            MsgBox "word已经打开"
        Else
            If MsgBox("word没有打开,是否开启?", vbYesNo) = vbYes Then
                Set MyWord = CreateObject("Word.Application")
                MyWord.Visible = True
            End If
        End If
    End Sub

    我的理解是,如果程序打开了,那么直接可以引用程序GetObject,

    如果excel程序没有打开的话,就直接打开,这个时候需要用CreateObject函数.

    展开全文
  • I'm trying to get my VBA routine to interact with a page that uses JavaScript, and have been successful in the past. After a recent update, it no longer works. At this point I need to either A) prog.....
  • VBA基础知识整理(字典,自定义函数

    千次阅读 多人点赞 2019-05-13 16:40:59
    '1 什么是VBA字典? '字典(dictionary)是一个储存数据的小仓库。共有两列。 '第一列叫key , 不允许有重复的元素。 '第二列是item,每一个key对应一个item,本列允许为重复 'Key item 'A 10 'B 20 ...
  • CreateObject ( " Excel.Application " ) ' 创建EXCEL对象 xlApp.Visible = False ' 设置EXCEL对象可见 End If Err.Clear Set wk1 = xlApp.Workbooks.Open(FileDir) ' 打开工件簿文件 wk1.Visible = ...
  • VBA-自定义实用函数

    2017-07-02 22:14:00
      总结自定义VBA函数,补充《基于Office_VBA的数据处理、挖掘、建模及可视化的自动化框架设计》方案中相关函数,方便查找和应用。 目录概览  1)数组写入其他工作簿中(注:说明文档中未修改)  2)自动当前工作...
  • 他山之石——VBA自定义函数

    千次阅读 2018-06-24 23:24:50
    VBA自定义函数自己是最近才开始使用的。其好处是可在工作表中直接调用,很方便。这里,这位老师总结的很好,学习了!'1 什么是自定义函数? '在VBA中有VBA函数,我们还可以调用工作表函数,我们能不能自已编写函数...
  • 如何使用VBS调用VBA函数

    千次阅读 2020-05-05 22:42:58
    ・截取图片后,截图的图片置于最底层 :调用VBA函数pictureToBack ・Case中的的一些内容,自动截图,并保存到Evidence中 :调用VBA函数 getCaseInfoAsPicture ■VBA的代码 '把图片置于底层 Sub ...
  • Excel自带的NETWORKDAYS函数不支持指定为工作日,故自己写个自定义函数 Function WorkdayCount(ByVal startDate As Date, ByVal endDate As Date, Optional holidays As Range = Nothing, Optional workDays As Range...
  • VBA基础语法:GetObject函数

    万次阅读 2020-01-10 16:58:56
    GetObject 函数 返回文件中的 ActiveX 对象的引用。 语法 GetObject([pathname] [, class]) GetObject 函数的语法包含下面几个命名参数: 部分 描述 pathname 可选的;Variant (String)。包含待检索...
  • 表格内容: A列 B列 C列 D列 E列 F列 姓名 出生日期 年龄 姓名 年龄 杨春海 1987-6-22 33 许文武 赵春雨 1980-9-17 39 刘永江 ...如果用VLOOKUP函数解决: ...如果使用VBA代码解决:
  • VBA常用功能函数

    千次阅读 2014-12-22 10:46:55
    (2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 '恢复正常的错误提示 (5) Application....
  • Excel VBA 函数

    2021-04-18 17:07:24
    函数 动作 Abs 返回一个数的绝对值 Array 返回包含一个数组的变量 Asc 将字符串的第一个字符转换成它的ASCII值 Atn ...
  • 由于JavaScript中刚好具有以上三种移位运算符,所以可以在vba中调用JavaScript来编写移位运算函数。 代码如下: Visual Basic '左移函数 Function BitShiftLeft(ByVal i As Variant) Dim sJS As String sJS = " var...
  • Private Declare Function Beep Lib ... (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long '响铃API函数声明 Private Const K = 0 '空拍 Private Const C4 = 523 Private Const C_4 = 554 Private Const ...
  • 经常看见vba的IsFileExists显示出函数或子过程未定义,我的问题就是IsFileExists函数没写所以出问题,在相应的模块下加如下代码即可: Function IsFileExists(ByVal strFileName As String) As Boolean Dim ...
  • Sub 日期别()On Error Resume Nextlastrow = Sheets("运营日报").Range("a1048576").End(xlUp).Rowlastday = VBA.Day(Sheets("运营日报").Range("a" & lastrow)) + 1lastcolumn = Sheets("运营统计表").Range(...
  • VBA可以使用Split函数,PowerQuery可以使用Text.BetweenDelimiters函数,工作表函数没有Split性质的函数,就比较苦笔,使用了TRIM+SUBSTITUTE+REPT的套路(详情可以参考函数系列教程字符串拆分章节)。 1,函数 问题1...
  • 1 VBA里可以使用的3类函数,都是独立的 VBA函数 application函数 application.worksheetfunction函数 VBA函数,appliacation函数,工作表函数,三种同名函数完全独立 EXCEL工作表函数(默认都是只能针对一个...
  • 一、VBA中transform函数基本语法:Creates a crosstab query. Syntax TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN (value1[, value2[, ...]])] The TRANSFORM statement has these parts:二、我们...
  • '自定义函数 NTDX 将数字金额转换为财务要求的大写... Set Excel = CreateObject("excel.Application") '在 Word 中引用 Excel 程序, 然后可使用 Excel 程序中的工作表函数 If A = "" Or No...
  • VBA调用Shell

    千次阅读 2021-08-28 15:32:59
    VBA中执行Shell介绍,打开应用,执行python、bat、mysql;
  • VBA调用javascript(一)

    2021-01-17 03:20:18
    函数接口Function execJSFunc(filePath, funcName)Dim codeOpen filePath For Input As #1Do While Not EOF(1)Line Input #1, tmpCodecode = code & tmpCode & Chr(13)LoopClose #1Set JS = CreateObject(...
  • VBA中位数函数

    千次阅读 2019-08-29 21:16:52
    最近在做财务分析方面的开发,遇到了中位数据的问题,中位数在Excel中使用非常的方便,有现成的函数【Median】,直接拿来用就可以了,但在Access中该怎么操作呢? 首先,我们先要了解一下什么是中位数,百度词条中是...
  • VBA调用浏览器打开指定网页的几种方法下面的几段VBA代码都可以打开浏览器并打开指定的网页:方法一:用API打开默认的浏览器Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal ...
  • Set cn = CreateObject("Adodb.Connection") With cn .Provider = AccessJoinString .Open AccessPath End With Set rs = cn.Execute(sql) Set AccessExecuteRecordset = rs End Function Function ...
  • 问题详情VBA的split函数能不能分隔被多个空格间隔的数据啊?比方说string = "1 23 4"我用split(string," ")得到的并不是我想要的1,2,3,4,而是1,2,空格,3,空格,空格,4怎么VBA的split这么弱,能不能象perl....

空空如也

空空如也

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

createobject函数vba

友情链接: EhLib.v3.6c.rar