Excel VBA使用总结

article/2025/11/11 5:27:54

Excel VBA

  • 1.入门
    • 1.1开启VBA之旅
  • 2.语法
    • 2.1清除单元格内容
    • 2.2vba设密码
    • 2.3以前的代码
    • 2.4使用正则
    • 2.5使用stack

都说世界上最好的语言就是PPT,工作报告,年度总结。。。。
到处都有它的身影,更是被高手设计的惟妙惟肖。
今天,我们不争第一,勇夺第二。

还在为设计报表而发愁吗,还在为统计数据而苦恼吗,今天,它来了,它跳着芭蕾走来了(一片稀稀落落的掌声),有个大神说,Excel除了不能给你生孩子,就没有它搞不定的,这????

1.入门

Excel VBA官方文档: Office Visual Basic For Application Document.

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,也可说是一种应用程式视觉化的Basic脚本。
 vba的好处:1.规范用户操作,控制用户的操作行为2.操作界面人性化,方便用户操作3.自动化办公,可以将多个步骤的手工操作通过一步来实现4.Word和ppt里面也可以用vba来操作 5.实现一些vb无法实现的功能6.用vba制作excel登录系统7.利用vba可以excel内轻松开发功能强大的自动化程序

1.1开启VBA之旅

在这里插入图片描述首先,普及一下基础知识
在这里插入图片描述每层关系都是有上限的
在这里插入图片描述

2.语法

语法没有太多要讲的,不懂自己就录制宏,然后再修修改改。

Option Explicit種竡琌祘Α家舱い眏–祘Α家舱跑计常ゲ斗絋Ч俱㎝﹚竡ㄤ嘿,絛瞅籔.
还真的乱码了,留着做个纪念Option Explicit 的意义1.在程式模组中强迫每个在程式模组里的变数必须明确完整的宣告和定义其名称,范围和类型2.并且可以避免打错变数或在有效范围内设定两个相同的变数名称

2.1清除单元格内容

Sub clearContent(xlWorkbook As Workbook)Dim tableCount As IntegerDim columnCount As IntegerDim xlWorksheet1 As WorksheetDim xlWorksheet2 As WorksheetDim i As IntegerDim j As Integer//TableInfo 就是某一页的名字Set xlWorksheet1 = xlWorkbook.Sheets("TableInfo")Set xlWorksheet2 = xlWorkbook.Sheets("ColumnInfo")tableCount = xlWorksheet1.[B65535].End(xlUp).RowcolumnCount = xlWorksheet2.[B65535].End(xlUp).RowWith xlWorksheet1For i = 4 To tableCountFor j = 2 To 30.Cells(i, j).Value = ""Next jNextEnd WithWith xlWorksheet2For i = 4 To columnCountFor j = 2 To 50.Cells(i, j).Value = ""Next jNextEnd With
End Sub

2.2vba设密码

乱码问题很恶心,我也没解决,最后就是都用英文
如果打开excel,就要启动的方法,都放在这里

在这里插入图片描述

Private Sub Workbook_Open()Worksheets("TemplateVersion").Activate'lock tableInfo function introductionThisWorkbook.Sheets("TableInfo").SelectActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFormattingRows:=True, Password:=8888ActiveSheet.EnableSelection = xlUnlockedCells'lock columnInfo function introductionThisWorkbook.Sheets("ColumnInfo").SelectActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFormattingRows:=True, Password:=8888ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

2.3以前的代码

很多都不记得了,这是留给我自己看的,谢谢

