精华内容
下载资源
问答
  • vba 调用oracle 存储过程vba 调用oracle 存储过程vba 调用oracle 存储过程vba 调用oracle 存储过程vba 调用oracle 存储过程
  • 调用sub或者function的call可以省略 Sub main() Call outputData(inputData) End Sub Public Function inputData() As String inputData = CStr(InputBox("Please enter the input data")) End Function Public ...

    调用sub或者function的call可以省略

    Sub main()
        Call outputData(inputData)
    End Sub
    
    Public Function inputData() As String
        inputData = CStr(InputBox("Please enter the input data"))
    End Function
    
    Public Sub outputData(a As String)
        MsgBox a & vbLf, vbOKOnly, "OutPutData"
    End Sub
    

    这里的main实际上可以写成下面这个样子

    Sub main()
        Dim info As String
        info = inputData
        Call outputData (info)
    End Sub
    
    展开全文
  • 2 sub /function 调用时需要注意 不能让sub名赋值,但是 functionname可以的 没有赋值的变量可以直接表达式运算,但默认为0值 Public a, b这种语句不能写在sub内,只能放在模块脚本最前面,只能定义,赋值只能在...

     

    1 sub的三种调用方式

    • 直接调用  sub名
    • call    sub名
    • Application.Run   sub名

       

    2 sub /function 调用时需要注意

    • 不能让sub名赋值,但是 functionname可以的
    • 没有赋值的变量可以直接表达式运算,但默认为0值
    • Public a, b这种语句不能写在sub内,只能放在模块脚本最前面,只能定义,赋值只能在内部
    • 封装意义,只能调用 过程和函数,不能调用其内部的变量
    
    Public a, b, c, d
    
    
    Sub sub1(ByRef a, ByRef b)
    c = 1
    d = 2
    sum1 = a + b + 10
    Debug.Print "sum1=" & sum1
    End Sub
    
    
    
    Sub sub2()
    Call sub1(4, 5)
    sum2 = c * d * 10
    sum3 = a * b * 10
    Debug.Print "sum2=" & sum2
    Debug.Print "sum3=" & sum3
    End Sub
    
     Rem 不能让sub名赋值 functionname可以的
     Rem 没有赋值的变量可以直接表达式运算,但默认为0值
     Rem Public a, b这种语句不能写在sub内,只能放在模块脚本最前面,只能定义,赋值只能在内部
     Rem 封装意义,只能调用 过程和函数,不能调用其内部
     

     

    3 调用 sub / function 原则总结

    • 如果调用sub 
    1. 如果0个或1个参数,可以直接调用不用call, 也不需要()
    2. 如果参数>=2, 则必须用call调用,必须带()

     

    • 如果调用 function 时
    1. 如果是直接调用函数名,带结果参数,都可以不需要加()
    2. 如果是用call调用函数,必须加()

    debug.print 函数名

    1. call 或 函数名调用,都只运行代码,但不会得到函数本身的返回值
    2. 只用调用函数名,才会有函数本身的返回值

     

    Sub test100()
    test11
    test12 2
    Call test12(2)
    Call test13(1, 2, 3)
    Debug.Print
    
    Debug.Print func11
    Debug.Print func12(2)
    Debug.Print func13(1, 2, 3)
    Debug.Print
    
    Call func11
    Call func12(2)
    Call func13(1, 2, 3)
    Debug.Print
    
    func11
    func12 2
    func13 1, 2, 3
    Debug.Print
    End Sub
    
    
    
    Sub test11()
    Debug.Print "test11"
    End Sub
    
    
    Sub test12(x)
    Debug.Print x * x
    End Sub
    
    
    Sub test13(x, y, z)
    Debug.Print x + y + z
    End Sub
    
    
    Function func11()
    func11 = "func11"
    Debug.Print "func11测试"
    End Function
    
    Function func12(x)
    func12 = x * x
    Debug.Print "func12测试"
    End Function
    
    Function func13(x, y, z)
    func13 = 2 * (x + y + z)
    Debug.Print "func13测试"
    End Function
    
    

     

     

     

    3.1 当调用的sub 或function 不带参数时

    • 调用时,可以带call 或不call 开头
    • 用call调用,因为没参数 call func1()   会被编辑器自动变成 call func1
    • 直接调用, 正确写法写func1,     如果func1()----会错误  不能带括号
    
    Public a, b, c, d
    
    Sub sub1()
    Call func1   '或 func1 但不能func1()  或 call func1()被自动变为 call func1
    End Sub
    
    Function func1()
    a = 1
    b = 2
    func1 = 1 + 2
    Debug.Print "func1=" & func1
    End Function
    

     

    3.2 当调用sub 或 function带1个参数

    • 调用时,可以带call 或不call 开头
    • 如果是用call  function_name, 参数必须带括号
    • 如果是用 function_name,参数可以不带括号
    
    Public a, b, c, d
    
    Sub sub1()
    func1 (3)   '或 func1 3
        
    End Sub
    
    Function func1(c)
    a = 1
    b = 2
    func1 = 1 + 2 + c
    Debug.Print "func1=" & func1
    End Function
    
    
    Public a, b, c, d
    
    Sub sub1()
    Call func1(3)
        
    End Sub
    
    Function func1(c)
    a = 1
    b = 2
    func1 = 1 + 2 + c
    Debug.Print "func1=" & func1
    End Function

     

    3.3 当调用sub 或 function带2个或以上参数

    • 调用时,可以带call 或不call 开头
    • 如果调用时使用call  参数必须带括号
    • 如果调用时,直接调用,参数可不带括号
    
    Public a, b, c, d
    
    Sub sub1()
    Call func1(3, 4, 5)   或 func1 3,4,5
        
    End Sub
    
    Function func1(c, d, e)
    a = 1
    b = 2
    func1 = 1 + 2 + c + d + e
    Debug.Print "func1=" & func1
    End Function
    


     

     

     

     

    展开全文
  • VBA调用C++DLL

    2020-04-21 11:30:41
    VBA调用C++DLL EXCEL VBA调用C++DLL C++ DLL编写; VBA的调用。 C++DLL示例 VBA调用说明 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/...

    VBA调用C++DLL

    C++DLL示例

    以下建立了一个比较简单的C++的DLL,它的输入是一个字符串,两个double类型的变量,输出double类型的计算结果。
    CPP代码:

    #include "stdafx.h"
    #include "test_excel.h"
    
    double fun_property(const char *outProp, double inProp1Value, double inProp2Value)
    {
        double val = inProp1Value + inProp2Value;
        return val;
    }
    

    头文件的设置如下,需要注意的是extern "C"是必须要加入的。

    #pragma once
    
    #ifdef DLLEXPORTS
    #define DLLAPI extern "C" __declspec(dllexport)
    #else
    #define DLLAPI extern "C" __declspec(dllimport) 
    #endif
    
    DLLAPI double fun_property(const char *outProp, double inProp1Value, double inProp2Value);
    

    编译DLL的时候,调用约定选择默认的__cdecl (/Gd)即可。

    VBA调用说明

    DLL的地址根据实际情况填写。
    如果是64位的office,在声明DLL里的函数时,需要加上PtrSafe,且调用的是64位的DLL;如果是32位的office,在声明DLL里的函数时,不需要加上PtrSafe,且需要调用的是32位的DLL。
    在声明DLL里的函数参数时,由于DLL里接受的是参数的值,所以需要在参数前加上ByVal,但如果DLL里接受的是参数的地址,则需要在参数前加ByRef。

    Option Explicit
    
    Private Declare PtrSafe Function fun_property Lib "E:\Tao\testExcel\testExcel\x64\Release\testExcel.dll" _
    (ByVal outProp As String, ByVal inProp1Val As Double, ByVal inProp2Val As Double) As Double
    
    Sub Funtiontest()
        Dim outPara As String
        Dim a As Double, b As Double, c As Double
        
        outPara = "test"
        a = 500000
        b = 1
        
        c = fun_property(outPara, a, b)
    
    End Sub
    
    展开全文
  • VBA调用Shell

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

    VBA的Shell函数

    函数参数介绍

    Shell(PathName[,WindowStyle])

    • PathName :要执行的程序名,包括目录或文件夹
    • WindowStyle :程序运行时窗口的样式

    Shell函数返回在第一个参数中指定的应用程序的任务标识。可以使用这个数字在稍后激活该任务;
    Shell函数启动的应用正在运行时,VBA进程不会终止(类似于加入了进程等待)。
    Shell函数异步运行应用程序,执行Shell函数后,还有其他过程,会与Shell函数内容同时执行;
    Shell函数第二个参数WindowStyle的值:

    常量说明
    vbHide0窗口将隐藏,并且焦点将传递给隐藏窗口。
    vbNormalFocus1窗口具有焦点且还原为其原始大小和位置。
    vbMinimizedFocus2窗口将显示为具有焦点的图标。
    vbMaximizedFocus3使用焦点最大化窗口。
    vbNormalNoFocus4窗口将还原为其最新的大小和位置。 当前活动窗口仍保持活动状态。
    vbMinimizedNoFocus6窗口将显示为图标。 当前活动窗口仍保持活动状态。

    示例:

    Function shell_func(Program As String)
    ' Program:应用名称
    Dim TaskId As Double
    On Error Resume Next
    TaskId = Shell(Program, 1)      ' 任务标识,参数1代表窗口具有焦点且还原为其原始大小和位置
    If Err <> 0 Then     ' 不等于0,表示报错
        MsgBox "无法打开应用:" & Program, vbCritical, "Error"
    End If
    End Function
    

    过程等待

    Shell在运行完之后会关闭小黑窗,处理快点几乎看不见,可以通过在命令行前加入cmd /k,小黑窗不会关闭;
    Shell "cmd /k ipconfig/all"
    VBA等待shell执行完再执行后面进程,可以定义这么一个函数

    Function ShellAndWait(cmd As String) As String 
        Dim oShell As Object, oExec As Object
        Set oShell = CreateObject("WScript.Shell")
        Set oExec = oShell.exec(cmd)        ' 执行cmd命令
        result = oExec.StdOut.ReadAll    ' 读取命令行返回的内容,读完后再进行vba后面的逻辑处理;
        Set oShell = Nothing
        Set oExec = Nothing
    End Function
    

    案例-执行Windows的bat文件

    Shell "c:/bat_file.bat"


    案例-mysql查询

    Sub sql_to_txt()
    Dim this_path,cmd As String
    
    this_path = ThisWorkbook.Path    ' 当前工作簿的路径
    ChDrive "F"   '切换磁盘渠道到F盘
    ChDir this_path     ' 切换路径,这样my_ndim_table文件就写入到工作簿所在目录下了
    '-u账号 -p密码 库名mydb -e执行 "要执行的sql",> 查询结果重定向到txt文件
    cmd = "cmd /k mysql -uroot -p123456 mydb -e ""select * from d_mg_game_ndim limit 20"" > my_ndim_table.txt"
    shell cmd, 1    
    End Sub
    

    案例-执行python脚本

    ' 打开jupyter notebook
    Shell "jupyter notebook"
    
    ' 执行python脚本
    shell "python d:/python.py"
    

    案例-指定应用程序打开文件

    这里使用的是notepad++打开命名为my_ndim_table.txt的文本文件

    ChDrive "c"
    ChDir "C:\Program Files (x86)\Notepad++"
    cmd_str = ".\notepad++.exe F:\桌面\my_ndim_table.txt"
    Debug.Print cmd_str
    
    Shell cmd_str, 1
    

    AppActivate语句

    如果一个程序已经在运行,使用shell函数会启动另一个实例,大多情况下,只需要激活正在运行的实例,而并非启动另一个实例。可以通过AppActivate语句激活实例;

    Sub StartCalculate()
    Dim Program As String
    Dim TaskId As Double
    
    Program = "calc.exe"   ' 计算器
    On Error Resume Next   '遇到错误,继续执行下面语句
    AppActivate "计算器"    ' 这里是应用程序面板的标题titile
    If Err <> 0 Then   ' 如果没有捕捉到‘计算器’程序,则err不等于0
        Err = 0
        TaskId = shell(Program, 1)    ' 打开计算器
        If Err <> 0 Then MsgBox "无法打开计算器"
    End If
    End Sub
    

    激活计算器


    EXCEL表格函数打开应用程序

    如果是在工作表里,我们可以使用该函数:
    =HYPERLINK("C:\Windows\System32\calc.exe","打开计算器")
    工作表超链接打开计算器


    ShellExecute函数

    函数介绍

    使用API函数ShellExecute能打开任何文件(包括桌面和URL快捷方式)。ShellExecute解析系统注册表HKEY_CLASSES_ROOT中所有的内容,判断启动哪一个执行程序,并且启动一个新的实例或使用DDE将文件名连到一打开的实例。然后,ShellExecute返回打开文件的应用的实例句柄。
    ShellExecute函数可以简单地打开磁盘文件和Internet文件。如果将第二个参数“OPEN”改为“PRINT”或者“EXPLORE”,则ShellExecute能打印文件或打开文件夹。

    该函数只能启用已知文件名的应用程序(文件类型在Windows注册)


    函数API声明

    在模块中的声明部分输入如下声明语句
    声明

    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, _
        ByVal ipOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long
    

    声明关键词:

    • Declare关键字:在模块级别中声明对动态链接库(DLL)中外部过程的引用。
    • Function关键字:紧随Function的函数名是从VBA中调用该函数时要使用的名称。该名称可以与API函数本身的名称相同,也可以使用Declare语句中的Alias关键字,表示要在VBA中使用不同的名称(“别名”)调用该函数。
    • Lib关键字:指明包含所声明过程或函数的动态链接库。它说明的是函数或过程从何而来的问题。例如在上例中,SetFocus Lib"user32"说明函数SetFocus来自“user32.dll”文件。
    • Alias关键字:用于指定API函数的别名,如果调用的API函数要使用字符串(参数中包含String类型),则Alias关键字是必需的。这是因为在ANSI和Unicode字符集中同一API函数的名称可能是不一样的。为了保证不出现声明错误的情况,必须使用Alias关键字指出API函数的别名。

    案例:打开网页、图片、文本、EXCEL

    Sub open_url()
    ' 打开百度链接
    res = ShellExecute(0&, vbNullString, "http://www.baidu.com", vbNullString, vbNullString, 1)
    
    ' 打开图片
    res = ShellExecute(0&, vbNullString, "F:\桌面\111.png", vbNullString, vbNullString, 1)
    
    ' 打开txt文件
    res = ShellExecute(0&, vbNullString, "my_ndim_table.txt", vbNullString, vbNullString, 1)
    
    ' 打开excel表格
    res = ShellExecute(0&, vbNullString, "F:\excel_file.xlsx", vbNullString, vbNullString, 1)
    End Sub
    
    展开全文
  • 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(...
  • xlwings利用VBA调用python

    2021-02-11 14:09:01
    安装配置完成后(与自定义函数UDFs的配置是一致的,加入xlwings加载项,alt+F11中引用xlwings等等常规操作后),通过 “RunPython”调用python代码。范例:VBA代码如下:Sub hi()RunPython ("import sayhi; sayhi.sayhi...
  • VBA·Function的基础使用

    2021-08-21 13:13:16
    VBA·Function的基础使用』 编写人 | SCscHero 编写时间 | 2021/8/18 PM12:43 文章类型 | 系列 完成度 | 已完成 座右铭 每一个伟大的事业,都有一个微不足道的开始。 一、引言&背景 ...
  • Public Function callPr_restore(ByVal conn As Connection, pr_restore_name As String)Dim CNN_cmd As ...
  • 网页爬虫实践——VBA调用JS事件

    千次阅读 2018-04-15 15:53:05
    网页爬虫实践——VBA调用JS事件作者:AntoniotheFuture关键词:VBA,网页爬虫,网抓,JavaScript,Access开发平台:Access平台版本上限:2010平台版本下限:尚未出现开发语言:VBA简介:公司要求我们在双12那天之前...
  • VBA调用Windows API的方法

    千次阅读 2019-10-08 17:52:14
    VBA中使用Windows API VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案。通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用...
  • 本附件用excel自带的VBA调用windowsAPI 用 mouse_event 实现了对前台程序发送按键和鼠标动作 用 sendmessege 实现了对后台程序发送鼠标动作 做法是 先人手打开画图程序,切换回excel点击按钮 就可以在画图程序画出...
  • DLL导出函数定义---------------------------------------------------__declspec(dllexport) int __stdcall MyExportFunction(const char * p1, const ...VBA处理(VB.net的处理也类似)要注意的一点是,C语言中的【c...
  • VBA调用系统调色板

    千次阅读 2018-08-26 13:40:39
    VBA代码中如何提供调色板让用户选择颜色呢? 一种方法是调用Excel的系统对话框实现设置颜色,对话框如下图所示。 Application.Dialogs(xlDialogFont).Show 但是,并不是所有的格式设置都有与之对应的系统...
  • VBA调用浏览器打开指定网页的几种方法下面的几段VBA代码都可以打开浏览器并打开指定的网页:方法一:用API打开默认的浏览器Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal ...
  • 调用SHELL之前,必须要通过以下步骤:(以在E:盘根目录下操作为例)1、强制改变当前的驱动器: ChDrive "E"2、强制改变默认的工作目录:chdir "E:/"完成以上动作之后,再来调用E:/的批处理文件:shell "e:/234....
  • '声明 Private Declare Function acedSetColorDialog Lib "acad.exe" _ (Color As Long, ByVal bAllowMetaColor As Boolean, ByVal nCurLayerColor As Long) As Boolean '封装API函数,获得用户...
  • vba 调用 countif 函数问题

    千次阅读 2019-01-07 23:28:00
    源数据是A1:G18,需求是在K列显示A1:A18中各单元格重复出现的次数。在L列中是用countif函数直接计算的, Private Sub test() Dim rng As Range, i As Integer ... For Each rng In Range("A1:A18") ...
  • I need to by pass an IE confirm 'OK'/'Cancel' pop-up ... I have a problem running a JavaScript function in my VBA script. My JavaScript:function ConfirmSave(){var Ok = confirm('Are you sure all D...
  • Private Declare Function WaitForSingleObject Lib "kernel32" ( _ByVal hHandle As Long, _ByVal dwMilliseconds As Long) As LongPrivate Declare Function OpenProcess Lib "kernel32.dll" ( _ByVal dwDesiredAc...
  • 如何使用VBS调用VBA函数

    千次阅读 2020-05-05 22:42:58
    ・截取图片后,截图的图片置于最底层 :调用VBA函数pictureToBack ・Case中的的一些内容,自动截图,并保存到Evidence中 :调用VBA函数 getCaseInfoAsPicture ■VBA的代码 '把图片置于底层 Sub ...
  • 在使用vba的时候,出现使用 sub test() shell "1.exe" end sub 程序界面一闪而过,通过查询,应该是,在调用动态连接的时候,没有调用,导致产品异常报错,使用API也可以解决,但是本人小白,只能复制网络的代码,...
  • VBA调用SHELL脚本并等待程序结束

    千次阅读 2019-09-07 09:42:37
    VBA调用Shell是异步处理,以下为同步处理代码,注释写的还行,就不多说了。可以直接拿到本地DEBUG以下,注意将下面的本地路径替换为你要运行的bat文件。 ' 引入外部函数 PtrSafe用来避免不兼容问题(32位,64位 ...
  • I have a python code that reads 3 arguments (scalars) and a text files and then returns me a vector of ... I want to write a macro in vba to call this python code and write the results in one of t...
  • VBA调用javascript

    万次阅读 2014-07-28 19:50:02
    函数接口 ...Function execJSFunc(filePath, funcName)  Dim code  Open filePath For Input As #1  Do While Not EOF(1)  Line Input #1, tmpCode  code = code & tmpCode & Chr(13)  Lo
  • VBA调用excel的函数

    万次阅读 2016-11-22 22:39:03
    更进一步,在VBA代码之中,也可以直接调用EXCEL的库函数,而且这种调用有时能够简化VBA代码编写过程,比如有些通过循环寻找某个数字的功能直接在VBA中,用VLOOKUP或Hlookup就可以实现。下面简要就VBA中调用库函数的...
  • VBA调用SAP GUI

    千次阅读 2017-10-31 14:04:00
    Function Attach() As Boolean '是否调用SAPGUI On Error Resume Next Set SapGuiAuto = GetObject("SAPGUI") On Error GoTo 0 If SapGuiAuto Is Nothing Then Attach = False Exit Function Else Set ...
  • My Excel workbook contains VBA subs and macros similar to those below; they sit in Module1.How to call them using Python win32com module?Public Sub setA1(ByVal s As String)ThisWorkbook.ActiveSheet.Ran...

空空如也

空空如也

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

functionvba调用