文章背景:工作中,有时需要获取数据源的信息,临时存储在数组中,然后再将数组中的数据传递到目标工作表中。其中主要用到Resize函数,WorksheetFunction.transpose函数和WorksheetFunction.Index函数。
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
在网站中,我们经常会碰到需要一层层向下选择的情况。在第一个选项列表中选择第一个数据,第二个选项列表中选择第二个数据,依此类推。并且,后面的选项列表内容会根据前面选择的内容而发生变化。如下图1所示。
官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/overview/language-reference 代码完成后:工具-vbaproject属性-保护-查看时锁定-密码
引言:本文的代码与昨天发表的《VBA实战技巧34:使用VBA组织图形1》一样,都整理自mrexcel.com,一个很好的令人兴奋的示例,有兴趣的朋友可以仔细研究。
如何告诉Excel在不使用指数表示法的情况下四舍五入到指定数的有效数字?可以使用下面的公式:
我们在使用VBA处理Excel数据的时候,很多时候就是对数据进行分类汇总、查找等等。一般这种功能都是使用字典来实现,比如汇总数据功能。
使用Excel VBA隐藏行的简单方法是使用联合区域。通常,如果要使用VBA快速隐藏行,可以选择自动筛选工具,使用一行代码可快速隐藏数千行。然而,如果需要在同一区域内为其他目的使用自动筛选,那就必须单独处理每个单元格。如果了解VBA,当程序必须在多个单元格上循环时,它可能会较慢,尤其是在每次迭代后需要执行操作时。
还有一个“秘密”就是,也可以在定义的单元格区域名称中使用EVALUATE,因此有一些方法可以在不使用VBA的情况下访问单元格公式中EVALUATE的功能。
Q:有一个文本文件,其内容包含很多以0开头的数字,如下图1所示,当将该文件导入Excel中时,Excel会将这些值解析为数字,删除了开头的“0”。
通常,Excel默认启用了记忆式键入功能,如下图1所示,在“Excel选项”对话框的“高级”选项卡中,默认勾选了“为单元格值启用记忆式键入”复选框。这为我们在工作表中的数据输入提供了便利。
1. Youtube - Derrick Sherrill 2. GitHub
文章背景:在使用VBA的用户窗体(userform)时,有时会用到二级下拉菜单。比如选择院系(一级下拉菜单)后,班级(二级下拉菜单)的内容自动更新;选择省份后,该省份下面所属的市相应更新。接下来以省市为例,进行二级下拉菜单的功能实现。
在VBA实现排列组合(可重复)中使用普通的VBA编程方法,实现了排列组合(可重复),代码虽然不是很多,但作为初学者需要理解还是有一定难度的。
如下图1所示的工作表,在单元格区域A2:F2中放置的是要查找的数值;在列H至列BF、行9至行30是被查找的区域,这个区域分17个小区域,每个区域3列,其单元格中要么为空,要么放置着一些数值。
在上篇文章中,我们展示了自定义函数有效的方式是通过将单元格区域读取到Variant型数组来传递单元格区域数据。本文将介绍在自定义函数中最有效的方式是使用Excel内置函数。
定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Compare Text ‘字符串不区分大小写 Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能 工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化 工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
需求:数据保存在A列中,数据组之间使用全角逗号(,)分隔,整理之后需要将每组数据开始的圆括号部分移到末尾,并合并相同的全角方括号部分(【】)的内容。实际效果见B列。
有时,我们可能需要知道工作簿中有哪些模块和相应的过程。Jon Peltier改编了VBA过程,可以列出当前所有已经打开的工作簿中所含有的VBA模块和过程清单。在输出工作表中,前两行为模块所在工作簿名称和工程名称。并且,代码会绕过受保护的VBA工程,同时如果工作簿中没有代码,也会在输出工作表中说明。
使用Excel的宏来实现将每10行数据创建为一个新表的功能。以下是一个示例的VBA代码:
前面的《Excel VBA:办公自动化》和大家分享了VBA常用的基础知识,就有同学留言问我:猴子老师,能不能出一个项目实战案例,可以把前面的知识都应用起来。
使用VBA时,有可能需要根据分隔符将字符串拆分为不同的部分。此时,就可以使用VBA的Split函数。
运行下面的VBA过程,将列出当前工作表中所有合并单元格的地址。程序会新建一个工作表并重命名,然后在其中输入所有合并单元格的地址。
文章背景:在采用VBA抓取数据时,有时需要判断指定数值是否在一维数组中已存在;如果存在,则希望能够获取该数值在数组内的位置。
字符替换在Excel使用过程中应该比较常用,比如清除不可见字符、替换某些特殊字符等。
如果启用屏幕更新,则该属性值为 True。Boolean 类型,可读写。 关闭屏幕更新可加快宏的执行速度。这样将看不到宏的执行过程,但宏的执行速度加快了。 当宏结束运行后,请记住将 ScreenUpdating 属性设置回 True。
写在开头的话:本系列从第133篇开始的22篇文章,都是翻译改编自fastexcel.wordpress.com的Making your VBA UDFs Efficient系列,可能有点高深晦涩,但确实都是好的VBA用户自定义函数编程细节技巧和经验。对于大多数人来说,你可以略过这些内容,因为我们只需懂得基础的VBA用户自定义函数知识就足够了。对于想深入研究VBA的人来说,还是值得研究和试验的。我刚开始看到这些文章的时候,一是水平有限,看不大懂,也觉得没有什么必要,所以一直收藏着。然而,随着自已研究VBA的深入,不由得佩服老外对VBA研究的深入,此时刚好Excel VBA解读系列又写到自定义函数这里,正好拿出来,边研究并翻译分享给大家。如果对这些内容没有兴趣的朋友,可以略过,免得浪费时间。
下图1所示是一个常见的需求,在多个列中放置着每个月份的数据,需要将月份移到单个列中,同时保留报表中的所有描述性信息。
继上次我写了个PHP脚本抓取我的一卡通消费记录(用PHP爬取个人一卡通的消费记录)之后,我遇到了一些奇怪的问题。比如说,我统计上个学期的一卡通的花费的时候竟发现少算了400+RMB,百思不得其解。直到前段时间我才发现,原来学校的这个网站查询到的信息是不完整的,有些记录竟然会有缺失,后来我请教了负责这一块的老师,老师表示大概是学校里面某些一卡通的消费机离线时间太长,消费记录没有同步到服务器上,所以造成了这个问题。
VBA虽然整体语言上的更新是停滞的,但在OFFICE对象接口上,还是会有所更新。例如Excel里的新增的函数,在Application.WorksheetFunction类下面会有所更新,但不是全都有,也不知道未来会补充多少。
我有超过50个具有相同格式的Excel文件,它们的列标题相同,并且都放置在同一文件夹,有什么快速的方法将它们合并到一个单独的Excel文件的一个工作表中?
很多学习VBA的应该都是在使用了一段时间的Excel之后,想弥补一些Excel本身的不足、或者是实现一些自动化操作。
使用Range.Rows.Count和Range.Columns.Count属性。
yhd-VBA转VB.Net VSTO学习记录-2 【学*研*行】 每天学习一点,进步一点 【目标】 想搞个插件 【目录】 文件类 读取一个文件读取多个文件 工作表类 列出工作表名称 单元格类 修改单元格颜色读取区域A1:C3当前打印九九乘法表清空当前工作表内容 📷 【代码】 📷 【放上代码,方便复制、粘贴】 '读取一个文件 Private Sub Button2_Click(sender As Object, e As RibbonControlEventArgs) Handles
Worksheet.Paste(Excel VBA没有Range.Paste方法)在某种程度上与Range.PasteSpecial方法非常相似。Paste方法的主要目的是将剪贴板包含的内容粘贴到相关工作表上。
在Excel里从单元格读取数据,获取的是一个二维的数组,这也是数组与单元格交互最常用的方式。
VBA提供了一些出色的工具来帮助你查找和修复程序bugs。本课程将讲解什么是bugs、如何处理它们,并介绍一些与发布应用程序有关的因素。
很多情况下,我们需要使用工作表中的数据来填充组合框,但往往这些数据中含有许多重复值。如何去除重复值并得到唯一值,这是一个永恒的话题,大家也会用到各式各样的方法得到结果。本文讲解一种技巧,使用Recordset(记录集)来获取唯一值并将其填充到组合框中。
面向Excel数据处理自动化的脚本编程,目前主要有VBA和Python两种语言可供选择。
👆点击“博文视点Broadview”,获取更多书讯 面向Excel数据处理自动化的脚本编程,目前主要有VBA和Python两种语言可供选择。 从上世纪90年代到目前,VBA一直是Excel脚本编程的主要工具。VBA语言具有简单易学、功能强大的特点,在长达几十年的时间里为提高Excel工作效率作出了贡献,也积累了海量的代码和学习资料。在这段时间里,Basic语言也一直是国内中学到大学教学首选的计算机语言。 随着网络时代的全面到来,以及大数据、人工智能等的兴起,Python语言在国内异军突起。Python语言
引言:本文的代码整理自mrexcel.com,一个很好的令人兴奋的示例,有兴趣的朋友可以仔细研究。
👆点击“博文视点Broadview”,获取更多书讯 ▊ VBA与Python:当王者荣耀遇到卷王之王 VBA语言是VB的一个子集,具有简单易学、功能强大的特点。 上世纪90年代末至今,VBA语言被大部分主流行业软件用作脚本语言,包括办公软件如Excel、Word、PowerPoint等,GIS软件如ArcGIS、MapInfo、GeoMedia等,CAD软件如AutoCAD、 SolidWorks等,统计软件如SPSS等,甚至连图形软件如PhotoShop、CoralDraw等也使用VBA进行脚本编程。
要使用Excel VBA修改MySQL数据库中的记录,可以使用ADODB.Connection对象执行SQL UPDATE语句。以下是一个示例代码,演示如何执行修改操作:
导语:为了帮助想要快速学会Excel VBA的朋友,特以《Excel Programming Weekend Crash Course》这本书为基础,开始整理一系列资料,在完美Excel社群上分享。一共有30课,本文为第3课,目前已在社群上发布4课。有兴趣的朋友可以到社群上学习。
文章背景:处理Excel单元格数据时,有时需要在单元格区域内同时增加或减少某一数值,这里介绍两种操作方法。
Excel已经为我们准备好了编写VBA代码的编辑器,让我们非常方便地编写、运行和调试、保存VBA代码。
📷 Sub 测试() If IsFileExists("D:\new_temp\") Then Debug.Print "存在" Else Debug.Print "不存在" End If End Sub '参数名称 含义 说明 'strShtName 指定工作表名称 必选 'strWbName 指定工作簿名称 可选 'Sub Demo() ' Debug.Print udfSheetExists("Sheet1") ' Debug.Print udfSheetExist
领取专属 10元无门槛券
手把手带您无忧上云