首页 > 其他分享 >基础知识内容

基础知识内容

时间:2024-09-03 20:35:51浏览次数:5  
标签:end sub -- 基础知识 application range 内容 数组

基础知识预览

if 语句

  • 注意结合 and 和 or

句式1

if con1 then
    pass
elseif con2 then
    pass
elseif con3 then
    pass
elses
    pass
end if 

句式2

if con then
    pass
else
    pass
end if

句式3+句式4

if con1 then result1
if con1 then result_Y else result_false

for循环

  • 注意和 step 调整步长;

  • 注意 exit for 可以结束循环;

句式1
for i = 1 to 2 step 2
    pass
next
句式2 for i= 20 to 1 step -1 pass next
句式3 for each rng in range("a1:a100") pass next

 

工作簿

  • 注意常用的方法;open, save , saveas, close

    dim sht as worksheet 注意,只有声明了变量之后加点才会有对应的提示方法出来;

  • 注意关闭刷新和警告,最后需要开启;

    application.screenupdating = False 关闭屏幕刷新;
    application.displayalert = False 关闭警告提示;

    application.screenupdating = True 开启屏幕刷新;
    application.displayalert = True 开启警告提示;

    示例:

    sub test()
       application.screenupdating = False
       application.displayalter = False
       
       workboks.open filename:= "d:\123.xlsx"
       activeworkbook.sheets(1).range(“a1”) = "到此一游"
       
       activeworkbook.save
       activeworkbook.close
       
       application.screenupdating = True
       application.displayalter = True

    end sub

工作表

  • 搞清楚 对象,属性 ,方法

    对象是 工作簿,工作表,单元格,变量需要用set赋值;

    属性就是本身自由的特性,例如 名称,颜色;

    方法 就是可以针对对象做的动作; add, close, move;

  • 常用的方法属性:

    • after/before

    • count

    • select

    • delete

    • copy

    • name

示例

sub 一表拆多文件()
   dim sht as worksheet
   for each sht in sheets
   sht.copy '利用copy的方法特性,直接复制成独立的表格
   
   activewokrbooks.saveas filename:= "d:\data\" & sht.name & ".xlsx"
   activeworkbook.close
   
next
end sub

单元格

单元格表示

[a10] -- 不支持变量

cells(10,1)

range("a10")

range("a10").value 一般情况默认.value, 如果没有定义变量,直接引用的话不会默认,因为系统不能识别具体类型;

range("a1").offset(10,0)

range("a10").end(xlup)

range("a10").entirerow

range("a10").resize(1,10)

range("a10").copy

注意日常应用的知识点:

  • call + 过程名 调用另一个过程;

  • msgbox "你好" -- 弹出引号中的内容,作为提示;

  • inputbox, 如果不赋值给变量,就直接用 inputbox "" , 如果赋值给变量要添加括号 i= inputbox("请输入内容")

  • 批量建表时候,回避表 重名的问题;

  • 批量粘贴时,考虑用筛选然后粘贴;

sub test()
  ActiveSheet.Range("$A$1:$B$3").AutoFilter Field:=1, Criteria1:="加拿大"
  Selection.AutoFilter '取消筛选
end sub

拆分单元格注意事项:

  1. 输入i 列拆分i列;

  2. 避免重名,先把无意义的表格删除。注意停止删除警告,删除完成后恢复;

  3. 根据列拆分单元格;注意用cells(l,i)代替 range()

  4. 筛选,复制,粘贴;

程序事件

工作簿事件--thisworkbook

工作表事件--在对应的sheets中添加;

程序事件,可以在事件过程中直接写代码;也可以在标准模块中写好代码,然后通过call 调取过程;

公式

instr() - num = instr(abc,"D") 有返回索引,没有返回0;

split()

on error resume next 遇到错误跳过继续执行;

isnumeric() 是否是数字

val() 返回包含于字符串内的数字,字符串中是一个适当类型的数值。