Option Explicit'TableInfo max count
Const MAX_ITTABLE_LEN = 5000
'ColumnInfo max count
Const MAX_TABLECOL_LEN = 5000
Const MAX_COL_NUMBER = 1000
Const MAX_SOURCE_COLUMN_NUM = 100
Const PGM_PASSWORD = "zaq12wsx"
Dim columnInfoCollection As Collection
Dim BlankCollection As Collection
Dim ISACollection As Collection
Dim TableInfoRowErrCollection As Collection
Dim ColumnInfoRowErrCollection As CollectionType SYSTEM_TBLSystem As StringTable As StringType As StringCondition As StringColumnCheck As Boolean
End TypePublic Type StackStructSize As IntegerPointer As IntegerMaxElementCount As IntegerElement() As Integer
End Type
'for method 23,get table properties,pk-pk or pks-pk
Sub CHECK_SRC_TYPE_RULE_PUBLIC()Dim xlWorksheet2 As WorksheetDim columnCount As IntegerDim PKCount As IntegerDim FKCount As IntegerDim i As IntegerDim BeginRow As Integer, firstRow As Integer, EndRow As IntegerPKCount = 33FKCount = 34BeginRow = 4Set xlWorksheet2 = ThisWorkbook.Sheets("ColumnInfo")columnCount = xlWorksheet2.[A65535].End(xlUp).RowSet columnInfoCollection = New CollectionWith xlWorksheet2'Construct the ColumnInfoCollection to keep track of every combination of :' 1. SYS_ID+DB_NAME+SCHEMA_NAME+TABLENAME+'PKCount'' 2. SYS_ID+DB_NAME+SCHEMA_NAME+TABLENAME+'fKCount'For i = 4 To columnCountDim fullQualifiedName As StringDim fullQualifiedNameNext As StringfullQualifiedName = .Range("B" & i) & "-" & .Range("C" & i) & "-" & .Range("D" & i) & "-" & .Range("E" & i)fullQualifiedNameNext = .Range("B" & i + 1) & "-" & .Range("C" & i + 1) & "-" & .Range("D" & i + 1) & "-" & .Range("E" & i + 1)If .Range("A" & i) <> "" ThenIf fullQualifiedName <> fullQualifiedNameNext ThenfirstRow = BeginRowEndRow = iBeginRow = i + 1PKCount = Application.WorksheetFunction.CountIf(.Range("M" & firstRow & ":M" & EndRow), "P")FKCount = Application.WorksheetFunction.CountIf(.Range("O" & firstRow & ":O" & EndRow), "<>")columnInfoCollection.Add PKCount, fullQualifiedName & "PKCount"columnInfoCollection.Add FKCount, fullQualifiedName & "FKCount"End IfEnd IfNext iFor i = 4 To columnCountfullQualifiedName = .Range("B" & i) & "-" & .Range("C" & i) & "-" & .Range("D" & i) & "-" & .Range("E" & i)'Check If the collection contains the Key, get value from it iff key existIf Contains(columnInfoCollection, fullQualifiedName & "PKCount") Then.Cells(i, 33) = columnInfoCollection.Item(fullQualifiedName & "PKCount")End If'Check If the collection contains the Key, get value from it iff key existIf Contains(columnInfoCollection, fullQualifiedName & "FKCount") Then.Cells(i, 34) = columnInfoCollection.Item(fullQualifiedName & "FKCount")End IfNext iEnd WithEnd Sub
Sub Check_CDM()Dim Status_Base As BooleanDim Status_Detail As Boolean'   Dim SystemTables(MAX_ITTABLE_LEN) As SYSTEM_TBLDim xlErrSheet As WorksheetDim ctrErrBase As IntegerDim ctrErrDetail As IntegerDim xlWorksheet1 As WorksheetDim xlWorksheet2 As WorksheetApplication.ScreenUpdating = FalseApplication.StatusBar = ""Set xlErrSheet = ThisWorkbook.Sheets("CheckReport")Set xlWorksheet1 = ThisWorkbook.Sheets("TableInfo")Set xlWorksheet2 = ThisWorkbook.Sheets("ColumnInfo")'Call xlErrSheet.Unprotect(PGM_PASSWORD)'Call xlWorksheet1.Unprotect(PGM_PASSWORD)'Call xlWorksheet2.Unprotect(PGM_PASSWORD)调用下面的方法Call Check_CDM_FILE_Initial(ThisWorkbook)Call CHECK_SRC_TYPE_RULE_PUBLIC
End Sub
Sub Check_CDM_FILE_Initial(xlWorkbook As Workbook)Dim xlErrSheet As WorksheetDim xlWorksheet1 As WorksheetDim xlWorksheet2 As WorksheetDim i As IntegerDim j As IntegerDim tableCount As IntegerDim columnCount As IntegerDim errCountTab As IntegerDim errCountCol As IntegerSet xlErrSheet = xlWorkbook.Sheets("CheckReport")Set xlWorksheet1 = xlWorkbook.Sheets("TableInfo")Set xlWorksheet2 = xlWorkbook.Sheets("ColumnInfo")tableCount = xlWorksheet1.[B65535].End(xlUp).RowcolumnCount = xlWorksheet2.[B65535].End(xlUp).RowerrCountTab = xlErrSheet.[B65535].End(xlUp).RowerrCountCol = xlErrSheet.[E65535].End(xlUp).RowWith xlErrSheet' Clean Up the Check Report Header.Cells(2, 3).Value = "No Error".Cells(3, 3).Value = "".Cells(4, 3).Value = ""' Clean Up the Check Report 郎膀セ戈癟(TableInfo)If errCountTab > errCountCol ThenFor i = 8 To errCountTabFor j = 2 To 6.Cells(i, j).Value = "".Cells(i, j).Value = ""Next jNextElseFor i = 8 To errCountColFor j = 2 To 6.Cells(i, j).Value = "".Cells(i, j).Value = ""Next jNextEnd IfEnd WithWith xlWorksheet1'https://access-excel.tips/excel-vba-color-code-list/'color index values for referenceWith .Range(.Cells(4, 2), .Cells(tableCount, 5))' 20.Interior.ColorIndex = 33End WithWith .Range(.Cells(4, 6), .Cells(tableCount, 26))' 20.Interior.ColorIndex = 44End WithWith .Range(.Cells(tableCount + 1, 2), .Cells(tableCount + 5, 26)).Interior.ColorIndex = 44End WithEnd WithWith xlWorksheet2'https://access-excel.tips/excel-vba-color-code-list/'color index values for referenceWith .Range(.Cells(4, 2), .Cells(columnCount, 6))' -4142.Interior.ColorIndex = 33End WithWith .Range(.Cells(4, 7), .Cells(columnCount, 30))' 20.Interior.ColorIndex = 44End WithWith .Range(.Cells(columnCount + 1, 2), .Cells(columnCount + 5, 30)).Interior.ColorIndex = 44End WithEnd WithEnd Sub

