- 博客(41)
- 收藏
- 关注
原创 VBA第三十九期 VBA自动把工作表转换成PPT
和前面两节一样运行Microwof PowerPoint时需要对其对象库进行引用,在Excel中打开VBE,选择“工具”,激活“引用”对话框后,通过滚动条找到 Microsoft PowerPoint XX Object Library,选中该项。具体操作步骤参照前面章节。‘恢复初始设置,这个是不能省略的,虽然省略程序依然可以运行。
2025-04-07 11:49:47
369
原创 VBA第三十八期 VBA自贡分把表格图表生成PPT
VBA基本知识更新接近尾声,VBA方面如有更具体化需求请评论区留言,依情况根据留言信息增加更新内容。上一节讲到把数据区域自动生成PPT,这一实例是把图表自动生成PPT。注意:PowerPoint环境设置参照上一节。
2025-04-05 16:14:57
768
2
原创 VBA第三十七期 VBA如何通过事件触发监视所有打开的工作簿或工作表?
在前面的章节中介绍了工作簿事件和工作表事件。这些事件监视的是特定工作簿。如果要监视所有打开的工作簿或工作表,可以使用下表应用程序级别的事件。请注意我们前面有一章节讲到的在应用【工作表事件】时候必须要先选中某个具体工作表,然后在具体某个表发生我们应用时事件才被触发。在任意打开的工作簿中创建了一个新工作表。更新任意数据透视表更新任意数据透视表。任意工作表上的选择被修改。使任意工作簿窗口取消激活。调整任意工作簿窗口的大小。使打开的工作簿取消激活。关闭任意打开的工作簿。打印任意打开的工作簿。保存任意打开的工作簿。
2025-04-04 19:08:43
726
1
原创 VBA第三十六期 VBA自动生成幻灯片技巧
Sheets("表一").Range("A1:J28").CopyPicture Appearance:=xlScreen, Format:=xlPicture。首先设置对PowerPoint对象库的引用,在Excel中打开VBE即我们的VBA编辑器,在Excel中点击【工具】,如下画面。第三步点击VBA的【工具】按钮,点击【引用】进入对话框,如图选中Microsoft PowerPoint选项,点击确定完成设置。以上过程执行将工作表【表一】的"A1:J28"区域的数据转换为图片,然后创建PPT。
2025-04-03 13:44:14
741
原创 VBA第三十五期 常用VBA语句汇总索引
将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。将以指定字母开头的变量的默认数据类型设置为。
2025-04-01 14:38:45
622
原创 VBA第三十四期 VBA编程函数和过程的用法和区别
另外函数和过程相同的地方就是函数和过程都可以带参数和不带参数,当然不带参数的函数用得比较少,如果函数不带参数就必定要用到VBA的内置通用函数或者是我们设定的公共变量,这样才会更具不同的变量值返回不同的值。因为过程不需要返回值说以就不需要As String等规定类型的定义。第一个区别:从上面两个的对比明显可以看出,函数的主要区别是函数内部必须要有一个对函数名称的赋值语句,就是函数中标黑体和下划线的地方。以上介绍的是私有函数和过程,如果要定义共有的函数和过程就只要把Private改成public就可以了。
2025-03-31 13:08:17
516
原创 VBA第三十四期 VBA中怎么用OnKey事件
我们在VBA设计中经常需要使用到OnKey方法,特别是在窗口设计中比如我们想用到翻页按键,则就可以来建立一个OnKey事件。Setup_OnKey过程运行以后,就会达到最终效果,按PgDn键会将指针下移一行,按PgUp键会将指针上移一行。所以,诸如Curl+PgDn的组合键仍会激活工作簿中的下一个工作表。同样,如果活动工作表是一个图表工作表,那么也会发生错误,因为在图表工作表中没有活动单元格。当然程序结束前我们还要编写一个过程,将OnKey事件取消,将这些按键恢复到正常的功能。
2025-03-30 19:57:08
734
原创 VBA第三十三期 如何在VBA中运行Access
我们经常需要从Access中将查询数据然后复制粘贴到Excel中,下面实例使用DAO(Data Access Object)在后台打开并运行 Access查询。注意:要自动启用Access,需要先设置对 Microsoft Access 对象库的引用。在Excel中打开VBE,选择“工具”|“引用”,激活“引用”对话框后,通过滚动条找到 Microsoft Access XX Object Library,此处的XX指你系统上的Access版本号,选中该项。2、VBA中运行Access宏实例。
2025-03-29 13:42:08
674
原创 VBA第三十二期 VBA中工作簿和工作表级别的事件
该事件在默认的双击行为之前触发。该事件在默认的右击行为之前触发。在工作薄中创建一个新的工作表。用户或外部链接修改任意工作表。将一个工作簿作为加载项安装。将一个工作薄作为加载项卸载。即将打印或预览一个工作簿。单击工作表上的一个超链接。修改或刷新一个数据透视表。使任意工作簿窗口取消激活。使任意工作簿窗口取消激活。改变任意工作表上的选择。使任意工作表取消激活。调整工作簿窗口的大小。调整工作簿窗口的大小。
2025-03-27 11:06:26
647
原创 EXCEL图标操作及修改数据范围实例
在Excel表格中我们建立图表后,有时候需要修改横坐标的相关数据,比如有时候要用时间做横坐标,有时候需要固定品种做横坐标。想、然后拖择我们想作为横坐标的数据列:下面是选择C4到C10单元格。第三步选择我们想要的表格式样,一般第一个是免费的。得到如下图,可以看到时间在横坐标中显示出来了。
2025-03-26 11:18:22
573
原创 VBA第三十一期 VBA如何执行外部程序
如果执行Shell 函数后,过程还有其他指令,它们会与新加载的程序同时执行。某些情况下,可能需要用Shell 函数启动一个应用程序,但需要在应用程序关闭之前暂停VBA代码的运行。例如,启动的应用程序可能生成一个文件,用于稍后的代码。虽然不能中止代码的执行,但可创建一个循环,专门用来监视应用程序的状态。因此,在过程需要一个On Emor语句,如果未发现可执行文件或发生其他错误,则会显示一条消息。Shell 函数的第二个参数确定如何显示应用程序(1是正常大小的窗口代码,并带有焦点)。
2025-03-25 19:14:44
946
原创 VBA第三十期 VBA的一些自编的拿来即用的函数
该函数使用了VBA的Split 函数,Split 函数接收一个字符串(包含分隔符),并返回包含分隔符之间的元素的Variant数组。如果该参数是c:lexcel files\2013\backuplbudget.xlsx,函数将返回字符串budget.xlsx.FileNameOnly函数可以对任意的路径和文件名进行处理(即使文件不存在也可以)。该函数接收一个参数(带文件名的路径),它只返回文件名。该函数接收一个参数(带文件名的路径)。该函数接收一个参数(路径)。如果路径存在,那么返回True。
2025-03-20 13:46:29
528
原创 VBA第二十九期 从关闭的工作簿文件中检索值的方法
一般情况下我们都是通过先打开工作簿,然后在激活工作表,这样方便从表格中读取数据。但有时候我们从某个文件之读很少的关键数据,打开文件的方法就比较繁琐。这里我们可以利用一个XLM宏来实现从关闭的工作簿读取数据。这是Excel 5之前的版本中使用的旧式宏。这样做的好处就是比如程序的关键数据的调取不想让用户在运行过程中察觉,比如密码存储等,当我们用打开工作簿的方式读取数据时,即使你关闭屏幕更新,但依然能看到打开的工作簿过程,只是屏幕不出现闪烁感而已。
2025-03-19 10:18:19
432
原创 VBA第二十八期 如何调整单元格区域大小
我们在以前设计的动态显示图表的时候,是采用翻页的方式实现,这里介绍另外一种方式,这种方法在处理数据量不是很大的表格图表时,通过Range对象的Resize属性使得报容易改变单元格区域的大小。Resize属性有两个参数,分别表示被调整的单元格区域内的总行数和总列数。执行完以下语句后,MyRg的大小增加一行。假定工作簿有一个名为Data的单元格区域。代码需要添加额外一行来扩展命名的单元格区域。当然更要注意的是这里增加的行和列是往下DOWN和往右TOright的。更实际的例子涉及更改单元格区域名称的定义。
2025-03-18 16:18:09
636
原创 VBA第二十七期 数据录入中验证格式有效性
End Sub这个事件过程检查应当包含数据有效性验证规则的单元格区域(名为InputRange)内的验证类型。换言之,工作表的改变可能是由于数据被复制到包含数据有效性验证的单元格区域中引的。Excel的数据有效性验证是一个有用的工具,但会需要我们向使用数据单元格提前设定有效性验证规则。监视单元格区域验证数据输入的有效性,利用Excel数据有效性验证功能,保证用户在粘贴数据时,进行数据有效性验证,实例如下。注意:仅当验证单元格区域的所有单元格包含相同的数据验证类型时,该过程才能正确工作。
2025-03-17 19:51:53
579
原创 VBA第二十六期 VBA用调试语句做进度条
一般在提示是我们用MsgBox函数放在关键位置中以监视特定变量的值:在执行过程时,会弹出函数过程中的消息框。因此要确保在工作表中只有一个公式使用这种函数,否则将为估算的每个公式呈现消息框,不停重复出现消息框,很快就变得很烦人。如果在程序中把Debug语句运用得当的话就可以代替进度条使用,因为图标是进度条最大的弱点就是要设置非模态窗口,这样在程序运行时不能做别的事情,否则就会报错。在这个示例中,无论何时遇到Debug. Print语句,都会把两个变量Ch和i的值输出到“立即窗口”中。
2025-03-16 20:22:31
444
原创 VBA第二十五期 如何通过确定文件被打开时间来监控文件泄密
然后写入被打开的工作簿的关键信息:文件名、完整路径、日期、时间以及用户名。因此,当工作簿被打开时,Init过程就会创建对象变量,最后一条语句使用消息框来显示写入CSV文件的信息。一旦打开一个工作簿,就会调用 AppEvents_WorkbookOpen过程。本节的示例通过将信息存储在CSV(逗号分隔变量)文本文件中,来追踪打开的每个工作簿。我们只要通过确定工作簿何时被打开,然后吧代开时间等关键信息存储在文本文件中备查,把如下过程编入工程的第一个语句调用即可监控我们的文件是否被别人打开过。
2025-03-14 11:47:11
632
原创 VBA第二十四期 VBA如何将单元格区域传递给二维数组
这里可以看出来在读取和存入数组的时候应用的属性格式不一样,分别是Range(“data”).value和 Range(“data”)。
2025-03-13 15:34:58
365
原创 VBA第二十三期 VBA事件触发处理程序不执行不响应
同时最重要的时注意事件过程的存放位置,对于第一次用事件处理的编程人员,出现的问题就是不管你的触发过程怎么写都在执行的时候不能触发,大部分都怀疑是不是安装的VBA版本不符的原因,还有就是怀疑过程名是不是不符合命名规定,结果将过程名改N遍以后还是不能用,其实出现这样的情况就是过程存放的位置不对。这里利用监控一个表格的激活事件来触发Worksheet_Activate()过程,这里的过程名是约定的,过程名不能自己随意修改,每个事件对应一个特定的过程名。WorKbookNewSheet:添加一个新的工作表时发生。
2025-03-12 11:14:52
674
原创 VBA第二十二期 VBA调试时返回某个特定的错误值
VBA编程时经常碰到运行错误,虽然有错误代码提示,但我们还是希望能返回某个特定的错误值,以便于程序的调试工作。上述代码的函数返回值的数据类型为VARiant,因为改函数可以返回非字符串的值。xlErrValue(针对#Value!xlErrDiv0(针对#DIV/0!xlErrName(针对#Name?xlErrNull(针对#Null!xlErrNum(针对#Num!xlErrRef(针对#Ref!xlErrNA(针对#N/A)
2025-03-11 11:25:29
659
原创 VBA第二十一期 VBA动态显示柱状图表
'cht.SeriesCollection(1).XValues = Range(Sheets("表11").Cells(1, 2), Sheets("表11").Cells(1, lastcl))lastcl = Sheets("表1").Range("a1").End(xlToRight).Column。lastcl = Sheets("表1").Range("a1").End(xlToRight).Column。Sheets("图表").ChartObjects(1).Delete。
2025-03-10 14:32:02
554
原创 VBA第二十期 VBA最简单复制整张表格Cells的用法
前面讲过复制整张表格的方法,使用语句Workbooks("实例.xlsm").Sheets("表格1").Copy Workbooks(wjm).Sheets(1)实现,这里用我们熟悉的Cells属性也可以实现整表复制。lastcl = Sheets("选股池1").Range("b1").End(xlToRight).Column。Sheets("选股池1").Range("a2").EntireRow.Insert。Sheets("选股池1").Range("b2").Value = "合计"
2025-03-09 14:13:27
422
原创 VBA第十九期 VBA给筛选数据标记不同颜色
If Sheets("表1").Cells(rw, cl) = Sheets("汇总").Range("a" & i) Then。If Sheets("表1").Cells(rw, cl) = Sheets("汇总").Range("a" & i) Then。If Left(Sheets("汇总").Range("a" & i), 1) = "H" Then。If Left(Sheets("汇总").Range("a" & i), 1) = "G" Then。' 下行的6代表【表1】的第几行。
2025-03-07 09:27:21
784
原创 VBA第十八期 如何获得WPS中已经安装字体的列表
Excel没有提供直接的调用来检索当前版本已经安装了哪些字体,我们可以用CommandBar属性和方法,这些属性和方法主要用来处理工具栏和菜单。其中这句Cells(i+1,i) .Font.Name= FontList.List(i+1)是用来显示字体名称的。
2025-03-05 09:10:53
711
原创 VBA第十七期 WPS2019版本添加自定义按钮实操验证
这里要提醒一下怎么添加宏,如上图选择左边栏的【宏】,选择我们以前建好的宏,点击栏目中间的添加按钮,然后再点击添加后的宏,然后点击重命名为【生成】,菜单栏就会出现下图的生成按钮。进入“文件” → “选项” → “自定义功能区” → 新建“DeepSeek”组 → 添加宏“DeepSeekR1”并重命名为“生成”按钮。计入功能火了以后,我以为试着在菜单栏建立自定义按钮,在实际操作中给伙伴们带来几点实操体验。
2025-03-04 15:06:10
944
原创 VBA第十六期 Columns.Count与.Row的区别
cl = Workbooks("全部.xlsm").Sheets("表1").Range("a1").End(xlToRight).Column。rw = Workbooks("全部.xlsm").Sheets("表1").Range("a1").End(xlDown).Row。cl = Sheets("表1").Range("a4").CurrentRegion.Columns.Count。Rw = Sheets("表1").Range("a4").CurrentRegion.rows.Count。
2025-03-03 16:55:00
420
原创 VBA第十五期 一种可以灵活显示的列表
VBA列表设计的时候,我们有时候需要显示足够多的数据,但如果我们一次性定义过多列,例如UserForm2.ListBox1.ColumnCount = 100,这样定义有两个弊端,一是经常要拖动滚动条,二是大部分时间不需要看这么多数据。这样我们就需要设计一种可以灵活显示的列表,能够增加和减少显示列数。ylist(i, iii) = Right(Sheets("周表一").Cells(i, ii), 4)ylist(i, iii) = Right(Sheets("表一").Cells(i, ii), 5)
2025-02-26 13:39:08
761
原创 VBA第十四期 一个有声音的进度条
Application.StatusBar = False用于清除以前在状态栏显示的内容,假如我们在以前的程序中用了Application.StatusBar = "表2更新完成",如果不清除就会在当前语句Application.StatusBar = "表1更新完成"运行前一直显示"表2更新完成",造成跟踪错觉。If Sheets("表1").Range("b" & i) = mylist(ii) Then addbz = 0。Sheets("表1").Range("a2").Select。
2025-02-24 10:55:10
536
原创 VBA第十三期 删除指定行或者列的几种方法
比如我们复制一张数据表到当前工作表,需要删除某个月或者大于多少行以后的数据,那么就用一个If判断,下面的语句中lastrw < lastrw1是可以替换的判断条件,lastrw是我们需要的行数,lastrw1是我们当前工作表的最大行数。第二种是我们需要删除我们不需要的行,在程序中我们也要通过if语句来判断,如果我们需要选择的数据量在表格中占比较大,那么一般就选择哪些是不符合我们的数据删除。Workbooks("实例.xlsm").Sheets("表格1").Range("1:65536").Delete。
2025-02-22 18:12:10
756
1
原创 VBA第12期 VBA导出成Excel文件和文本文件技巧
If repeatbz Then Workbooks("实例.xlsm").Sheets("文件库").Range("a" & lastrw) = wjm。If Workbooks("实例.xlsm").Sheets("文件库").Range("a" & i) = wjm Then repeatbz = 0。index = Workbooks("实例.xlsm").Sheets("文件库").Range("a1").End(xlDown).Row。" & vbNewLine & "以便于文件下一步操作"
2025-02-20 10:46:54
971
原创 VBA第11期 计算数据区域的最大行数和最大列数的几种方法
以上三种方法的效果是一样的,但第二种方法最简洁,但也要注意到方法二和方法三都用到了xlDown和xlToRight属性,这就要注意所选"a1"单元格所在的行和列是否有空单元格,如果有空单元格就会影响返回值。myrow = Workbooks("实例.xlsm").Sheets("统计").Range("a1").End(xlToRight).Column。Sheets("全部").Range("a1").Select。Sheets("实例").Range("a1").Select。
2025-02-19 11:29:38
615
原创 VBA第十期 ListBox1.List()函数的多种用法
上面的实例中就用到了ListBox1.List(i, 1)来返回选中行的第一列的值“编号”,ListBox1.List(i, 1)的第二个参数就是代表需要返回的列号。Workbooks("全部.xlsm").Sheets(1).Range("1:65536").Delete。
2025-02-18 11:59:43
598
原创 VBA第九期 结合range和cells选中不连续区域
UNION在我们用到循环结构时可以达到选取我们想要的不连续的行或列的数据集合。在单独EXCEL表格操作中容易选中我们想选中的区域,但在VBA程序设计中特别是FOR循环语句中,需要按照我们的思路选取任意区域却不是那么简单。lastcl = Sheets("示例").Range("a1").End(xlToRight).Column。lastrw = Sheets("示例").Range("a1").End(xlDown).Row。Sheets("示例").Select。With Sheets("示例")
2025-02-17 10:27:41
515
原创 VBA第八期 截取字符串中的字符转换为数字出现类型不符的问题
If CVar(Mid(Workbooks("实例.xlsm").Sheets("表1").Range("p" & ii), 5, 2)) = i Then sm = sm + 1。lastcl = Workbooks("实例.xlsm").Sheets(1).Range("a1").End(xlToRight).Column + 1。lastrw = Workbooks("实例.xlsm").Sheets("表1").Range("a1").End(xlDown).Row。
2025-02-16 11:50:54
391
原创 VBA 第七期 一种最头疼的死循环bug
If Trim(Workbooks("实例.xls").Sheets("表1").Range("p" & i)) = sTrim(Workbooks("实例.xls").Sheets("表1").Range("p" & ii)) And Workbooks("实例.xls").Sheets("表1").Range("a" & i) <> "" Then。lastrw = Workbooks("实例.xls").Sheets(1).Range("a1").End(xlDown).Row。
2025-02-15 11:49:19
378
原创 row和rows、 column和columns的区别
If CVar(Mid(Workbooks("实例.xlsm").Sheets("表1").Range("p" & ii), 5, 2)) = i Then sm = Sheets("统计").Range("a1").End(xlToRight).Columns。表示第一行的最后列的列数,也是本行的数据单元格列数。表示第一列的最后行的行数,也是本列的数据单元格行数。表示的是第一行的最后单元格的数据内容,而不是列数。有时候也要用到某行或某列最后单元格的内容。表示第一列的最后行的最后单元格的数据内容。
2025-02-14 11:51:30
574
原创 VBA进度条中最容易出现的问题以及解决方案
问题就处在父窗口是缺省模式即有模式窗体,然而有时候我们的父窗口也是无模式窗体时还是会出现上面的错误,这里就是我们容易忽视的一个问题,既我们的窗口嵌套可能是多层的,这样的话就要把所有上层的窗口都改为无模式窗体。大部分稍微复杂的数据处理都需要进度条。现在来讲一下进度条中最容易出现的问题以及解决方法。设定窗口现实模式为无模式窗体,一般缺省 vbModeless时为有模式窗体。Uprogress.SetDescription "正在筛选中……首先我们建立一个如图的窗体Uprogress。然后更新现实进度条长度。
2025-02-12 21:12:35
340
原创 VBA中Selection用法对区域选定并复制
xlDown表示选择某单元列向下一直选择到最后有数据的列,一般是选择到列末,要注意的是本列中间不能有空单元格,否则就不能按照我们的思路选择到表格的最后一个数据单元格,程序也不会达到预期目的甚至很难查到复制不到我们想要的数据的原因。xlToRight表示选择某单元列向右边一直选择到最后有数据的行单元格,一般意思就是选择到行末,当然也和xlDown一样需要注意中间不能出现空单元格。Selection.Copy Workbooks("全部.xlsm").Sheets(1).Range("a1")
2025-02-10 18:00:45
572
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人