引用公式有两种方式:引用Excel自带的公式,引用vba函数

  • 引用Excel自带的公式:

application.workfunction.函数名;
  • 引用vba函数;

vba.函数    或者  vba.可以省略
  • 自定义函数

function 函数名(参数)
函数名 = (代码过程)
end function

注意:
自定义函数必须在标准模块中;
自定义函数可以再excel中直接调用,也可以再sub过程中直接调用;
在工作表中调用vba函数,可以把vba函数添加进参数自定义函数中,然后调用;
function jqzf(str1,str2,i)
jqzf = split(str1,str2)(i-1)
end function

带参数的过程,需要被调用才能执行;
带参数的函数,需要给函数传入值才能调用;

加载宏

加载宏设置4步骤:(写入代码,放入加载库中,打钩,放入快速访问工具栏)

  1. 编辑好代码;

  2. 新建空白excel,把代码拷贝至该文件的标准模块中,另存为 加载宏的 .xla 加载宏 .xlam

  3. 开发工具--加载宏--在刚才保存的文件名钱打钩;

  4. 关闭工作表,然后重新打开。 文件--选项--快速访问工具栏--下拉框 宏--添加到快速访问工具栏即可;

将对象赋值到变量

利用set, 将 工作簿、工作表、单元格赋值到变量;

dir函数验证是否存在某个文件;多值符合时候,取值如下;

str=dir() --第一次取值;
str=dir 第二次取值,取到的是匹配的第二个值;

日常用的场景:多文件合并; 多个文件每个文件一张表; 多个文件,每个文件若干个表; 合并后命名;

sub shshi()
dim str1 as string
dim wb as workbook