2.4使用正则

在VBA的界面要开启RegExp
在这里插入图片描述

Public Type StackStructSize As IntegerPointer As IntegerMaxElementCount As IntegerElement() As Integer
End TypeDim abcCollection As Collection
Dim result As StackStruct
----------------------------------------------------
Sub test1()Dim Reg As New RegExpDim match As ObjectDim matches As ObjectDim str As StringWith Reg.Global = True.IgnoreCase = True.Pattern = "123-([0-9]+)"End Withstr = "321-123-000-123-658-123-789-123-464-123-658"Set matches = Reg.Execute(str)For Each match In matchesDebug.Print match.SubMatches(0)Next match
End Sub

2.5使用stack

来判断括号对称的问题

Option Explicit
Public Type StackStructSize As IntegerPointer As IntegerMaxElementCount As IntegerElement() As Integer
End Type
----------------------------------------------------
' create a stack棧
Public Function CreateStack(StackSize As Integer) As StackStructDim h As StackStructh.Pointer = -1h.Size = 0h.MaxElementCount = StackSizeReDim h.Element(StackSize - 1) As IntegerCreateStack = h
End Function
----------------------------------------------------
' Determines if the stack is empty
Public Function StackEmpty(h As StackStruct) As BooleanStackEmpty = (h.Pointer = -1)
End Function
----------------------------------------------------
' Determines if the stack is full
Public Function StackFull(h As StackStruct) As BooleanStackFull = (h.Size = h.MaxElementCount)
End Function
----------------------------------------------------
'Push the element onto the stack
Public Function Push(ByRef h As StackStruct, Ikey As Integer) As Boolean'if stack full,return FalseIf StackFull(h) ThenPush = FalseExit FunctionElseh.Pointer = h.Pointer + 1h.Element(h.Pointer) = Ikeyh.Size = h.Size + 1End If
End Function
---------------------------------------------------
'將Pops the element off the stack
Public Function Pop(ByRef h As StackStruct) As VariantIf StackEmpty(h) ThenPop = FalseElsePop = h.Element(h.Pointer)h.Pointer = h.Pointer - 1h.Size = h.Size - 1End If
End Function
----------------------------------------------------
Function symmetrical(content As String) As BooleanDim abcd As StringDim arr As VariantDim i As IntegerDim result As StringDim contentLong As IntegerDim stack As StackStructstack = CreateStack(20)contentLong = Len(content)For i = 1 To contentLongresult = Mid(content, i, 1)If (result = "[") ThenIf StackFull(stack) ThenElsestack.Pointer = stack.Pointer + 1stack.Size = stack.Size + 1End IfElseIf (result = "]") ThenIf StackEmpty(stack) Then'Debug.Print "no pair"symmetrical = FalseExit FunctionElsestack.Pointer = stack.Pointer - 1stack.Size = stack.Size - 1End IfElseEnd IfNext'final resultIf StackEmpty(stack) Then'Debug.Print "pair"symmetrical = TrueElse'Debug.Print "no pair"symmetrical = FalseEnd If
End Function
---------------------------------------------------
Sub text9()Dim name As Stringname = "abc][][]"Call symmetrical(name)
End Sub

