精华内容
下载资源
问答
  • VBA造文件夹的思考一文中介绍了如何用vba代码新建文件夹。在用VBA操作文件和文件夹的过程中,除了新建文件夹,我们还经常需要与文件夹有个人机交互的过程,比如选择文件所在的文件夹,然后再执行一系列VBA动作。这...

    89b89da597e01ee0e042d1696fd6e7d6.png

    在 VBA造文件夹的思考 一文中介绍了如何用vba代码新建文件夹。

    在用VBA操作文件和文件夹的过程中,除了新建文件夹,我们还经常需要与文件夹有个人机交互的过程,比如选择文件所在的文件夹,然后再执行一系列VBA动作。

    这个选择的过程也是打开文件夹的一种,这种在VBA里用内置的对话框对象FileDialog就可以实现。

    今天要讲的打开文件夹不是这种,而是指在完成了一系列VBA动作后,如何直接打开结果文件夹,看下执行的情况。

    以前我们往往都是执行完程序后,再用鼠标去打开结果文件夹看下结果,今天介绍的方法可以直接连这个鼠标步骤都免了。

    1.用Shell函数打开指定的文件夹

    代码如下:

    Sub exceloffice()    '*****************    '上面一连串代码    '最后打开文件夹看下效果    Dim sPath As String    sPath = "c:\test"    Shell "explorer.exe " & sPath, vbMaximizedFocusEnd Sub

    Shell函数是vba内置的函数,使用起来非常方便。它可以直接运行各种exe程序,同时附带参数运行。

    使用Shell函数还可以直接运行Python打包后的exe程序,从而借助Python的强大功能助推VBA

    在本例中,Shell函数通过调用文件资源管理器explorer.exe直接打开指定的文件夹,其中 vbMaximizedFocus表示打开的时候最大化显示。

    2.用Shell对象打开指定的文件夹

    代码如下:

    Sub exceloffice()    '*****************    '上面一连串代码    '最后打开文件夹看下效果    Dim sPath As String    sPath = "c:\test"    Dim oShell As Object    Set oShell = VBA.CreateObject("shell.application")    With oShell        .Open (sPath)    End WithEnd Sub

    其实这个原理和Shell是一样的,但是Shell对象提供了自动化接口,功能更全,不仅可以打开文件夹,还可以做很多操作电脑的事情。

    比如切换到桌面、打开运行对话框、关闭电脑等等,如下所示

    Sub exceloffice()

        Set oShell = CreateObject("shell.application")

        With oShell

            '切换到桌面

            .ToggleDesktop

            '打开运行对话框

            .FileRun

            '关闭电脑,记得保存文件

            .ShutdownWindows

        End With

    End Sub

    最后附上Shell对象的所有方法列表:

    方法说明
    AddToRecent添加一个对象到“最近的文档”的列表。
    BrowseForFolder创建一个对话框让用户选择一个文件夹,然后返回所选文件夹的Folder对象。
    CanStartStopService确定是否当前用户可以启动和停止指定的服务。
    CascadeWindows层叠桌面上所有窗口,相当于右击任务栏选择“层叠窗口”。
    ControlPanelItem运行指定的控制面板(*.cpl)应用程序。如果应用程序已经打开,它就会激活运行的实例。
    EjectPC挂起计算机。如果电脑支持这个命令。
    Explore在Windows资源管理器窗口中打开一个指定的文件夹。
    ExplorerPolicy获取指定的 Internet Explorer 策略的数据值。
    FileRun显示运行对话框。
    FindComputer显示“搜索结果:计算机”对话框。
    FindFiles显示“搜索:所有文件”对话框。
    FindPrinter显示“查找打印机”对话框允许用户找到打印机。
    GetSetting检索Shell全局设置。
    GetSystemInformation检索系统信息。
    Help显示Windows帮助和支持中心。
    IsRestricted从注册表检索一个组的限定设置。
    IsServiceRunning返回一个值,表示指定服务是否正在运行。
    MinimizeAll最小化桌面上所有窗口。
    NameSpace创建和返回指定的文件夹的Folder对象。
    Open打开指定的文件夹。
    RefreshMenu刷新开始菜单中的内容。只用于Windows XP之前的系统。
    ServiceStart启动一个指定的服务。
    ServiceStop停止一个指定的服务。
    SetTime显示“日期和时间属性”对话框。
    ShellExecute对指定文件执行指定的操作。
    ShowBrowserBar显示一个浏览器工具栏。
    ShutdownWindows显示“关闭计算机”对话框。
    Suspend不执行。
    TileHorizontally横向平铺桌面上所有窗口。
    TileVertically纵向平铺桌面上所有窗口。
    ToggleDesktop显示或隐藏桌面。
    TrayProperties显示“任务栏和「开始」菜单属性”对话框。
    UndoMinimizeALL撤消最小化所有窗口,恢复所有桌面窗口到它们在上次MinimizeAll命令之前相同的状态。
    Windows创建和返回一个ShellWindows对象。这个对象表示属于壳的所有打开的窗口的集合。
    WindowsSecurity显示“Windows安全”对话框。
    WindowSwitcherWindows Vista及以后系统的新增方法,在可以预览的3D堆栈中显示打开的窗口。

    f8d2edf2b967aee1f901e690df54e13e.png

    展开全文
  • 哈罗,大家好,我是星光,今天和大家分享的主题是使用VBA处理数据查询的问题……数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章...

    哈罗,大家好,我是星光,今天和大家分享的主题是使用VBA处理数据查询的问题……

    数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章一股脑的全部说完,所以先从最简单的分享起……

    我举个简单的小栗子。

    如下图所示,需要根据A1:C7的数据明细,计算出A10:C11相关考号的人员姓名。

    这就是所谓的单条件单结果数据查询了。

    33a22c12c050b893389f84fb11649057.png

    这事儿如果用函数解决,那自然是VLOOKUP的菜呗:

    =IFERROR(VLOOKUP(A11,A$1:C$7,3,0),"")

    如果用VBA代码实现VLOOKUP函数的效果,代码如下:

    Sub DctFind() 'Excelhome vba编程学习与实践~看见星光    Dim d As Object, arr, brr, i&    Set d = CreateObject("scripting.dictionary")    'd.CompareMode = vbTextCompare '不区分字母大小写    arr = [a1:c7]    '数据源装入数组arr    brr = [a10:c13]    '查询区域数据装入数组brr    For i = 1 To UBound(arr)    '遍历数组arr        d(arr(i, 1)) = arr(i, 3)        '将考号作为key,姓名作为item装入字典    Next    For i = 2 To UBound(brr)    '标题行不用查询,所以从第二行开始遍历查询数值brr        If d.exists(brr(i, 1)) Then        '如果字典中存在考号            brr(i, 2) = d(brr(i, 1))            '根据考号从字典中取值        Else            brr(i, 2) = ""            '如果字典中不存在相关考号,则值返回为假空        End If    Next    With [a10:c13]        .NumberFormat = "@"        '设置文本格式,避免某些文本数值变形        .Value = brr        '结果数组写入单元格区域    End With    MsgBox "查询完成。"    Set d = Nothing    '释放字典End Sub

    小贴士

    1>该段代码区分字母大小写,即A和a作为查询值时,并不相等。如果需要不区分字母大小写,解除代码中下面语句的注释块。

    d.CompareMode vbTextCompare

    2>留个练手题吧,如下图所示,需要根据A1:C13数据明细,计算A15:C18相关人员指定课目的成绩。

    cbe31d00f57a0bca0d780469b3e2f2ff.png

    更多资源和教程

    • 零基础学SQL in Excel 25篇合集

    • VBA爱好者请进,VBA代码宝概述


    ©EH看见星光

    f02af3762799dcf17bf9586f54c5d1a7.png

    《VBA经典代码应用大全》当当、天猫、京东均有销售~
    展开全文
  • 今天要讲的例子就是用VBA取代Vlookup函数。报价单往往都有很多行。快速的数据处理,用VBA明显会比VlookUP要快的多。问题如下:问题描述:1:根据定额工作表里面的定额编号,获取黄色单元格区域的内容;2:在报价单的...

    作工程报价,经常需要结合国家的定额来做报价单。根据定额的编号,很容易获得定额的价格,方便报价。以前做报价单的时候,都是用VlookUP函数来查找定额编号在反馈相应的价格。今天要讲的例子就是用VBA取代Vlookup函数。

    报价单往往都有很多行。快速的数据处理,用VBA明显会比VlookUP要快的多。

    问题如下:

    39b76408477d4ac76805479be6c6bd04.png
    cccefdfc550daf0e7568a1a7e7ea2307.png

    问题描述:

    1:根据定额工作表里面的定额编号,获取黄色单元格区域的内容;

    2:在报价单的工作里面,查找与定额编号匹配的数据填入。

    解决的思路详解:

    1:为了运行的速度,把定额工作表里面的数据,全部放入arr数组;

    2:把定额编号作为字典的key,定额工作表里面的 项目名称+单位+数量作为字典的item。本例会把这三项数据,放入数组装入字典。 及字典套数组

    3:查找字典的key,并输出数组。

    代码运行的结果如下:

    3a6c4e07fbb0fd4e442073d50aba786a.gif

    代码如下:

    ee68d412ca1b4301c16d85a0a28bad56.png
    Sub test() Dim arr, d, Rng As Range Application.ScreenUpdating = False Set d = CreateObject("scripting.dictionary") With Sheets("定额") arr = .Range("c6:f" & .Cells(.Rows.Count, 3).End(xlUp).Row) End With  For i = 1 To UBound(arr) d(arr(i, 1)) = Array(arr(i, 2), arr(i, 3), arr(i, 4)) Next  With Sheets("报价单") For Each Rng In .Range("c6:c" & Cells(.Rows.Count, 3).End(xlUp).Row) Rng.Offset(0, 1).Resize(1, 3) = d(Rng.Value) Next End With  Application.ScreenUpdating = TrueEnd Sub

    代码解析

    1:2行 Dim定义变量;

    2:4行 后期绑定字典;

    3:5~7行 把定额工作表里面的数据放入arr数组(本句代码是常用代码);

    4:9~11行 遍历arr数组,把定额编号作为字典的key,把项目名称+单位+数量作为字典的item;

    5:14行 遍历报价单工作表里的数据区域;

    6:15行 把查询到的字典对应的item放入指定的单元格区域;

    本例思考:

    1:本例并没有事实更新的功能。请结合VBA的事件,做一个自动运行的代码。

    2:本例在代码运行之前,没有清除填写单元格区域的内容,欢迎留言写入相应的代码。

    小结:

    解决本问题,需要用的知识点:

    1:数组的运用

    2:字典的运用

    点击关注可以更方便的查看Excel VBA的案例文章

    私信 视频 可以获取54集VBA入门视频

    私信 VBA或 vba 可以获取文章中含VBA代码的Excle文件

    展开全文
  • Excel VBA 代替Sumproduct实现多条件求和

    万次阅读 2013-08-26 15:11:57
    因为用函数公式,如果数据量大的话,会影响效率,而且会增加文件本身大小,所以想用vba代码替代。 以下代码用来实现函数公式sumproduct的功能,实现多条件求和。 Private Sub 多条件求和()  Dim d, ar, arr, s$, t...

    因为用函数公式,如果数据量大的话,会影响效率,而且会增加文件本身大小,所以想用vba代码替代。

    以下代码用来实现函数公式sumproduct的功能,实现多条件求和。


    Private Sub 多条件求和()
       Dim d, ar, arr, s$, t$, i&
       Set d = CreateObject("Scripting.Dictionary")
       ar = Range("b2:m" & [b65536].End(3).Row)
       arr = Sheet3.Range("b2", Sheet3.[j65536].End(3)).Value
      
       For i = 1 To UBound(arr)
          t = Join(Application.Index(Application.Index(arr, i, 0), Array(1, 2, 3, 4)), ",")
          d(t) = d(t) + arr(i, 8)
       Next
      
       For i = 1 To UBound(ar)
          s = Join(Application.Index(Application.Index(ar, i, 0), Array(1, 2, 3, 4)), ",")
          If d.exists(s) Then ar(i, 11) = d(s) Else ar(i, 11) = ""
       Next
    [b2].Resize(UBound(ar), UBound(ar, 2)) = ar
         
    Set d = Nothing
      
      Call sum2

    End Sub

    Sub sum2()
    arr = Range("f2:k" & [f65536].End(3).Row)
    For i = 1 To UBound(arr)
      t1 = arr(i, 1) * arr(i, 2)
      t2 = (arr(i, 1) - arr(i, 4)) * arr(i, 2) + arr(i, 3) * arr(i, 4)
      If arr(i, 4) = "" Then arr(i, 6) = t1 Else arr(i, 6) = t2
    Next
    [f2].Resize(UBound(arr), UBound(arr, 2)) = arr
    End Sub

    展开全文
  • 用html VBA 编制的对话提示框,用来代替VBA中的msgbox函数.
  • 先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,...
  • VBA和Python都可以处理Excel,VBA和Python各有什么优势?有传言说,微软会使用Python来替代VBA处理Excel,真的会替代么?在知乎上看到这篇文章,我觉得分析得挺对的,特转载一下,内容有所删减。来源:...
  • SQL代替Vlookup 精确查找(左连接 "Left Outer JOIN" 用法) 语法如下:Select 表名 .字段1,表名 .字段2,表名 .字段3,表名 .字段4 FROM 查询表 AS 别名1 Left ...源数据:Excel VBA+SQL 代替Vlookup精确查找问题如下问...
  • 先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,...
  • 先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,...
  • 这里面讲述了EXCEL VBA的编程概念, 不错的教程!另外,《Python Programming on Win32》书中也有很详细的介绍。这本书中给出了一个类来操作EXCEL 文件,可以很容易的加以扩展。 #!/usr/bin/env python # -*- coding...
  • VBA-利用字典代替VLOOKUP

    千次阅读 2019-08-05 15:01:10
    SUB 代替VLOOKUP() Dim d, ar, br, cr, wb As Workbook Set d = CreateObject("Scripting.Dictionary") br = Worksheets("Sheet1").[A1].CurrentRegion '需要配置的数据表 ar = Worksheets("R").[A1].CurrentRe....
  • vba rnd 介绍 VBA Rnd()函数通常用于生成“随机”数字。 当然,您无法使用任何编程算法生成真正的随机数。 但是某些伪随机数生成器算法要比其他算法好。 本文讨论了为什么本机PRNG不好的原因,以及在真正需要...
  • VBA设置数据多少有些麻烦,不如把代码全部写在python里面。 VBA设置的方法可以看我的博客,VBA设置图表坐标轴最大最小范围 该设置方法用python解决如下: import xlwings as xw file = 'test/tt.xlsx' app = ...
  • 有一个功能是使用word离线版的程序(带宏的word,使用VBA编写的,word中含有表单内容),在word中填写内容,上传到网页中,后台解析数据然后导入数据库,但是维护起来比较麻烦(当然是因为我并不怎么了解VB这门语言...
  • 先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,...
  • 本文要点:使用 xlwings ,如同 vba 一样操作 excel使用 pandas 快速做透视表注意:虽然本文是"替代Excel Vba"系列,但希望各位读者明白,工具都是各有所长,适合才是好。案例今天的例子非常简单,从一个表中读...
  • SQL代替Vlookup 精确查找(左连接 "Left Outer JOIN" 用法) 语法如下:Select 表名 .字段1,表名 .字段2,表名 .字段3,表名 .字段4 FROM 查询表 AS 别名1 Left Outer JOIN 被查询表 AS 别名2 ON 别名1.字段名=别名2....
  • 但是同时也会有很多限制,例如excel必须保存为xlsm的格式,vba代码迭代管理太麻烦等。比较理想的方式是做一个独立的小程序,独立执行。这样即可以实现按钮的功能,还可以便于代码维护。方法:为实现excel页面中直接...
  • Excel VBA代码荟萃

    2008-07-10 12:47:42
    这里,为Excel爱好者以及经常用Excel处理事务的网友,提供了用Excel...如果立志成为专业的Office Developer,那么疯狂的使用VBA代替Excel现有功能去完成任务是学习编程之路上的一个有效过程,但也不能走火入魔。
  • 介绍 VBA Rnd()函数通常用于生成“随机”数字。 当然,您无法使用任何程序算法生成真正的随机数。 但是某些伪随机数生成器算法要比其他算法好。 本文讨论了为什么本机PRNG不好的原因,以及在真正需要“随机性”的...
  • 如下顾客消费样表:能不能随意查询每个顾客的消费记录,而且随着消费记录的增多,查询结果也可自动更新?结果如下:当时,韩老师在Excel345|INDEX+SMALL查询顾客消费记录 一文中给出了两个公式:一个是查询记录的...
  • 本文要点: 使用 xlwings ,设置单元格格式 使用 pandas 快速做高难度分组操作 注意:虽然本文是"Python替代Excel Vba"系列,但希望各位读者明白,工具都是各有所长,适合才是最好。 案例 数据与上一节一样,就一个...
  • 本文要点: 使用 xlwings ,设置单元格格式使用 pandas 快速做高难度分组操作注意:虽然本文是"Python替代Excel Vba"系列,但希望各位读者明白,工具都是各有所长,适合才是最好。 案例 数据与上一章一样,就一个...
  • 引用该文章内容,个人收藏,有兴趣可参考。 https://zhuanlan.zhihu.com/p/340323739
  • Filename = Dir(Filepath & "\" & "*.csv")While Filename <> ""SourceFile = Filepath & "\" & FilenameTargetFile = SavePath & "\" & Replace(Filename, ".csv", ".txt")OpenAsUni...
  • 本文主要介绍开发VBA程序时,提高程序运行效率的几点技巧。 一、使用工作表函数或方法. 二、减少对象的激活或选择 三、减少“.”的数量 四、使用数组代替Range 五、让代码【专注】执行 六、避免使用Variant类型
  • 1.Excel程序设计可以...下面验证一下是否在VBA程序中也可以这样代替. 验证之后的结论:"?"只能在立即窗口中使用,如果在编辑窗口中使用的话,会被自动替换成Print,而导致错误. 4.如果要求变量声明的话,可以在工程...
  • Excel通过VBA访问数据库时需要根据表中的值生成SQL语句,由于字段类型不同,构成的方法也有差别,比如字符型要加单引号,日期型需要转换。如果分别处理,代码量就会比较大。 其实有个非常简单的办法,就是把语句写好...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 161
精华内容 64
关键字:

vba代替