str1 = dir("d:\工作项目\*.xlsx")
for  i = 1 to 100
if str1="" then
exit for
end if
set wb = workbooks.open("d:\工作项目\" & str1)
"该干啥干啥;"
wb.close
str1 = dir
next

end sub

数组

涉及内容:

  • 什么是数组;

  • 如何定义数组;

  • 动态数组和静态数组;

  • 计算数组的大小lbound和ubound

  • 重新定义数组 redim [preserve] arr(10)

如何把区域赋值给数组--不用定义大小,直接赋值; arr = range("a1:a10")

数组的维度;

给数组赋值和取值;

把表格横着的一维区域放到数组中得到的是二位数组;

dim arr() 
range("a1") = arr(2,1)
arr = range("a1:a10") --把区域赋值给数组;

dim arr(10,2) --定义数组
ubound(arr) 和 lbound(arr) --数组上标和下标

redim [preserve] arr(10)  --重新定义数组
使用数组的优势--效率高,节省时间 

timer 取时间

goto 100 分支流程

控件

控件是 表格中的控件

按钮 commandbutton: enabled, caption,visible

标签 Lable: enabled,caption,visible

单选按钮 optionbutton: caption, enabled, groupname,value,visible

微调按钮 spinbutton: enabled, value, visible,min, max 通过写入 change 事件写入

所有的东西组合在一起,一定要注意逻辑的缜密;

窗体

通用属性

enabled
caption
visiable
showmodal

show
hide
文本框 textbox:  enabled, value, visiable, passwordchar, tabindex
复选框 checkbox: enabled, value, visiable,
list数据源列表;
additem ,添加一个下拉项目
removeitem, 移除一个项目;
clear,清空列表;
列表框控件 listbox: enabled, value, visible ,
columncount 列,
list 数据源列表;
additem ,添加一个下拉项目
removeitem, 移除一个项目;
clear,清空列表;

用户信息交互

msgbox

msgbox(提示文字,按钮类型,标题文字,帮助文件,帮助文件索引) 
有返回值,对应的按钮类型;

inputbox

application.inputbox --可以自行选择单元格

inputbox(提示文字,标题文字,默认值,左边距,上边距,帮助文件,帮助文件索引,输入类型)

application.getopenfilename

application.getopenfilename("Excel文件,*.xls*")
application.getopenfilename("Excel文件,*.xls*,word,*.html",1,"快特么的选",”确定“,False)

application.getopenfilename("类型1名,.后缀,类型2名,.2后缀",用数字表示哪个值作为默认值,标题,”“,是否多选)

getopenfilename 选择后返回文件完整路径,如果是多选,得到的返回值是所有路径的数组,而且下标是从1开始的;循环遍历操作对应的文档;
操作excel中所有的对话框 application.dialogs

ADO通道

四步走:

  1. 添加工具: 工具-引用- Microsoft ActiveX Data Objects 6.1 library

  2. 创建连接,并打开数据库

    dim conn as new ADODB.Connetion

    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\123.xlsx;Extended Properties=""excel 12.0;HDR=YES"""
  3. 增删改查;

    sql = "select * from [Sheets$]"
    range("a1").copyFromRecordset conn.Execute(sql)
  4. 关闭

    conn.close

代码示例:

sub test()
' 工具-引用- Microsoft ActiveX Data Objects 6.1 library
dim conn as new ADODB.Connection
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\123.xlsx;Extended Properties=""excel 12.0;HDR=YES"""

sql = "select * from [Sheets$]"
range("a1").copyFromRecordset conn.Execute(sql)
conn.close
end sub

思路:

可以把查询结果放到表格中;

可以把查询结果放到数组中;

知识点:

  • excel 文件,必须要添加扩展代码;extended properties="excel 12.0;HDR=YES" ,其他的文件不需要

  • 只有excel文件中的表格需要添加美元符合; 其他不需要;

  • 在excel中无法执行删除语句 delete; 其他文件可以;

  • 注意vba 中多重引号的添加: msgbox "一个叫““张三””的人"

关于shape大家族

图形,图片,表单控件;

shapes 依存于sheet ,所以shapes 句柄要有sheet作为依附;

sheet3.range("a" & i ) = shp.name
sheet3.range("b" & i ) = shp.type
sheet3.range(“C” & i ) = shp.topleftcell.address  

根据姓名插入图片

shp.addpicture "name",msoCTrue,msoFalse,20,20,400,400
当对象赋值变量的时候,这个后边的参数需要用括号括起来,并且变量的前面要加 set;

set shp1 = shp.addpicture("name",msoctrue,msofalse,20,20,400,400)

重命名文件 name 文件路径+名称 as 文件路径+名称;

name "c:\123.xlsx" as "c:\新建文件夹\456.xlsx"

like+通配符

*,任意字符;
?,一位字符;
#,表示任意数字;
!, 表示非逻辑;
[A-Z],表示大写字母中的任意一位;
[A-Za-z],任意字母;
[0-9],数字;
[!A-Z]非大写字母;
[!0-9]非数字;

触类旁通

private sub--私有过程,可以再内部跨过程调用;

public sub --共有过程,默认的;可以跨模块调用;

public i 慎用,可以用自定义函数调用来取代;

类模块的理解;

类模块.方法

类模块.属性

public property get fadg() as variant

end property
do while 条件

loop

学习vba的三靠

靠帮助;
靠录制宏;
靠猜测;

字典

sub test()
set dict1 = createobject("scripting.dictionary")

dict1("szd") = 1'赋值,更改;
dict1("szd2") = 2
dict1("szd3") = 3

a = dict1.keys '调用keys数组;
b = dict1.items '调用items数组

dict1.remove("szd3") '移除
end sub

正则表达式

sub test()
set regex = createobject("vbscript.regexp")

abc = "szdgadgadadgakg啊拿冠军阿214嘎435啦果aga"

regex.global = True
regex.pattern = "\d"

set abt = regex.execute(abc)
a = abt.count
b = abt.item(0)
end sub

with简化;

sub test()
set regex = createobject("vbscript.regexp")
with regex
.global = True
.pattern = "\d"
end with
abc = "szdgadgadadgakg啊拿冠军阿214嘎435啦果aga"

set abt = regex.execute(abc)
a = abt.count
b = abt.item(0)
end sub

取指定字符串中间的部分

sub 固定字符串中间的部分()
dim str1 as string
set regex = createobject("vbscript.regexp")
str1 = "sagja gagagalkgjag 案件刚刚 agaklgjag 爱干净啊 gagja gljaglakjgaljg 2325h"

with regex
.global = True
.pattern = "sagja gagagalkgjag (.*?) agaklgjag 爱干净(.*?) gja gljagla(.*?) jg 2325h"
end with

set ttt = regex.execute(str1)
ttter = ttt(0).submathes(1)
end sub
 

 

标签:end,sub,--,基础知识,application,range,内容,数组
From: https://www.cnblogs.com/szd001/p/18395414

相关文章

  • C++入门基础知识48——【关于C++函数】之Lambda 函数与表达式
    成长路上不孤单......
  • 2024年大选:营销人员需要了解的内容
    根据eMarketer的数据,到2024年,美国政治广告支出将超过120亿美元,创下新高,而相比之下,2016年支出仅为42.5亿美元。因此,随着2024年总统选举的临近,市场营销人员越来越关注这一重大事件将如何影响他们的广告策略。尽管未来仍然不确定,我们已经汇总了关键的见解和建议,帮助您在未来几个......
  • php获取FTP服务器中文件内容返回给前端
    有一个需求是访问存储在群辉SynologyNAS上的图片,https://ip:port/path/to/image.jpg,用浏览器打开会出现“您的连接不是私密/安全连接”错误。网上检索资料发现可能是因为缺少SSL证书的关系。引用https://www.cloudflare-cn.com/learning/ssl/connection-not-private-explaine......
  • 在 PbootCMS 首页上调用公司简介等单页内容
    在PbootCMS首页上调用公司简介等单页内容在PbootCMS中,可以在首页或其他页面上调用特定的单页内容,如公司简介。以下是如何使用标签 {pboot:content} 来调用单页内容的具体方法:示例代码html {pboot:contentid=1}[content:contentdrophtml=1dropblank=1len=300m......
  • PCB表面工艺别乱选!这些内容硬件工程师必须了解
    各位硬件工程师在打板时时常会遇到表面处理工艺的选择问题,有的在纠结如何选择,有的在纠结自己选择好的表面工艺价格感到震惊。那么该如何选择适合你的PCB表面处理工艺呢?为确保你的PCB具有良好的可焊性和电气性能,表面处理工艺是很有必要的,日常,我们所提供可选择的表面处理工......
  • 博客内容规范
    [宇宙声明:博主原创文章,转载请说明出处,但是不说我也管不了你......
  • Python机器学习:基础算法与实战-内容介绍
    1:《Python机器学习:基础算法与实战》内容简介本书基于 Python 语言,结合实际的数据集,介绍了机器学习算法以及数据分析方法的应用。本书主要包含两部分内容,第一部分为 Python 机器学习入门知识:主要介绍了 Python 基础内容、Numpy与Pandas 库数据操作、Matplotlib 与Seaborn......
  • Redis基础知识学习笔记(三)
    文章目录Redis命令一.Redis命令1.启动redis服务器2.本地启动redis客户端3.远程启动redis客户端4.测试是否建立连接二.Redis键(key)RedisKey相关命令三.Redis字符串(String)Redis字符串命令四.Redis哈希(Hash)Redis字符串命令五.Redis列表(List)Redis列表命......
  • springboot多媒体内容管理系统-计算机毕业设计源码08580
    摘 要随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个多媒体内容管理系统(CMS)的设计与优化来管理多媒体内容信息,会使管理工作系统化、规范化,提高管理效率。本课题的研究对象是多媒......
  • C语言指针(进阶内容)
    目录1.指针的基本概念:2.不同类型的指针的意义是什么?3.野指针是什么?4.指针加减整数 5.指针运算(指针-指针)6.一级指针和二级指针以及多级指针是什么意思?7.指针数组8.数组指针9.函数指针1.指针的基本概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空......