中企动力 > 商学院 > vba导入excel
  • ?

    精华帖 | Excel插入控件(表单控件和ActiveX控件)妙招

    EH

    展开

    转载自百家号作者:因为专注

    Excel宏/代码的出现,不仅使Excel实现了使用的多样化,而且还可以让用户自定义命令,同时还能让将某些重复的步骤记录下来,以实现操作步骤的化繁为简,给用户带来操作便捷的同时,还能提高效率。通常情况下,我们需要在Excel界面插入一些控件,让这些控件指定VBA界面中的代码,以实现在Excel界面控制VBA代码(或宏)的运行或停止。但是,在Excel默认界面功能区根本找不到插入控件命令按钮,所以我们需要一些技巧来调出需要的控件命令,本教程以Excel2013为例,介绍两种添加控件的技巧,希望对大家有点帮助。

    1、自定义快速访问工具栏:首先单击菜单栏中的文件选项卡,然后找到选项命令。在Excel选项窗口选择快速访问工具栏命令,将从下列位置选择命令设置成“开发工具”选项卡(或所有命令),找到插入控件命令,然后鼠标左键单击,再点击添加按钮,这是在右侧窗口就会多出一个插入控件命令,此时单击右下角的确定按钮保存设置即可。此时在标题栏的左侧快速访问工具栏中就会多出一个插入控件命令,按下键盘上的Alt键即会显示该命令对应的快捷键,本教程中对应的快捷键为Alt+4.

    设置自定义快速访问工具栏按下Alt键显示各命令对应快捷键

    2、自定义功能区主选项卡(即菜单栏):此方法也是先要调出Excel选项窗口,在Excel选项窗口单击左侧的自定义功能区。设置自定义功能区为主选项卡,然后勾选开发工具,右下侧的确定保存设置。此时Excel界面菜单栏中就会多出开发工具一项,如图所示。在开发工具的控件功能区找到插入命令,即可选择对应的表单控件或ActiveX控件。

    设置功能区开发工具下的插入控件命令

    喜欢的朋友记得分享和点个赞哟,您的支持是对我最大的鼓励,谢谢!

  • ?

    EXCLE 2010 VBA教程

    沛儿

    展开

    01-01、Excel VBA教程简介

    01-02、宏在工作中的运用

    01-03、Excel VBA基础

    01-04、Excel VBA窗口介绍

    01-05、Excel VBA代码编写规则

    01-06、对象

    01-07、属性

    01-08、方法

    01-09、常量与变量

    01-10、数据类型

    01-11、判断语句之IF

    01-12B、If条件判断小结

    01-12、判断语句IF之多条件

    01-13、判断语句之SELECT

    01-14、循环语句之DO...LOOP

    01-15、循环语句之DO...LOOP实例

    01-16、循环语句之DO WHILE...LOOP

    01-17、循环语句之DO UNTIL...LOOP

    01-18B、DO...LOOP 语法小结

    01-18、循环语句之WHILE与UNTIL位置变化

    01-19、.循环语句之FOR EACH...NEXT

    01-20B、For...NEXT小结与实例

    01-20、循环语句之FOX...NEXT

    01-21、用语句FOR...NEXT制作九九乘法表

    01-22、exit与end语句

    01-23、跳转语句

    01-24、错误分支语句

    01-25、with语句

    01-26、VBA与公式

    01-27、VBA与函数1

    01-28、VBA与函数2

    01-29、VBA与运算符

    01-30、like运算符

    01-31、like运算符运用

    01-32、综合运用(盘点清单核对)

    02-00、工作簿与工作表基础知识

    02-01、工作簿的表示方法

    02-02、当前工作簿与活动工作簿

    02-03、工作簿基础操作

    02-04、工作簿实例应用

    02-05、工作表的表示方法

    02-06、工作表集合应用

    02-07、工作表增加与删除

    02-08、工作表增加删除实例

    02-09、工作表移动与复制

    02-10、工作表选择与激活

    02-11、工作簿综合运用(拆分工作簿)

    03-00、EXCEL单元格基础

    03-01、Range引用基础1

    03-02、Range引用基础2

    03-03、Range引用与变量

    03-04、Range引用与索引值

    03-05、Range引用与索引值应用(有条件的平均工资)

    03-06、Cells单元格引用基础

    03-07、单元格简写

    03-08、三种单元格引用小结

    03-09、行、列引用

    03-10、row与column属性

    03-11、单元格的值与地址

    03-12、单元格移动与复制

    03-13、行列插入与删除

    03-14、活动单元格与选择区域

    03-15、UsedRange已使用区域(条件统计)

    03-16、currentregion当前区域

    03-17、单元格的Offset(给工资条加、减表头)

    03-18、单元格的resize(单据数据保存)

    03-19、单元格所在行与列(删除空行)

    03-20、specialcells定位(按批注汇总)

    03-21、FIND单元格查找技术

    03-22、单元格查找应用(制作查询系统)

    03-23、FIND实例应用(进销存之入库单)

    03-24、FIND实例应用(进销存之入库单)

    03-25、单元格END属性

    03-26、单元格END属性应用(查找分期付款最后月份)

    03-27、最后的格格

    03-28、单元格并集(Union)

    03-29、单元格并集应用(条件筛选)

    03-30、单元格交集(Intersect)

    03-31、单元格式之数字格式

    03-32、单元格式之字体(VBA实现条件格式)

    03-33、给你点颜色看看(底纹颜色讨论)

    03-34、单元格式实例(工资条格式化)

    03-35、利用查找颜色拾取进行颜色汇总

    03-36、粘贴

    03-37、选择性粘贴

    03-38、合并单元格(相同部门的合并)

    03-39、合并单元格实例(取消合并单元格并保持数据)

    03-40、批注基础(有条件的添加批注)

    03-41、批注修改(给员工加批注图片)

    03-42、图形基础

    03-43、图形插入实例(根据姓名导入图片)

    03-44、综合运用(多表合并)

    03-45、综合运用(多表拆分)

    04-00、EXCEL事件程序定义与作用

    04-01、事件程序基础

    04-02、工作表事件实例1(自选计算与投票统计)

    04-03、工作表事件实例2(状态栏地址与防工作表名更改)

    04-04、工作表事件实例3(自动列出工作表名与单元格区域保护)

    04-05、工作簿事件实例1(自动选择月份表、右键禁用、打印控制)

    04-06、工作簿事件实例2(给工作表加密码)

    04-07、应用程序事件基础

    04-08、应用程事件实例(打印控制)

    04-09、事件程序总结

    05-01、数组基础

    05-02、数组维度

    05-03、向数组中写数据

    05-04、在数组中取数据

    05-05、数组运用(数据汇总)

    05-06、数组写入与读取实例(数组的优势体现)

    05-07、数组运用1(计算不重复值)

    05-08、数组运用2(计算不重复值)

    05-09、数组运用(分类求和)

    05-10、动态数组(条件筛选)

    05-11、动态数组(多表合并)

    05-12、Split函数与数组(字符串生成数组)

    05-13、Join函数与数组(数组生成字符串)

    05-14、Fileter函数与数组(巧用Filter实现多列结果)

    05-15、工作表函数与VBA数组(几句代码制作查询系统)

    05-16、借助VBA数组快速格式化单元格

    05-17、利用VBA数组进行排序

    05-18、VBA数组分类汇总

    06-00、字典技术的魅力

    06-01、字典基础(你可能不会字典!)

    06-02、字典语法基础1

    06-03、字典语法基础2

    06-04、字典语法基础3

    06-05、字典数据写入技巧讨论

    06-06、字典实例(第1次与最后一次采购价提取)

    06-07、字典实例(多表求不重复值)

    06-08、字典实例(字典与数组经典结合)

    06-09、字典实例(分类计算)

    06-10、字典应用(多列合并计算)

    06-11、字典应用(自动查询)

    07-01、从通配符到正则表达式

    07-02、VBA中引入正则表达式

    07-03、正则表达式基础

    07-04、正则表达式(普通字符)

    07-05、正则表达式(元字符)

    07-06、元字符应用(数字、字符提取)

    07-07、元字符之量词

    07-08、元字符之量词实例

    07-09、分组

    07-10、后向引用与非捕获

    07-11、字符组(拆分单词)

    07-12、字符组(去编号)

    07-13、首尾锚定

    07-14、循环多个正则表达式

    07-15、综合练习(重新排列)

    07-16、零宽断言(有条件添加修改记录)

    07-17、正向零宽断言(汇总凌乱的开销记录)

    07-18、负向零宽断言(给单词加分隔符)

    07-19、懒惰与贪婪模式(乱中取目录)

    07-20、正则表达式属性(计算上班时间)

    07-21、分组的妙用

    07-22、分组运用(提取身份证信息)

    07-23、正学表达式总结

    08-01、自定义函数基础(小试牛刀)

    08-02、自定义函数的调用与存放位置

    08-03、自定义函数小实例(等级函数)

    08-04、自定义函数-返回不重复随机数(结果是数组)

    08-05、自定义函数(参数默认值设置)

    08-06、自定义函数(参数不定)

    08-07、自定义函数实例-身份证信息提取

    08-08、自定义函数实例-单元颜色求和(字典+自定义函数)

    08-09、自定义函数实例-反转字符与数字求和(正则+自定义函数)

    08-10、自定义函数实例-提取不重复值(字典+正则+自定义函数)

    09-01、开启进入Word的大门

    09-02、Word基础操作

    09-03、word中的表格

    09-04、从Word表格提取数据

    09-05、从word文字中提取数据

    09-06、提取excel数据到word

    10-01、消息框基础

    10-02、MSGBOX第二参数详解

    10-03、MSGBOX返回值

    10-04、InputBox基础与区别

    10-05、InputBox实例(用户与密码校验)

    10-06、InputBox方法Type参数详解(制作通用控件的好方法)

    11-01、一封情报引发的知识

    11-02、类模块基础

    11-03、类的实例应用(等级判断)

    11-04、属性过程中对象的操作(模板定制)

    11-05、属性过程中对象的操作(条件累加)

    11-06、用Function过程创建方法

    11-07、综合应用方法

    11-08、用sub过程创建方法

    11-09、类模块与程序事件

    12-01、窗体基础

    12-02、窗体属性

    12-03、窗体属性

    12-04、窗体事件

    12-05、窗体按钮控件

    12-06、制作变幻的登录界面

    12-07、标签与按钮控件(登录界面控件设计)

    12-08、标签与按钮控件(登录界面控件设计)

    12-09、文本框控件(注册界面控制设计)

    12-10、单选框控件(员工单设计)

    12-11、复选框控件(员工单设计)

    12-12、复合框控件(员工单设计)

    12-13、列表框控件(员工单设计)

    12-14、切换按钮控件(基础产品单设计)

    12-15、图像控件(员工信息查询设计)

    12-16、表单控件

    12-17、表单控件

    12-18、ActiveX控件组合框

    12-19、ActiveX控件 (组合框实例-入库自动查询)

    12-20、图像控件(动态显示员工照片)

    13-01、自定义功能区的应用(演示)

    13-02、解析excel 2010文件

    13-03、认识功能区Ribbon

    13-04、代码自定义功能区

    13-05、初识RibbonX

    13-06、XML语法结构讲解

    13-07、OpenXML架构元素(一)

    13-08、OpenXML架构元素(二)

    13-09、OpenXML架构元素(三)

    13-10、group元素-分组

    13-11、button元素-按钮

    13-12、button元素-按钮(让控件运行起来)

    13-13、CallBacks-回调(点击控件访问网站)

    13-14、CallBacks-回调(让按钮产生变化)

    13-15、CallBacks-回调(让按钮产生变化)

    13-16、给控件自定义图标

    13-17、给控件自定义图标

    13-18、动态变幻自定义图标

    13-19、checkBox 元素-复选框(根据复选框状态录入数据)

    13-20、editBox元素-文本编辑框

    13-21、editBox元素-文本编辑框(较酷的用户名验证)

    13-22、toggleButton元素-切换按钮

    13-23、toggleButton元素-切换按钮(字母大小写切换按钮订制)

    13-24、item元素-条目

    13-25、comboBox元素-组合框

    13-26、comboBox元素-组合框(利用组合框录入与筛选)

    13-27、comboBox元素-组合框(动态填充组合框)

    13-28、dropDown元素-下拉列表

    13-29、Gallery元素-库(确实很酷)

    13-30、Gallery元素-库(动态装载图片)

    13-31、menu元素-菜单

    13-32、menu元素-菜单 ( 定制系统登录和超链接)

    13-33、splitButton元素-拆分按钮

    13-34、splitButton元素-拆分按钮

    13-35、dynamicMenu元素-动态菜单(动态获取单元格值为菜单项目)

    13-36、dynamicMenu元素-动态菜单(动态获取单元格值为菜单项目)

    13-37、dynamicMenu元素-动态菜单(动态筛选指定目录下的文件)

    13-38、menuSeparator元素-菜单分割符 (动态变化的菜单标题)

    13-39、separator元素-控件分隔线(动态显示分隔线)

    13-40、box元素-控件框

    13-41、dialogBoxLauncher元素-对话框启动器

    13-42、Ribbon控件综合运用(制作通用插件)

    13-43、Ribbon控件综合运用(制作登录界面)

    14-01、幼儿园开票系统功能介绍

    14-02、系统界面制作

    14-03、系统单据初始资料设置

    14-04、学生管理模块(增加功能)

    14-05、学生管理模块(查询与修改功能)

    14-06、主要单据的自动化设置

    14-07、单据查询系统

    14-08、工作表的显示隐藏设置

  • ?

    五个Excel函数技巧,你是第一个知道

    罗帷

    展开

    函数是快捷操作的方式之一,函数与快捷键相比,函数使用的会少一点,因为大多数人都觉得函数很难,其实它并没有想象中的那么难,今天小编整理了几种,想要的可以学学。

    (注意:括号中的坐标可根据实际坐标调整)

    随机生成整数

    在单元格中输入=RANDBETWEEN(1,10)

    随机生成0-1小数

    在单元格中输入=RAND()

    随机生成字母

    在单元格中输入=CHAR(65+RAND()*26)随机生成大写字母,输入=CHAR(97+RAND()*26)随机生成小写字母。

    快速生成序列

    在单元格中输入=ROW(A1)或=COLUMN(A1)

    文本公式怎么计算

    点击“公式”,选择“定义的名称”——“定义名称”,在名称栏中输入“计算”,引用位置栏中输入=Evaluate()函数,最后在单元格中输入“=计算”即可。

    函数虽然不好学,但学会的就会快很多,不要为自己的不想学而借口啦,不会的赶紧学。

  • ?

    黑马程序员:程序员必看:如何用Python实现Excel读写与处理!

    浑浩阑

    展开

    本篇文章讲的是Excel文件的读写和处理。Excel除了是普通生活中应用广泛的数据处理软件和数据保存格式外,在商业分析中也占有非常大的重量,熟练使用Excel软件是数据分析师很关键的技能点,但这篇笔记不是讲各类Excel函数和快捷键,而是讲Python对Excel的 .xls 和 .xlsx 格式数据的读写和处理。

    目录

    Excel文件简介Excel文件的读取Excel文件的写入pandas库读写Excel筛选与统计量计算

    Excel文件简介

    Excel其实相信大家都不陌生,一个 .xls(Excel 2013后默认格式为 .xlsx )文件是一个工作簿(workbook),包含多个表(worksheet),每个表内数据按照行列进行组织,书中第三章的用词中,“文件”和“工作簿”表示同一个对象。拿本篇笔记用到的示例文件

    sales_2015.xlsx 为例:

    本篇笔记需要用到两个库: xlrd 和 xlwt,这两个库不是内置模块,但安装了Anaconda集成环境的话,这两个库被包含了,可以通过 import xlrd 和 import xlwt 进行测试,如果提示未安装,可以通过命令行下用pip安装,本处不展开。xlrd用来读取Excel文件,xlwt用于构建Workbook对象进行Excel文件的创建和写入数据。这两个库不能对Excel文件进行直接更改,因此思路是

    复制一份数据到内存进行分析计算,再写入新Excel文件中

    。需要直接性地修改可以考虑VBA吧,VBA(Visual Basic for Applications)是目前 Office 套件支持的基于 Visual Basic 的宏语言,目前一般在Excel或PPT内进行编程实现高级效果(如Excel数据的批量修改)一般都用VBA,当然以后Office要内置Python了,现在学好Python以后就能很容易理解和定制化Excel的宏了。

    Excel文件的读取

    通过xlrd库的open_workbook()对Excel数据进行读入。

    #lrd读取并输出基本信息# -*- coding: utf-8 -*-def readExcel(fname):from xlrd import open_workbook workbook = open_workbook(fname) print('工作表数量:', workbook.nsheets) for worksheet in workbook.sheets(): #循环输出表名 print("Worksheet name:", worksheet.name, "\tRows:",worksheet.nrows, "\tColumns:", worksheet.ncols)readExcel('sales_2015.xlsx')

    输出:

    工作表数量: 3Worksheet name: january_2015 Rows: 7 Columns: 5Worksheet name: february_2015 Rows: 7 Columns: 5Worksheet name: march_2015 Rows: 7 Columns: 5

    Excel文件的写入

    写入要用到 xlwt 库,如下面的代码,创建一个Workbook对象后,通过worksheet.write()写入数据。因为使用with进行处理,所以不需要写close()显式关闭打开的文件。

    #读取一些Excel并写入新表def parsingExcToWrite(in_file,out_file):from xlrd import open_workbook from xlwt import Workbook #导入一个 Workbook对象 output_workbook = Workbook() output_worksheet = output_workbook.add_sheet('jan_2015_output') #加一个新工作表到工作簿对象里 with open_workbook(in_file) as workbook: worksheet = workbook.sheet_by_name('january_2015') #引用上面创建的工作表 print('type(worksheet):',type(worksheet)) print('write()传入参数类型:',type(worksheet.cell_value)) for row_index in range(worksheet.nrows): for column_index in range(worksheet.ncols): #枚举写入数据 output_worksheet.write(row_index, column_index, worksheet.cell_value(row_index, column_index)) output_workbook.save(out_file)in_f='sales_2015.xlsx'out_f='save_sales_2015.xlsx'parsingExcToWrite(in_f,out_f) #调用

    输出:

    type(worksheet):write()传入参数类型:

    生成的文件效果如下:

    上面写成的函数parsingExcToWrite()就是是一个可以使用在读取、处理、写入的框架,如前所说,这两个库不能直接对Excel进行修改,那么读取相应的数据处理后再写入新表就是很好的解决方案。 下面的处理代码如果需要保存处理后的数据就可以基于这段代码进行扩展。

    pandas库读写Excel下面看看用pandas进行Excel读取的操作, 读只需要一句话(引入库的不算在内),pd.read_excel(in_fname),和前一篇笔记读取csv的格式一样,都是生成dataframe数据格式。写入Excel通过pd.ExcelWriter()构建一个Excel写入对象,再对这个对象操作,最后调用 .save()进行写入到硬盘。

    import pandas as pd in_f='sales_2015.xlsx'out_f='save_sales_2015_1.xlsx'data_frame = pd.read_excel(in_f, 'january_2015', index_col=None) #对 data_frame进行一些处理dframe_condition = data_frame[:] writer = pd.ExcelWriter(out_f)dframe_condition.to_excel(writer, sheet_name='sheet_name',index=False) writer.save()print('done')#输出: done

    筛选与统计量计算因为pandas可以简化一些操作,并且多练pandas是很有意义很重要的,所以下面筛选和统计量的计算都是基于pandas的处理。

    有些时候,我们并不需要 Excel 文件中的所有行,特别是数据量很大但是我们只关心满足一定条件的数据。例如,可能只需要包含一个特定的词数值的那些行,或者只需要那些与一个具体日期相关联的行数据。这时候我们就需要进行筛选,去掉不需要的行,只保留需要的行。下面的代码演示了筛选 Sale Amount 大于 $567.00 的行。我们可以通过改变代码data_frame_value_meets_condition = data_frame[data_frame['Sale Amount'].astype(float) > 567.0] 来筛选行中的值满足某个条件的数据。#import pandas as pd #上面引入了这里就不需要重复引入,如果是独立的文件需要写上这句def valConditionExc(in_file,out_file):data_frame = pd.read_excel(in_file, 'january_2015', index_col=None) data_frame_value_meets_condition = data_frame[data_frame['Sale Amount'].astype(float) > 567.0] writer = pd.ExcelWriter(out_file) data_frame_value_meets_condition.to_excel(writer, sheet_name='jan_15_output',index=False) writer.save()#行中的值匹配于特定模式def valMatchPattern(in_file,out_file): data_frame = pd.read_excel(in_file, 'january_2015', index_col=None) df_value_matp = data_frame[data_frame['Customer Name'].str.startswith("J")] writer = pd.ExcelWriter(out_file) df_value_matp.to_excel(writer, sheet_name='jan_15_output',index=False) writer.save() print(df_value_matp)#选择满足一定条件的特定列数据def selectColByIndex(in_file,out_file): data_frame = pd.read_excel(input_file, 'january_2015', index_col=None) df_col_by_index = data_frame.iloc[:, [1, 4]] writer = pd.ExcelWriter(output_file) df_col_by_index.to_excel(writer, sheet_name='jan_15_output',index=False) writer.save()in_f='sales_2015.xlsx'valConditionExc(in_f,'save_sales_2015_2.xlsx')valMatchPattern(in_f,'save_sales_2015_3.xlsx')

    输出:

    Customer ID Customer Name Invoice Number Sale Amount Purchase Date0 1234 John Smith 100-0002 123 2015-01-014 5678 Jenny Walters 100-0006 345 2015-01-24

    使用 pandas 基于列标题选取特定列,一种方式是在数据框名称后面的方括号中将列名以字符串方式列出。另外一种方式是使用 loc 函数。如果使用 loc 函数,那么需要在列标题列表前面加上一个冒号和一个逗号,表示你想为这些特定的列保留所有行。例如下面的代码:

    #import pandas as pd def selectAllColByName(in_file,out_file):data_frame = pd.read_excel(in_file, 'january_2015', index_col=None) selected_columns = data_frame.loc[:, ['Customer ID', 'Purchase Date']] #根据列标题选取特定列 writer = pd.ExcelWriter(out_file) selected_columns.to_excel(writer, sheet_name='jan_13_output',index=False) print(selected_columns) writer.save()in_f='sales_2015.xlsx'selectAllColByName(in_f,'save_sales_2015_4.xlsx')

    输出:

    Customer ID Purchase Date0 1234 2015-01-011 2345 2015-01-062 3456 2015-01-113 4567 2015-01-184 5678 2015-01-245 6789 2015-01-31

    大家可以根据代码的效果区分上上部分代码的data_frame.iloc[:, [1, 4]] 和上面的data_frame.loc[:,

    ['Customer ID', 'Purchase Date']]

    .loc for label based indexing.iloc for positional indexing

    数据装入pandas的dataframe之后,除了进行筛选,计算一些统计量也是数据分析很重要的工作,描述性统计给我们提供了很多描述数据的指标,下面的代码为工作表的销售数据计算总数和均值。

    #import pandas as pd def getSumAndAverage(in_f):all_worksheets = pd.read_excel(in_f,sheetname=None, index_col=None) workbook_total_sales = [] workbook_number_of_sales = [] workbook_mean_sales = [] for worksheet_name, w_data in all_worksheets.items(): total_sales = pd.DataFrame([float(str(value).strip('$').replace(',','')) for value in w_data.loc[:, 'Sale Amount']]).sum() #算一个表的总体销售额 number_of_sales = len(w_data.loc[:, 'Sale Amount']) workbook_total_sales.append(total_sales) #装入一个列表 workbook_number_of_sales.append(number_of_sales) mean_sales=total_sales/number_of_sales #均值 workbook_mean_sales.append(mean_sales) print(worksheet_name,'\t total:',total_sales[0],'\t num:',number_of_sales,'\t mean:',mean_sales[0])in_f='sales_2015.xlsx'getSumAndAverage(in_f)

    输出:

    january_2015 total: 3201.0 num: 6 mean: 533.5february_2015 total: 55007.0 num: 6 mean: 9167.83333333march_2015 total: 246045.0 num: 6 mean: 41007.5

  • ?

    excel多工作表合并最简单方法,不用写函数公式,不用写VBA代码!

    昌语梦

    展开

    转载自百家号作者:excel函数教程

    工作簿中多表合并为一表,纯工具操作,不会写公式函数和VBA的同学们不用担心,看完之后就会了。操作版本为微软office2016,使用工具是Power Query,如果您的版本是excel2010或2013,可以在网上下载Power Query插件安装即可。

    以下图为例,需要将工作簿中的三个工作表合并为一个工作表。(不管你工作表有多少个,都可以轻松合并)

    选择数据选项卡-获取数据-至文件-从工作簿 ,然后选择电脑上要合并的工作簿点击导入即可

    导入之后出现导航器对话框,选择工作簿文件,点击下方编辑

    这时候进入查询编辑器对话框,然后点击Date列右边的扩展按钮,勾选展开,然后点击确定。

    这时可以看到数据已经展开显示出来了。

    但是因为每个工作表都有一行标题,所以标题也被合并进去了,这时候选择开始选项卡下的“将第一行用作标题”

    然后筛选姓名这一列,将“姓名”取消勾选,点击确定。

    之后将下面的滚动栏滚到最右边,可以发现有三列多余的数据,按住CTRL键选选择三列数据,点击开始选项卡下的删除列即可。

    最后点击开始选项卡的“关闭并上载至”

    就可以看到自动新建了一个合并后的工作表数据。

    如果以后分别在其它三个工作表中有增加了新数据,可以直接点击数据选项卡下的“全部刷新”,数据就会同步到合并工作表中。

  • ?

    如果你是学习Excel的朋友,对VBA这个应该概念不陌生吧?

    情调

    展开

    我们应该都知道Excel VBA的功能比较强大,但是对于刚开始学习的我们来说,面对那一串串英文代码,你是不是看得头昏脑胀?想去学习,然和茫然久久不能找不到学习入口?

    在这里,和大家分享自己的学习经验,和大家一起学习,共同进步。对了,还要告诉大家,我也是初学者,不是高手,如果有什么说得不对的,希望大家及时指出。我的目的并不是教学,而是期望创造一个学习Excel VBA的氛围! 记住一个共同的目标——掀开那层神秘的面纱,看看VBA的真实面目。

    首先我们要学习什么是VBA?就的先去了解他的真实面貌,VBA是Visual Basic For Application的简称,具体说来,可能让几天几夜也都说不完,你应该也知道VBA是建立在Office中的一种应用程序开发工具,其实知道这也就够了。

    Excel本身的内置函数其实已经很强大了,甚至有人说,只要学会二三十个函数,就已经可以满足普通用户日常的工作需求。那我们为什么要学VBA?

    是的,如果只需要满足一些普通的工作需求可能永远也不会用到VBA,但在实际应用的过程中,人们的操作却越来越大,需要也越来越高,这时候就需要用VBA来对Excel进行二次开发了,VBA可以有效地自定义和扩展Excel的功能。但有一点想要告诉大家,VBA功能很强大,但并不是万能的,也并不是所有工作都需要用VBA来解决,也并不是所有工作用VBA来解决都会很简单,这要根据实际情况而定,有些工作你用VBA来解决的话相反会变得很麻烦。

    换一种语言表达出来说VBA不是一种程序语言吧, 不公平, 它的确提供了程序语言能完成的功能; 说它是吧, 和现代程序语言相比功能又很不完整。说它不是面向对象的语言吧, 它有类模块, 提供部分类的功能; 说它是面向对象的吧, 类的最只要的特点又不具备。当然了,这些主要都是从VB6继承过来 的"遗传病"。所以通常的结论:"基于对象, 但非面向对象"。MS早就停止VB6的升级了, MS对VB6的放弃直接导致了VBA的功能不会在本质上变得更加强大, 但未尝不是一件好事,作为使用者不用整天跟着屁股后面学习新的功能。事物发展就是这样的,在解决了一个问题的同时又带来另一个新问题。

    设计VBA就是面向"终级用户"类似于数据透视表的"office 高级应用工具", 以脚本的形式存在, 用来达到"自动化驱动office来完成规律性, 重复性任务"的目的。严格来讲VBA不是为了"开发"而是为了"应用", 并不是说完全做不到二次开发, 但和 MS 设计 VBA 的本意不相符甚至是背离。更加不是"无所不能"的程序语言,有太多的事是 VBA 实现不了的,严格来说它都不是一种程序开发语言,只能算作脚本。他和API函数结合可以做到,很多VBA不能完成的事情。

    PS:API函数当然有用,开发图形库必须用它!

    我们下面说说VBA的优缺点:

    1:作为程序语言和其他开发语言比较,VBA的特点:

    (1)"天然"强大的输入输出平台,Excel的控件功能非常强大

    (2)使用便捷,无需搭建任何环境,随时可以用,无需保存,编译,即可运行;代码数据一体化(同时也是"缺点"),发布简单,无需运行环境。

    (3)简单易懂,门槛低,学习周期短

    2:VBA的"缺点"

    (1)不好封装

    (2)需要宿主解释器的解析,所以速度慢

    (3)安全性差

    (4)无法提供面向对象的结构式编程方式

    (5)单线程

    PS:上述"缺点"基本上是脚本语言具有普遍性的"通病",显然VBA就不是针对完成上述功能而设计的。VBA最大的缺点明明就是不能在windows以外的平台使用,像Mac上的Excel,虽然有vba,但是基本只能发挥30%不到的功能,字典这种需要调用windows系统里面功能的东西就没法用了,包括正则表达式,调数据库、fso文件之类的东东。

    新手学习的几点建议

    1:调试 地方窗口,立即窗口,观察窗口,F1(帮助),F2(属性方法),F8(分步执行)途中诊断:断点,stop等等。

    2:分拆 语句分拆长而难懂的句子分拆成基本单元,利用调试功能一个个解决,很容易就理解了它的含义。

    3:耐心 学习目的明确≠急于求成。学习的进程总是遵循渐进式的规律,跳跃式的一夜暴富只能是空中楼阁,所以耐心在学习过程中就显得尤为重要。

    我们每次如果要开始写程序,首先先想下正常处理数据的过程,然后在转换成vba数据处理的过程,仅此而已。每次用到的Excel VBA无非就是以下几种方法:

    (1)对象的使用方法,当我不知道代码怎么去写的时候,我们知道录制宏就可以,然后可以调用Excel内置应用;

    (2)程序语法类:循环,判断,字符串,文件操作等;

    (3)数据处理的方式,数组,字典

    (4)界面,系统等等;这个用的比较少。

    (5)类模块;

    学会了循环,判断,字典,能应用到日常工作中,将繁琐重复的部分交给电脑,就没继续深入研究了,因为够用就好学以致用最重要,会的再多用不到也是白搭,一个人精力有限不可能所有东西都学会。

    另外需要说的一点是,其实VBA效率不算高,复杂程度不算低,总体给人感觉一般。但是任何一个工具只要熟练了,那就是你最好的工具。相信,实践,理解,这可谓是工具认知的一条康庄大道。

    我们学习Excel VBA的内容充其量内容就这么多了, 学习VBA是可以有止境的, 差不多的时候是完全可以收手的, 就算这些内容也完全不用全部学会, 够用就可以收手。写这个程序,其实最主要的是思考如何用程序语言去完成,因为VBA其实操作方法和语句不多,知道如何操作了,就知道如何去写代码。另外送一句话给我们的初学者,看书上的代码再多,再简单,也要自己尝试去写。我们不怕遇到错误,就怕你不敢去迈出那一步。只要你迈出了前进的那一步,你坚持下去了,就会发现胜利终究会属于你的。

    用一句话来总结:"程序的本质是用机器来解放劳动力,而不是用劳动力解放机器!"

    唯有不断学习,才能不被淘汰!

  • ?

    VBA代码解决方案之二十五:EXCEL工作表的添加与删除

    利安德尔

    展开

    今日继续讲解VBA代码解决方案的第二十五讲:工作表如何添加和删除。在VBA解决方案中,在工作簿中添加工作表使用Add方法,Add 方法应用于Sheets和Worksheets对象时新建工作表、图表或宏表。

    语法:expression.Add(Before, After, Count, Type)

    参数:a) Before是可选的,指定工作表对象,新建的工作表将置于此工作表之前。b)After是可选的,指定工作表对象,新建的工作表将置于此工作表之后。 如果Before和 After两者均省略,则新建的工作表将插入到活动工作表之前。c) Count可选,要新建的工作表的数目。默认值为 1。 d) Type可选,指定新建的工作表类型。

    一 : 如果增加一个工作表,可以参考下面的通用代码:

    Sub MyAddsh()

    Dim Sh As Worksheet

    With Worksheets

    Set Sh = .Add(after:=Worksheets(.Count))

    Sh.Name = "MY"

    End With

    End Sub

    代码解析:MyAddsh过程使用Add方法在工作簿中新建“MY”工作表。

    a) 第2行代码声明变量Sh为工作表对象。

    b) 第4行行代码使用Add方法在工作簿的最后新建“数据”工作表。

    c) 第5行代码将添加的工作表重命名为“数据”。

    二 : 如果需要在工作簿中批量添加工作表,可以使用下面的代码。

    Sub MyAddsh_2()

    Dim i As Integer

    Dim sh As Worksheet

    For i = 1 To 8

    Set sh = Sheets.Add(after:=Sheets(Sheets.Count))

    sh.Name = i

    Next

    End Sub

    代码解析:MyAddsh_2过程使用For...Next 语句和Add方法在工作簿中添加8张工作表并将添加的工作表依次重命名。

    三 : 使用Delete方法可以删除工作表,应用于工作表对象的Delete方法删除指定的对象。

    语法如下:expression.Delete

    参数expression是必需的,该表达式返回“应用于”列表中的对象之一。在删除工作表时会有一个系统提示,在必要的时候要避免这个提示,如何编写这个代码呢?可以看下面的部分。

    四 : 添加和删除工作表的通用方法,在运行添加工作表代码前先删除工作簿中的工作表虽然可以避免同名错误,但也可能误删除有用的工作表,因此更为严谨的方法是在添加前先判断工作簿中是否存在相同名称的工作表,然后再进行下一步的操作。

    Sub MyAddsh_3()

    Dim sh As Worksheet

    For Each Sh In Worksheets

    If Sh.Name = "MY" Then

    MsgBox "工作簿中已有""MY""工作表,将删除原存在的工作表"

    Application.DisplayAlerts = False

    Worksheets(Worksheets.Count).Delete

    Application.DisplayAlerts = True

    EXIT FOR

    End If

    Next

    With Worksheets

    Set sh = .Add(after:=Worksheets(.Count))

    sh.Name = "MY"

    End With

    End Sub

    代码解析:MyAddsh_3过程是先检查工作表中是否含有“MY”工作表,如果有,立刻删除,最后使用Add方法在工作簿中新建“MY”工作表.

    a) For Each…. Next…. 将遍历工作表,检查原工作表中是否含有“MY”的工作表。

    b) MsgBox "工作簿中已有""MY""工作表,将删除原存在的工作表" 如果有“MY”的工作表,首先要弹出一个对话框,告知有这个工作表,讲删除。

    c) Application.DisplayAlerts = False 将关闭弹出的警告对话框。

    d) Application.DisplayAlerts = True 将打开弹出的警告对话框。

    e) Worksheets(Worksheets.Count).Delete 删除原有的工作表。

    f) Set sh = .Add(after:=Worksheets(.Count))

    sh.Name = "MY"

    添加一个新的工作表,工作表的名称为"MY"

    下面看代码的实测,代码截图:

    工作表界面截图:

    运行后首先出现下面的对话框,删除原来的工作表,之后再新建一个工作表。

    今日内容回向:

    1 ADD方法的意义是什么?

    2 DELETE方法的意义是什么?

    3 Application.DisplayAlerts 的意义是什么?

  • ?

    Excel如何用VBA自动合并同目录下的多个excel工作簿文件

    浑夜云

    展开

    在excel的使用过程中,有时候我们需要将同目录下有着相同标题的多个excel工作簿合并到一个excel工作簿中,比如下面这种情况,5个年级的学生名单合并到一个表里面去。

    常用的做法是手工打开每个文件,复制粘贴到学生名单汇总一个表里去。

    这里介绍一个偷懒的方法,用VBA代码自动合并。代码分4段,第1段是主代码,后面3段是自定义函数。建议把代码复制粘贴到个人工作簿的模块里,方便调用。打开学生名单汇总.xlsx ALT+F8运行该代码。

    以下是具体代码,复制粘贴

    Sub 同目录下合并多个excel工作簿()

    'On Error Resume Next '// 发生错误,自动执行下一句,就是忽略错误

    Application.ScreenUpdating = False '//关闭屏幕刷新

    Application.DisplayAlerts = False '//关闭系统提示

    t = Timer '//开始时间

    Set SH0 = ActiveWorkbook.Worksheets(1)

    SH0.Cells.Clear '//清空保存区域,全部数据第一行是标题行,且只占一行,无合并单元格

    ARR = FileAllArr(ActiveWorkbook.Path, "*.xlsx", ActiveWorkbook.Name, False) '//详见函数说明

    SHName = "sheet1" '//要求所有工作簿内需要统计的工作表名称相同,

    For i = 0 To UBound(ARR)

    Str_coon = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ARR(i) '//Excel2007

    ' Str_coon = "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=yes';data source=" & & ARR(I) '//OFFICE2003,根据情况选择

    StrSQL = "SELECT *,'" & GetPathFromFileName(ARR(i), False) & "' AS 来自工作簿 FROM [" & SHName & "$]" '//SQL语句自己发挥吧,这里是精髓。

    IROW = SH0.Range("A1048576").End(3).Row + 1

    If IROW <= 2 Then

    IROW = 1

    Crr = GET_SQLCoon(StrSQL, Str_coon, True) '//第一次,带上标题

    Else

    Crr = GET_SQLCoon(StrSQL, Str_coon, False)

    End If

    SH0.Range("A" & IROW).Resize(UBound(Crr, 1) + 1, UBound(Crr, 2) + 1) = Crr '//粘贴查询结果

    Next

    Application.ScreenUpdating = True '//恢复屏幕刷新

    Application.DisplayAlerts = True '//恢复系统提示

    MsgBox "汇总用时:" & Format(Timer - t, "#0.0000") & " 秒", , "北极狐提示!!" '//提示所用时间

    End Sub

    Rem 下面是为方便整理的自定义函数,上面的代码执行必不可少哟!!

    '*******************************************************************************************************

    '功能: 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)

    '函数名: FileAllArr

    '参数1: Filename 需查找的文件夹名 不含最后的"\"

    '参数2: FileFilter 需要过滤的文件名,可省略,默认为:[*.*]

    '参数3: Liwai 剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name

    '参数4: Files 是否只要文件夹名,可省略,默认为:FALSE

    '返回值: 一个字符型的数组

    '使用方法:arr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name,false)

    '*******************************************************************************************************

    Public Function FileAllArr(ByVal Filename As String, Optional ByVal FileFilter As String = "*.*", Optional ByVal Liwai As String = "", Optional ByVal Files As Boolean = False) As String()

    Set Dic = CreateObject("Scripting.Dictionary") '创建一个字典对象

    Set Did = CreateObject("Scripting.Dictionary")

    Dic.Add (Filename & "\"), ""

    i = 0

    Do While i < Dic.Count

    Ke = Dic.keys '开始遍历字典

    MyName = Dir(Ke(i), vbDirectory) '查找目录

    Do While MyName <>""

    If MyName <> "." And MyName <> ".." Then

    If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then '如果是次级目录

    Dic.Add (Ke(i) & MyName & "\"), "" '就往字典中添加这个次级目录名作为一个条目

    End If

    End If

    MyName = Dir '继续遍历寻找

    Loop

    i = i + 1

    Loop

    Dim arrx() As String

    i = 0

    If Files = True Then '//是否只输出文件夹名

    For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例

    ReDim Preserve arrx(i)

    If Ke <> Filename & "\" Then '//自身文件夹除外

    arrx(i) = Ke

    i = i + 1

    End If

    Next

    FileAllArr = arrx

    Else

    For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例

    MyFileName = Dir(Ke & FileFilter) '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx

    Do While MyFileName <>""

    If MyFileName <> Liwai Then '排除例外文件

    ReDim Preserve arrx(i)

    arrx(i) = Ke & MyFileName

    i = i + 1

    End If

    MyFileName = Dir

    Loop

    Next

    FileAllArr = arrx

    End If

    End Function

    '****************************************************************

    '*'****************************************************************************************************

    '函数: GetPathFromFileName 根据全路径获得文件名

    '参数1:strFullPath 完整路径

    '参数2:kzm true 返回字符串含扩展名

    '参数3:strSplitor 各级文件夹分隔符

    '作用: 从完整路径获取返回: 文件名(true带扩展名)

    '使用方法: msgbox GetPathFromFileName("C:\windows\text.txt",true)

    '*'****************************************************************************************************

    Public Function GetPathFromFileName(ByVal strFullPath As String, Optional ByVal kzm As Boolean = True, Optional ByVal strSplitor As String = "\") As String

    Dim FileName1 As String

    Dim FNAME As String

    FileName1 = Left$(strFullPath, InStrRev(strFullPath, strSplitor, , vbTextCompare))

    FileName1 = Replace(strFullPath, FileName1, "")

    If kzm = False Then

    GetPathFromFileName = Left(FileName1, InStr(FileName1, ".") - 1)

    Else

    GetPathFromFileName = FileName1

    End If

    End Function

    '*'****************************************************************************************************

    '*****************************************************************************************

    '函数名: GET_SQLCoon

    '函数功能: 获得指定SQL的查询结果,自定义连接字符串,可以连接各种数据库

    '返回值: 返回一个二维数组

    '参数1: StrSQL 字符类型 SQL查询语句

    '参数2: Str_coon 字符类型 数据库连接语句

    '参数3: Biaoti 可参数选 是否输出标题,默认带有标题

    '使用方法: Arr = GET_SQLCoon(StrSQL,Str_coon,true)

    ' Arr(0,1) '//数组第一行为标题行,从i=1 开始是数据

    ' Sh2.Range("A2").Resize(UBound(ARR, 1) + 1, UBound(ARR, 2) + 1) = ARR

    '*****************************************************************************************

    Public Function GET_SQLCoon(ByVal StrSQL As String, ByVal Str_coon As String, Optional Biaoti As Boolean = True) As Variant()

    On Error Resume Next ' 改变错误处理的方式。

    Dim Cn, RS

    Err.Clear

    Set Cn = CreateObject("Adodb.Connection") '//新建一个ADO连接

    Set RS = CreateObject("adodb.recordset")

    Cn.Open Str_coon

    RS.Open StrSQL, Cn, 1, 3

    If RS.RecordCount > 0 Then '//如果找到数据

    If Biaoti = True Then

    ReDim ARR(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)

    For a = 0 To RS.Fields.Count - 1 '//导入标题

    ARR(0, a) = RS.Fields(a).Name

    Next

    For i = 0 To RS.RecordCount - 1 '//导入数据

    For a = 0 To RS.Fields.Count - 1

    ARR(i + 1, a) = RS.Fields(a).Value

    Next a

    RS.MoveNext

    Next

    Else

    ReDim ARR(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)

    For i = 0 To RS.RecordCount - 1 '//导入数据

    For a = 0 To RS.Fields.Count - 1

    ARR(i, a) = RS.Fields(a).Value

    Next a

    RS.MoveNext

    Next

    End If

    Else '//如果没有找到数据

    ReDim ARR(1, 1)

    ARR(0, 0) = ""

    End If

    GET_SQLCoon = ARR

    Cn.Close '//关闭ADO连接

    Set RS = Nothing

    Set Cn = Nothing '//释放内存

    End Function

    '*****************************************************************************************

  • ?

    其实我想说,Excel VBA学习的最快方法就是借鉴,没有之一

    落斜阳

    展开

    如果您已经掌握了Excel VBA的基本概念和简单语法,需要快速提高技术水平,以便可以早日完成各种简化工作的小程序,甚至能够编制功能强大的报表系统。

    于是,但凡有教程自称为“秘籍”或“宝典”的,都会引发大家的无限遐想。因为在各种武侠小说中,某人物因为一本(甚至只是几页)武学秘籍而改变命运、屌丝逆袭的经典桥段实在太多了,让人无限向往。但是,如果冷静分析一下前后情节,您就可以了解到这样的三个事实。

    对应这三条,我们来看看Excel VBA这门武功如何。

    如果要对Sheet1的A1:A100单元格区域进行汇总,按组合键就可以了,手快只需要0.1秒。如果每天要对1000个工作簿的Sheet1的A1:A100单元格区域进行汇总,那么只会自动求和的绝顶高手就想跳楼了。可是对于学习过VBA的人来说,几行代码就可以解决问题。

    在信息时代,技能学习信息只有过剩没有限制。即对于多数学科、技能,只要你想学习,教材是永远不缺的,老师也非常容易找。以前都是“收徒弟”,现在基本上是“收师傅”了。

    想学有所成,时间和精力是必需的,从古至今皆如此。当然,我很期待有一天能像《骇客帝国》里那样学习技能——直接下载到大脑里就行了。

    这么一分析,我刚才说的“快速提高”岂非奢望而已?那也未见得。首先,教材虽多,却有良莠之分,有适合之分,选择适合自己的优秀教材,那么就能快人一步。其次,注重学习方法,循序渐进,将有限的学习时间投入到最有价值的学习环节中,学习过程中少走弯路,那么又能快人一步。有了这两个基础,再辅以必要的学习时间,那么必能事半功倍,获得“快速提高”了。

    谈到循序渐进,在Excel VBA学习之路上具体应该怎么做呢?下图内容是值得参考的阶段性指标和学习重点。

    “拿来主义”很流行,也很有效,而且绝不丢人。所以,看懂别人的代码,然后修改之,变为自己的代码,这是一种能力。先啃小段的代码,再研究完整的程序,逐步提高。顶尖的编程高手通常都有自己的代码库,几乎所有的新程序都是从代码库中调取所需的模块修改后搭建而成的,而绝不是从头一行一行写出来的。高手们平时很重要的工作就是维护好自己的代码库。

    本书一个很重要的使命就是成为学习者的代码库,所有的代码都可以拿来即用。对于学习者来说,花时间去多读、读懂代码,是实现快速提高水平的保障。

    当然,我们鼓励“拿来主义”,可不是在教您如何“抄袭软件”。我们只能学习他人分享的代码,或者是教材上的代码。您不可以打着学习的幌子,破解别人的软件,而且还把作者写成您自己。

    最后,祝大家学习愉快。

  • ?

    1个案例教你学会Excel中的VBA

    秦如波

    展开

    可能很多朋友不知道Excel中VBA的用途。那什么是VBA呢?

    一句话概括:在Excel中想实现什么功能,就可以用VBA语言编写一段程序去完成。

    今天通过例子带大家了解Excel中的VBA!

    软件说明:Excel 2010版本

    场景再现:表格中点击按钮,向单元格E1中输入数字 “233”,并且能够实现清除!

    第一步、打开编写VBA代码的窗口

    在Excel表格中编写VBA的窗口叫VBE编辑器,有两种打开的方法。

    在工作表标签上右键 - 查看代码按Alt+F11

    第二步、创建写VBA代码的地方

    有朋友肯定会问:“我没学会编程怎么办?”、“我都没见过代码能行吗?”;别急!我的回复是肯定的!

    在哪编写代码呢?有好几种方式,今天先学最常用的:“插入” - “模块”。新建一个模块用来存放编写的代码;记住:修改模板的名称:我的VBA模板【如下图虚线标注】

    第三步、开始写代码

    新建模板后,在右侧的空白位置就是编写代码的地方。可以执行的VBA代码,结构是这样的:

    Sub 程序名(参数)可以执行任务的代码End Sub

    因为例子中我要进行输入与清除的操作,输入Sub 程序名()然后回车,End Sub就会自动输入;如下图:

    在开始和结束语句之间输入代码,执行在单元格A1中输入数字"233"

    Range("E1") = 123

    备注:在VBA中,Range("单元格地址")来表示单元格。在单元格中输入值,直接用=值 即可(字符串两边要加双引用),如果清空则 =""。

    再编写一段清空代码:

    第四步、测试运行代码

    在编写代码时经常要测试是否正确。测试方式是把光标放在代码行的任意位置【下图中“测试按钮”的位置】,点击运行小按钮进行测试;同样清空代码也一样。

    第五步、点击按钮执行VBA代码

    在Excel中插入的图形、图片、按钮控件都可以执行VBA代码。让它们执行很简单,点击“插入” - “矩形” - “指定宏”

    只需要右键菜单中点击指定宏 - 选取编写的宏名称,选择“输入”,添加输入按钮。

    同样添加清除按钮:

    当然自己可以调整字体的颜色、字体,让其变得更加美观!

    此时,通过VBA设置的输入“233”,并可以点击清除!

    第六步、保存VBA代码

    此时的VBA代码应该是既有输入代码又有清空代码;最后需要保存为“启用宏的工作簿"类型【注意下图中虚线框标注】,VBA代码才能保存下来。

    好了!今天的分享就到这里,是不是感觉VBA也没有想象的那么难?

    赶快转发、关注吧,更多技巧尽在头条号中!

vba导入excel

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP