我遇到一个Python代码问题,该代码试图在Excel工作簿中执行VBA宏。每当它试图使用excel_AddIns:
暂定2:尝试动态启动Excel实例
发生了什么:没什么不同
暂定3:尝试指定插件所在的位置
注意:尝试了两条指向插件所在位置的路径
VBA最最精典的教程(基础入门)
您还没有浏览的资料哦~
快去寻找自己想要的资料吧
您还没有收藏的资料哦~
收藏资料后可随时找到自己喜欢的内容
都知道学会了英语语法,再加上大量的词汇基础,就算基本掌握了英语了。 类似的要使用vba,也要入乡随俗,了解他的构成,简单的说vba包含数据类型
、 变量
/常量
、对象
和常用的语句结构
。
不过呢在量和复杂度上远低于英语,不用那么痛苦的记单词了,所以vba其实很简单的。 熟悉了规则之后剩下就是查官方函数啦,查Excel提供的可操作对象啦。
顺带一提的是,函数其实也很容易理解,方便使用。拿到一个函数,例如Sum
, 只要知道它是求多个数的和就够了,剩下的就是用了。例如Sum(1000,9)
结果就是1009
了。 函数的一大好处就是隐藏具体实现细节,提供简洁的使用方法。
Trim
函数删除给定输入字符串的前导空格和尾随空格。 语法:Trim(String)
InStr
函数返回一个字符串第一次出现在一个字符串,从左到右搜索。返回搜索到的字符索引位置。 InStrRev
函数与InStr
功能相同,从右到左搜索。返回搜索到的字符索引位置。
&
字符串连接操作,在VBA中连个字符串连接使用&
进行连接
' 要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:
' 选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:
' 要选择名为“Test1”和“Test2”的两个区域的交叉区域
End(xldown):从被选中的单元格向下寻找,如果被选中单元格为空,则一直向下走到 第一个非空单元格;如果被选中单元格为非空,则向下走到最后一个非空单元格。 End
函数的4个方向参数:xlUp, xlDown, xlToLeft, xlToRight。
' 选择连续数据列中的最后一个单元格 ' 选择连续数据列底部的空单元格 ' 获取连续数据最后一行的行号 ' 想选择连续数据最后面的空白行 ' 选择某列中连续数据单元格区域 ' 选择某列中非连续数据单元格区域
补充: 对于上述代码中非连续数据,也可以利用UsedRange.Rows.Count获取所有数据的条/行数。
移动工作表是指将工作表移到工作簿中的其他位置。 在VBA中,可以使用WorkSheet.Move方法来移动工作表。
语法:表达式.Move(Before, After) 其中,在Move方法中,主要包含两个参数,其功能如下:
Before 在其之前放置移动工作表的工作表。如果指定了After,则不能指定Before。 After 在其之后放置移动工作表的工作表。如果指定了Before,则不能指定After。 例如:移动 "工资表" 至Sheet3工作表之后,可以输入以下代码:
另外,如果既不指定Before也不指定After,Microsoft Excel将新建一个工作簿, 其中包含所移动的工作表。例如,输入以下代码,即可新建一个工作簿, 且该工作表中包含有 "工资表" 工作表。
复制工作表是指将工作表进行备份,以便于用户对备份文件进行操作时,不会损坏原有文件。 在VBA中,使用Sheets.Copy方法可以将工作表复制到工作簿的另一位置。 语法:
其中,在Copy方法中,包含的两个参数与在Move方法中的参数相似,其参数功能如下: Before 将要在其之前放置所复制工作表的工作表。如果指定了After,则不能指定Before。 After 将要在其之后放置所复制工作表的工作表。如果指定了Before,则不能指定After。 例如:复制 "工资表" 表格至Sheet3工作表之后,可以输入以下代码:
另外,用户还可以在不同的工作簿之间进行复制。 例如:将当前工作簿中的“工资表”工作表复制到打开的Book1工作表中,可以输入以下代码:
先判断是否有自动筛选,如果没有为A1添加一个自动筛选
只保留一个箭头,其他的过滤箭头全隐藏
如若清空某个选中的单元格中的数据,使用的API为:ClearContents
。
同样使用ClearContents方法,主要是确定如何选中除第一行以外的表格。
以下文件,文件夹等相关方法可自行封装成共通(common function)以便项目中使用。
1.2 使用Dir()判断文件是否存在
注意: VBA中两种判断文件是否存在的方法,使用 FileExists
和 Dir
,期中 FileExists
返回逻辑值,而 Dir
返回字符串,因此 Dir
不能参与逻辑值的比较。
FreeFile
函数返回一个整数,即表示可由 Open
语句使用的文件标识符号句柄。
参数num=1,返回一个范围为 256–511 的文件号。
EOF函数 在对文件进行读取时,用于确认读取位置是否到达文件末尾。到达文件末尾时返回真(true)。
Date
函数返回当前的系统日期。
Time
函数返回当前的系统时间。
Now
函数返回当前的系统日期和时间。
注意: 如果同时读取 Date、Time 以及 Now,那么 Now = Date + Time,但是实际上,我们不可能同时调用这三个函数,因为执行完一个函数之后,才能执行另一个函数,所以如果您在程序中必需同时取得当时的日期和时间,必需调用 Now,再利用 DateVale 及 TimeValue 分别取出日期和时间。
CDate
函数可把一个合法的日期和时间 表达式 转换为 Date
类型,并返回结果。
提示: 请使用 函数来判断 date 是否可被转换为日期或时间。
date 参数通常是一个字符串表达式, 表示从100年1月1日到9999年12月31日之间的日期。 但是,date 还可是任何表示该范围内的日期、时间或日期和时间的表达式。
是一个仅包含由有效日期分隔符分隔的数字的字符串, 则DateValue将根据您为系统指定的短日期格式识别月、日和年的顺序。 DateValue 还能清楚地识别包含月名称(长名称或简写形式)的日期。 例如,除了识别 12/30/1991 和 12/30/91 之外,DateValue 还识别 December 30, 1991 和 Dec 30, 1991。 如果省略 date 的年部分,则 DateValue 将使用计算机系统日期中的当前年。 如果 date 参数包含时间信息,则 DateValue 将不会返回它。 但是,如果 date 包含的时间信息无效(如“89:98”),则将出错。
从上述 举例1 代码结果总结出,DateValue
只返回一个Date类型结果,而CDate
返回结果将保留日期和时间,当参数为一个时间类型的时候,DateValue
只能返回一个 00:00:00
的结果。
IsDate
函数返回一个布尔值,用于判断一个表达式是否可被转换为日期。如果表达式是日期,或可被转换为日期,则返回 True 。否则,返回 False 。
注释: IsDate
函数使用本地设置来检测字符串是否可以转换为日期。在 Windows 中, 有效日期的范围是公元100年1月1日至公元9999年12月31日;各操作系统的范围各不相同。
DateAdd
函数可返回已添加指定时间间隔的日期。
必需的。需要添加的时间间隔的数目。可对未来的日期使用正值,对过去的日期使用负值。 |
必需的。代表被添加的时间间隔的日期的变量或文字。 |
如果计算的日期位于年份数 100 前(即,你减去的年份数大于 date 中的年份,则出现错误。
如果 number 不是 Long 值,则在计算之前将其 四舍五入 到最接近的整数。
另外: 在使用“w”时间间隔(包括一周的所有天,从星期日到星期六)向日期添加天数时,DateAdd 函数会向日期添加您指定的总天数,而不是像您预期的那样仅向日期添加工作日(从星期一到星期五)数。
如下图所示,根据数据范围创建数据透视表时,从源范围中删除数据后,即使刷新数据透视表,旧项目仍将存在于数据透视表的下拉菜单中。 如果要从数据透视表的下拉菜单中删除所有旧项目,可参照如下两种方法:
1. 通过更改选项来清除数据透视表中的过滤器缓存(旧项目)
Step1: 右键单击数据透视表中的任何单元格,然后单击 数据透视表选项 从上下文菜单。 看截图:
Step2: 在里面 数据透视表选项 对话框中,单击 数据 标签,选择 没有 来自 每个字段要保留的项目数量 下拉列表,然后单击 OK 按钮。
Step3: 右键单击“数据透视表”单元格,然后单击 刷新 从右键菜单。 看截图:
然后你可以看到旧的项目从数据透视表的下拉菜单中删除,如下图所示。
2. 使用VBA代码清除所有数据透视表中的过滤器缓存(旧项目)
在 项目 窗格打开 ThisWorkbook(Code) 窗口,然后将下面的VBA代码复制并粘贴到窗口中。
按 F5 键来运行代码,然后从活动工作簿中的所有数据透视表的下拉菜单中立即删除旧项目。
错误现象: Excel2016(365)运行macro宏时,弹出标题警告↓
依次点击:“工具” → “选项" → "在安全" 选项卡中 勾选 ”保存时从文件属性中删除个人信息”。
单击“Office按钮(或文件菜单) → Excel选项(或选项) → 信任中心”,单击“信任中心设置”按钮,选择“个人信息选项”(隐私选项Privacy Options),在“文档特定设置”下 取消 勾选 “保存时从文件属性中删除个人信息” 后确定。
注意: 该选项仅对当前工作簿有效。另外,新建工作簿时该选项为灰色不可用,只有用“文档检查器”检查了文档并删除了个人信息后该选项才可用。
今天小伙伴遇到一个问题,自己做了一个xlam的工具,实现更改当前excel的所有sheet名称,但是当点击工具button的时候程序无反应。
首先看代码并没有什么问题,调查的时候在循环语句中添加了ThisWorkbook指定, 但执行macro的时候发现sheet名字依然没有改变。在无意间看 工程资源管理器(Project Explore) 的时候,发现VBAProject(XXX.xlam)中的默认Sheet1的名字被改变,这也就说明了,不是VBA程序
没有起作用,而是程序在执行的时候默认操作了xlam工作簿。后修改程序中的默认制定工作簿语句 为:ActiveWorkbook
marco可以正常执行操作,问题得以解决。
VBA示例代码查看:。
本Repository除特殊注明外,均采用 Creative Commons (自由转载-保持署名-非商用-禁止演绎)协议发布。