-
shell 创建文件_vba代替鼠标打开文件夹
2020-11-30 06:25:21在VBA造文件夹的思考一文中介绍了如何用vba代码新建文件夹。在用VBA操作文件和文件夹的过程中,除了新建文件夹,我们还经常需要与文件夹有个人机交互的过程,比如选择文件所在的文件夹,然后再执行一系列VBA动作。这...在 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安全”对话框。 WindowSwitcher Windows Vista及以后系统的新增方法,在可以预览的3D堆栈中显示打开的窗口。 -
vba将数值转化文本格式_如何用VBA代替VLOOKUP函数?
2020-12-11 13:34:36哈罗,大家好,我是星光,今天和大家分享的主题是使用VBA处理数据查询的问题……数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章...哈罗,大家好,我是星光,今天和大家分享的主题是使用VBA处理数据查询的问题……
数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章一股脑的全部说完,所以先从最简单的分享起……
我举个简单的小栗子。
如下图所示,需要根据A1:C7的数据明细,计算出A10:C11相关考号的人员姓名。
这就是所谓的单条件单结果数据查询了。
这事儿如果用函数解决,那自然是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相关人员指定课目的成绩。
更多资源和教程
零基础学SQL in Excel 25篇合集
VBA爱好者请进,VBA代码宝概述
©EH看见星光
《VBA经典代码应用大全》当当、天猫、京东均有销售~ -
和vlookup_Excel VBA 代替Vlookup
2021-01-09 02:54:38今天要讲的例子就是用VBA取代Vlookup函数。报价单往往都有很多行。快速的数据处理,用VBA明显会比VlookUP要快的多。问题如下:问题描述:1:根据定额工作表里面的定额编号,获取黄色单元格区域的内容;2:在报价单的...作工程报价,经常需要结合国家的定额来做报价单。根据定额的编号,很容易获得定额的价格,方便报价。以前做报价单的时候,都是用VlookUP函数来查找定额编号在反馈相应的价格。今天要讲的例子就是用VBA取代Vlookup函数。
报价单往往都有很多行。快速的数据处理,用VBA明显会比VlookUP要快的多。
问题如下:
问题描述:
1:根据定额工作表里面的定额编号,获取黄色单元格区域的内容;
2:在报价单的工作里面,查找与定额编号匹配的数据填入。
解决的思路详解:
1:为了运行的速度,把定额工作表里面的数据,全部放入arr数组;
2:把定额编号作为字典的key,定额工作表里面的 项目名称+单位+数量作为字典的item。本例会把这三项数据,放入数组装入字典。 及字典套数组
3:查找字典的key,并输出数组。
代码运行的结果如下:
代码如下:
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 sum2End 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
2009-02-17 14:27:47用html VBA 编制的对话提示框,用来代替VBA中的msgbox函数. -
python可以代替vba么_VBA会被Python代替吗?
2020-12-07 11:00:50先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,... -
二次开发vba_VBA 会被 Python 代替吗?
2020-12-19 21:51:58VBA和Python都可以处理Excel,VBA和Python各有什么优势?有传言说,微软会使用Python来替代VBA处理Excel,真的会替代么?在知乎上看到这篇文章,我觉得分析得挺对的,特转载一下,内容有所删减。来源:... -
vba搜索java里面的sql_Excel VBA+SQL 代替Vlookup精确查找
2021-03-14 01:41:56SQL代替Vlookup 精确查找(左连接 "Left Outer JOIN" 用法) 语法如下:Select 表名 .字段1,表名 .字段2,表名 .字段3,表名 .字段4 FROM 查询表 AS 别名1 Left ...源数据:Excel VBA+SQL 代替Vlookup精确查找问题如下问... -
vba中有多线程吗_VBA会被Python代替吗?
2020-12-11 13:42:52先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,... -
python可以嵌在vba中吗_VBA会被Python代替吗?
2021-01-09 14:34:14先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,... -
python excel 代替vba_excel中想实现使用Python代替VBA,请问应该怎么做?
2020-11-29 19:40:21这里面讲述了EXCEL VBA的编程概念, 不错的教程!另外,《Python Programming on Win32》书中也有很详细的介绍。这本书中给出了一个类来操作EXCEL 文件,可以很容易的加以扩展。 #!/usr/bin/env python # -*- coding... -
VBA-利用字典代替VLOOKUP
2019-08-05 15:01:10SUB 代替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()函数不正确,应使用什么代替
2020-07-10 02:03:25vba rnd 介绍 VBA Rnd()函数通常用于生成“随机”数字。 当然,您无法使用任何编程算法生成真正的随机数。 但是某些伪随机数生成器算法要比其他算法好。 本文讨论了为什么本机PRNG不好的原因,以及在真正需要... -
xlwings代替vba设置excel的坐标轴
2018-11-09 11:20:27VBA设置数据多少有些麻烦,不如把代码全部写在python里面。 VBA设置的方法可以看我的博客,VBA设置图表坐标轴最大最小范围 该设置方法用python解决如下: import xlwings as xw file = 'test/tt.xlsx' app = ... -
VBA有什么其他的代替方案吗?
2019-06-25 14:28:26有一个功能是使用word离线版的程序(带宏的word,使用VBA编写的,word中含有表单内容),在word中填写内容,上传到网页中,后台解析数据然后导入数据库,但是维护起来比较麻烦(当然是因为我并不怎么了解VB这门语言... -
excel python插件_VBA会被Python代替吗?
2020-11-02 12:43:39先说答案:不会被替代这里引用轮子哥的话说:微软只会开发更多的增强型插件来慢慢淡化VBA,但是不会用其他语言取代VBA。早在17年底,就有风声说Python要取代VBA,成为Excel官方脚本语言。我认真翻看了下好多篇文章,... -
python代替excel vba_"替代Excel Vba"系列(一):用Python的pandas快速汇总
2020-12-10 19:01:00本文要点:使用 xlwings ,如同 vba 一样操作 excel使用 pandas 快速做透视表注意:虽然本文是"替代Excel Vba"系列,但希望各位读者明白,工具都是各有所长,适合才是好。案例今天的例子非常简单,从一个表中读... -
sql count用法_Excel VBA+SQL 代替Vlookup精确查找
2020-12-14 16:28:21SQL代替Vlookup 精确查找(左连接 "Left Outer JOIN" 用法) 语法如下:Select 表名 .字段1,表名 .字段2,表名 .字段3,表名 .字段4 FROM 查询表 AS 别名1 Left Outer JOIN 被查询表 AS 别名2 ON 别名1.字段名=别名2.... -
python代替vba操作表格_python替代vba,实现excel页面按钮的功能(基于win32com)
2020-12-06 10:35:40但是同时也会有很多限制,例如excel必须保存为xlsm的格式,vba代码迭代管理太麻烦等。比较理想的方式是做一个独立的小程序,独立执行。这样即可以实现按钮的功能,还可以便于代码维护。方法:为实现excel页面中直接... -
Excel VBA代码荟萃
2008-07-10 12:47:42这里,为Excel爱好者以及经常用Excel处理事务的网友,提供了用Excel...如果立志成为专业的Office Developer,那么疯狂的使用VBA代替Excel现有功能去完成任务是学习编程之路上的一个有效过程,但也不能走火入魔。 -
VBA Rnd()函数不正确,应使用什么代替
2020-05-25 13:50:52介绍 VBA Rnd()函数通常用于生成“随机”数字。 当然,您无法使用任何程序算法生成真正的随机数。 但是某些伪随机数生成器算法要比其他算法好。 本文讨论了为什么本机PRNG不好的原因,以及在真正需要“随机性”的... -
excel vba编程代码大全_Excel | VBA——一对多查询,几行代码代替复杂公式
2020-11-23 13:39:33如下顾客消费样表:能不能随意查询每个顾客的消费记录,而且随着消费记录的增多,查询结果也可自动更新?结果如下:当时,韩老师在Excel345|INDEX+SMALL查询顾客消费记录 一文中给出了两个公式:一个是查询记录的... -
python代替vba操作表格_"Python替代Excel Vba"系列(二):pandas分组统计与操作Excel...
2020-12-06 10:35:39本文要点: 使用 xlwings ,设置单元格格式 使用 pandas 快速做高难度分组操作 注意:虽然本文是"Python替代Excel Vba"系列,但希望各位读者明白,工具都是各有所长,适合才是最好。 案例 数据与上一节一样,就一个... -
python代替vba操作表格_“Python替代Excel Vba”系列(二):pandas分组统计与操作Excel...
2020-12-06 10:35:40本文要点: 使用 xlwings ,设置单元格格式使用 pandas 快速做高难度分组操作注意:虽然本文是"Python替代Excel Vba"系列,但希望各位读者明白,工具都是各有所长,适合才是最好。 案例 数据与上一章一样,就一个... -
PYTHON与EXCEL交互,代替VBA,提高数据分析效率(引用)
2021-01-18 16:01:31引用该文章内容,个人收藏,有兴趣可参考。 https://zhuanlan.zhihu.com/p/340323739 -
csv中逗号用什么代替_VBA – 替换CSV中的逗号而不是qoutes中的逗号
2021-01-14 14:27:51Filename = Dir(Filepath & "\" & "*.csv")While Filename <> ""SourceFile = Filepath & "\" & FilenameTargetFile = SavePath & "\" & Replace(Filename, ".csv", ".txt")OpenAsUni... -
提高VBA程序效率的技巧
2016-01-18 16:13:20本文主要介绍开发VBA程序时,提高程序运行效率的几点技巧。 一、使用工作表函数或方法. 二、减少对象的激活或选择 三、减少“.”的数量 四、使用数组代替Range 五、让代码【专注】执行 六、避免使用Variant类型 -
Excel 2003 VBA 宝典学习笔记:第3部分 理解VBA 第7章 VBA概述
2010-03-09 12:12:001.Excel程序设计可以...下面验证一下是否在VBA程序中也可以这样代替. 验证之后的结论:"?"只能在立即窗口中使用,如果在编辑窗口中使用的话,会被自动替换成Print,而导致错误. 4.如果要求变量声明的话,可以在工程... -
【VBA研究】VBA如何生成SQL语句最快捷
2017-11-01 11:22:48Excel通过VBA访问数据库时需要根据表中的值生成SQL语句,由于字段类型不同,构成的方法也有差别,比如字符型要加单引号,日期型需要转换。如果分别处理,代码量就会比较大。 其实有个非常简单的办法,就是把语句写好...