http://chatgpt.dhexx.cn/article/UK18ckYH.shtml

相关文章

VBA录制宏知识整理

XIWENJIE_VBA基础简介之录制宏 A.录制宏的使用 一、什么是宏 VBA是 [Visual Basic](https://baike.baidu.com/item/Visual Basic)的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是[Microsoft Office](…

excel VBA编程入门,自定义excel数据库模板生成sql语句

文章目录 VBA基础一.了解VBA1.进入vba2.认识宏 二. VBA编程1.hello world2.调出立即窗口和本地窗口3.debug显示4.注释5.数据类型5.变量的生命周期和定义域6.判断语句7.不等于<> , switch case 条件判断8.循环do while退出循环的语句 exit for退出循环的语句 exit do 9.数…

Excel Vba编程初探一

【场景】对EXCEL表格批量添加公式 【分析】 1、如何给单元格写值/公式 2、公式如何带变量 【Excel设置】 【实现】 0&#xff09;代码书写的地方 1&#xff09;代码 Sheet1被激活时触发 Private Sub Worksheet_Activate() Call SetFormula Call TestSetA1ToA10 End Sub函…

二 详解VBA编程是什么

详解VBA编程是什么 直到 90 年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用EXCEL的宏语言来使EXCEL自动化,使用WORD BASIC使WORD自动化,等等.微软决定让它开发出来的应用程序共享一种通用的自动化…

CSS入门(二)

CSS入门&#xff08;一&#xff09; https://blog.csdn.net/Veer_c/article/details/103882856 CSS文本属性和值&#xff1a; <style type"text/css"> div{/*设置字符间距*/letter-spacing:4px;/*设置文本的位置*/text-align:center;/*给文本设置上划/下划/中…

【前端学习】CSS入门

前端学习&#xff1a;CSS入门 文章目录 前端学习&#xff1a;CSS入门前言1、class011.我的第一个CSS2.导入方式3.基本选择器(1)ID选择器(2)标签选择器(3)类选择器 4.层次选择器5.结构伪类选择器6.属性选择器 2、class021.span/div2.字体样式3.文本样式4.超链接伪类5.列表 3、cl…

CSS入门必备基础(适合小白)

CSS入门必备基础&#xff08;适合小白&#xff09; 一、CSS是什么&#xff1f;1、什么是CSS&#xff1f;2、CSS有什么作用&#xff1f; 二、CSS核心基础1、CSS样式规则2、引入CSS的方法1)、行内式2)、内嵌式3)、链入式 2、CSS选择器1)、基础选择器2)、后代选择器3)、并集选择器…

网页搭建入门---CSS入门

目录 CSS基础语法 CSS选择器 选择器 基于关系的选择器 伪类 伪元素 优先级别 CSS样式 背景 文本 ​ 字体 链接 列表 表格 ​ CSS布局 CSS盒子模型 边框 内边距 外边距 CSS基础语法 为什么要使用CSS 样式定义如何显示HTML元素是为了解决内容与表现分离的问…

postcss入门

无需安装任何环境&#xff0c;即可在线体验未来的css生态系统。 一、什么是postcss 一个用 JavaScript 工具和插件转换 CSS 代码的工具&#xff0c;一套css的生态系统&#xff0c;通过组合插件的形式让我们更舒适的编写css。 二、它能做什么&#xff1f; 1.增强代码兼容性 …

CSS基础入门(详细总结笔记)

目录 1、CSS介绍 2、CSS引入方式 2.1、行内样式 2.2、内联样式 2.3、外联样式 2.4、样式的优先级 2.5、样式选择 3、CSS选择器 3.1、基本选择器 3.2、属性选择器 3.3、层级选择器 3.4、组合选择器 3.5、伪类选择器 3.6、通配符 3.7、选择器优先级 4、CSS盒子模…

CSS入门。(仅供参考)

文档出处部分Coogle和《原创》&#xff0c;如有雷同纯属巧合 《仅供参考》 首先说明以下内容是本人自己整理&#xff08;仅供参考&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 首先浏览器我建议使用Googl…

零基础CSS入门教程(17)–表格样式

点此查看 所有教程、项目、源码导航 本文目录 1. 题外话2. 前言3. HTML表格边框4. CSS设定表格边框5. 设定列边框6. 折叠边框7. 表格尺寸8. 表格内边距9. 表格背景色10. 小结 1. 题外话 不知不觉&#xff0c;写到第40篇了。 可能已经是我写过的最长的系列文章了&#xff0c;虽…

一套完整的CSS入门教程

最近花了点时间&#xff0c;整理了一下之前的CSS博客文章&#xff0c;完成了这个CSS教程。也为我的个人网站&#xff0c;增加了一个教程模块。教程模块地址&#xff1a;请点击这里。教程地址&#xff1a;请点击这里。 该教程是一套完整的CSS入门教程&#xff0c;看了绝对不会…

CSS入门基础详解——笔记、案例

CSS入门学习 一、CSS简介 1、什么是css css:层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。 2、CSS的作…

CSS入门 练习

CSS入门 练习 CSS练习1 -- 画三角形CSS练习2 -- 画太极 CSS练习1 – 画三角形 代码&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> <style type"text/css"> #…

头歌-CSS入门

目录 CSS从入门到精通-文本与字体样式 第1关 字体颜色、类型与大小 第2关 字体粗细与风格 第3关 文本装饰与文本布局 CSS从入门到精通-背景样式 第1关 背景颜色 第2关 背景图片 第3关 背景定位与背景关联 CSS从入门到精通-基础选择器 第1关 CSS 元素选择器 第2关 CSS…

CSS入门到精通——表格样式

第1关&#xff1a;表格边框 任务描述 本关任务&#xff1a;在本关中&#xff0c;我们将学习如何使用CSS设置表格样式&#xff0c;使表格更好看。本关任务完成之后的效果图(index.html)如下&#xff1a; 相关知识 为了完成本关任务&#xff0c;请大家认真阅读以下内容。 在之…

Tailwind CSS 入门和实践

作者&#xff1a;康曾璐 背景 Tailwind 是一个基于 Atomic/Utility-First 规范 CSS 框架&#xff0c;提供了基础的工具类 utility classes&#xff08;如&#xff1a;内边距 padding、字体 text 和 font、动画 transition 等预设类&#xff09;&#xff0c;能直接在脚本标记语…

CSS入门

CSS入门学习 一、CSS简介 1、什么是CSS CSS&#xff1a;Cascading Style Sheet 层叠样式表 是一组样式设置的规则&#xff0c;用于控制页面的外观样式 2、为什么使用CSS 实现内容与样式的分离&#xff0c;便于团队开发 样式复用&#xff0c;便于网站的后期维护 页面的精确控…

TailWindCSS入门

上一篇文章我们说过了如何搭建项目以及引入TailWindCSS&#xff0c;这篇文章我们说一下如何使用它&#xff0c;刚看到的时候我对这些缩写感觉很迷茫呀&#xff0c;官网我也没找到如何能知道具体对应的都是撒意思&#xff0c;后面找到一片天比较详细的介绍的文章&#xff0c;认真…