前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >VBA 在 Excel 中的常用操作

VBA 在 Excel 中的常用操作

作者头像
mzlogin
发布于 2020-04-16 08:08:02
发布于 2020-04-16 08:08:02
4.1K00
代码可运行
举报
文章被收录于专栏:闷骚的程序员闷骚的程序员
运行总次数:0
代码可运行

文件操作

引用打开的工作簿

使用索引号(从 1 开始)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Workbooks(1)

使用工作簿名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Workbooks("1.xlsx")

创建一个 EXCEL 工作簿对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dim wd As Excel.Application
Dim wb As Workbook

Set wd = CreateObject("excel.application")
wd.Visible = True
Set wb = wd.Workbooks.Open(ThisWorkbook.Path & "/test.xls")

' ...

wb.Close
wd.Quit

打开/保存/关闭工作簿

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dim wb As Workbook

wb = Workbooks.Open(ThisWorkbook.Path & "/test.xls")

' ...

wb.Save
wb.Close

关闭所有工作簿

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Workbooks.close

另存为(自动打开新文件关闭源文件)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ThisWorkbook.SaveAs FileName:="D:\1.xls"

另存为(保留源文件不打开新文件)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ThisWorkbook.SaveCopyAs FileName:="D:\1.xls"

拷贝文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
oldfile = ThisWorkBook.Path & "/old.xlsx"
newfile = ThisWorkBook.Path & "/new.xlsx"
FileCopy oldfile, newfile

删除文件夹下的所有文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
base = ThisWorkBook.Path & "/文件夹/"
pattern = base & "*.*"
file = Dir(pattern, vbReadOnly)
While file <> ""
    Kill base & file
    file = Dir
Wend

创建文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MkDir(directory)

判断文件夹是否存在

以下为不存在即创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
If Dir(outputDir, 16) = Empty Then
    MkDir (outputDir)
End If

判断文件是否存在

方法 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dim fileSystemObject As Object

Set fileSystemObject = CreateObject("Scripting.FileSystemObject")

If fileSystemObject.FileExists(<filepath>) = True Then
    MsgBox "文件存在"
End If

方法 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dim file As String

file = Dir("E:\MyPictures\Pic\logo.gif")

If file <> "" Then
    MsgBox  "文件存在"
Endif

格式操作

设置边框与自动筛选

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Set Rng = MyWorkSheet.UsedRange
With Rng
    .Borders.LineStyle = xlContinuous
    .Borders.Weight = xlThin
    .AutoFilter
End With

获取或者设置单元格背景色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyWorkSheet.Cells(i, j).Interior.ColorIndex

让某表格选中的单元格变成指定颜色

在 thisworkbook 中添加如下代码段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If ActiveSheet.Name = "yoursheet" Then
        ActiveSheet.UsedRange.Interior.ColorIndex = 0
        Target.Interior.ColorIndex = 6
    End If
End Sub

在单元格里回车 / 换行

设置单元格 Value 里使用 Chr(10)Chr(13),分别表示回车、换行。

隐藏行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyWorkSheet.Rows(i).Hidden = True

单元格内容为纯文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sheet.Cells(m, n).NumberFormatLocal = "@"

选择

引用单元格 / 区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Range("A1") '表示 A1 单元格
Range("A2:D1") '表示 A2D1 区域
Range("A2:D1")(3) '表示该区域里的第三个单元格
Range("D" & i) 'i 为变量
Range("D3:F4,G10") '引用多个区域
Range("2:2") '引用第二行
Range("2:12") '引用第二行到第十二行
Range("D:A") '引用第 ADRows(2) '引用第二行
Rows("2:4") '引用第二到四行
Columns("B")
Columns("B:D")
Range(Clee1, Cell2) '左上与右下
Range(Range1, Range2) '取最大范围

选中单元格 / 区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Range("1:1").Select '选中第一行

获取当前选中区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyWorkSheet.Application.Selection

数据结构

Dictionary

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dim dict
Set dict = CreateObject("Scripting.Dictionary")

' 新增,各种类型都可以,包括 Dictionary
dict.Add "hello", "world"

' 数量
dict.Count

' 删除
dict.Remove("hello")

' 判断是否存在
dict.exists("hello")

' 取值,需要先判断存在再取
dict.Item("hello")

' 修改、新增
dict.Item("hello") = "world"

' 循环
k = dict.Keys
v = dict.Items
For i = 0 to dict.count - 1
    key = k(i)
    value = v(i)
Next

' 清空
dict.RemoveAll

参考:Excel vba map/dictionary

语言基础

String to Integer、Double

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CInt(MyWorkSheet.Cells(1,7))

CDbl(MyWorkSheet.Cells(1,7))

字符串分割/获取数组长度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dim arr() As String
arr() = Split(ws.Cells(a, b).Value, "-")
alen = UBound(arr) - LBound(arr) + 1

判断单元格是否为空

判断单元格的 value 是否为 ““。

退出

主要使用 Exit 表达式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Exit { Do | For | Function | Property | Select | Sub | Try | While }

参见 Exit Statement (Visual Basic)

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012/03/22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java Agent内存马演变历史
在 jdk 1.5 之后引入了 java.lang.instrument 包,该包提供了检测 java 程序的 Api,可以让我们动态修改已加载或者未加载的类,包括类的属性和方法。
JDArmy
2022/11/14
1.6K0
Java Agent内存马演变历史
谈谈Java Agent技术的实现
Java Agent本质上可以理解为一个插件,该插件就是一个精心提供的Jar包,这个Jar包通过JVMTI(JVM Tool Interface)完成加载,最终借助JPLISAgent(Java Programming Language Instrumentation Services Agent)完成对目标代码的修改。
FB客服
2022/11/14
3930
谈谈Java Agent技术的实现
java agent使用与agent内存马
本质是一个jar包中的类,有两种实现,第一种是通过permain()函数实现。这种javaagent会在宿主程序的main函数的启动前启动自己premain函数,这时候会得到一个Instrumentation对象,我们可以通过Instrumentation对象对还未加载的class进行拦截与修改。
红队蓝军
2022/05/17
1.2K0
java agent使用与agent内存马
JAVA安全之Java Agent打内存马
Java Agent是一种特殊的Java程序,它允许开发者在Java虚拟机(JVM)启动时或运行期间通过java.lang.instrument包提供的Java标准接口进行代码插桩,从而实现在Java应用程序类加载和运行期间动态修改已加载或者未加载的类,包括类的属性、方法等,而Java Agent内存马的实现便是利用了这一特性使其动态修改特定类的特定方法将我们的恶意方法添加进去
Al1ex
2025/01/07
1400
JAVA安全之Java Agent打内存马
java agent使用与agent内存马
本质是一个jar包中的类,有两种实现,第一种是通过permain()函数实现。这种javaagent会在宿主程序的main函数的启动前启动自己premain函数,这时候会得到一个Instrumentation对象,我们可以通过Instrumentation对象对还未加载的class进行拦截与修改。
红队蓝军
2022/04/13
1.3K0
java agent使用与agent内存马
99%的Java程序员不知道的Java Instrument-IDEA 破解的原理
Java Instrumentation API 是一个强大的工具,它允许开发人员在运行时修改字节码,而无需重新编译或修改源代码。这对于性能监控、日志记录、安全审计等场景非常有用。本文将深入探讨Java Instrumentation的基础知识,并通过具体的代码示例来展示如何使用-javaagent选项以及premain和agentmain方法来实现一些实用的功能。
井九
2024/10/12
1110
99%的Java程序员不知道的Java Instrument-IDEA 破解的原理
认识 JavaAgent --获取目标进程已加载的所有类
之前在一个应用中搜索到一个类,但是在反序列化测试时出错,错误不是class notfound,是其他0xxx这样的错误,通过搜索,这个错误大概是类没有被加载。最近刚好看到了JavaAgent,初步学习了下,能进行拦截,主要通过Instrument Agent来进行字节码增强,可以进行字节码插桩,bTrace,Arthas 等操作,结合ASM,javassist,cglib框架能实现更强大的功能。Java RASP也是基于JavaAgent实现的。趁热记录下JavaAgent基础概念,以及简单使用JavaAgent实现一个获取目标进程已加载的类的测试。
Seebug漏洞平台
2019/12/16
2.2K0
认识 JavaAgent --获取目标进程已加载的所有类
深入理解Instrument(一)
很早之前就了解到目前主流的APM开源框架如Pinpoint、SkyWalking等等都是通过java.lang.instrument包提供的字节码增强功能来实现的。趁着对这块的热情还没消退,抽时间分析一下java.lang.instrument包的使用方式,记录下来写成一个系列的文章。本系列博文针对的是JDK11,其他版本的JDK可能不适合。
Throwable
2020/06/23
3K0
深入理解Instrument(一)
动态追踪之java agent
上篇文章我们说到阿里的诊断工具Arthas对方法和类的监控使用的是动态追踪技术,本文我们将介绍动态追踪技术Java Agent。
索码理
2022/12/28
9080
动态追踪之java agent
Java Agent(一)、初步认识Instrumentation
Instrumentation 是 Java SE 5 引入的一套 API,它允许开发者在运行时修改类的字节码。Java Instrumentation 可以实现在方法插入额外的字节码从而达到收集使用中的数据到指定工具的目的。Java.lang.instrument包的最大功能就是可以在已有的类上附加(修改)字节码来实现增强的逻辑,它最常见的用途包括:
有一只柴犬
2024/12/10
2210
Java Agent(一)、初步认识Instrumentation
实现一个javaagent需要几步?
在介绍javaagent之前,我想有必要向大家介绍一下JVMTI,因为javaagent是基于这个技术实现的
tnt阿信
2021/11/11
7870
实现一个javaagent需要几步?
探秘Java:“润物细无声”的Java Agent
  在日常开发当中我们经常会需要编写一些和业务相关性不高的监测代码,比如方法出入口处的日志打印、方法执行耗时统计等。对于Java程序来说,最方便不过的就是使用Spring当中的AOP来完成对应的监测程序编写。那么在Spring框架诞生之前,一个纯粹的Java应用程序应该如何编写相应的监测程序呢?下面就来介绍一个JDK自带的工具—— Java Agent 。
闲宇非鱼
2022/02/08
9020
探秘Java:“润物细无声”的Java Agent
字节码调试的入口 —— JVM 的寄生插件 javaagent 那些事
Java Instrumentation 这个技术看起来非常神秘,很少有书会详细介绍。但是有很多工具是基于 Instrumentation 来实现的:
架构狂人
2023/08/16
1K0
字节码调试的入口 —— JVM 的寄生插件 javaagent 那些事
javaAgent通过字节码对方法增强和使用 byte-buddy 来实现类的增强
在上一篇讲述了入门和实操https://cloud.tencent.com/developer/article/2360594 本章节使用字节码和byte-buddy来玩
杨不易呀
2023/11/19
1.2K0
javaAgent通过字节码对方法增强和使用 byte-buddy 来实现类的增强
Java的Instrumentation类原理分析
利用 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。
JavaEdge
2020/05/27
1.3K0
java运行时创建或修改类-JavaAgent
在运维监控系统开发过程中我们往往需要在特定的方法出入口进行记录日志、采集参数,甚至在特定场景下需要对方法的出入参数或者整个方法逻辑进行重写。目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的。个人在项目中主要使用skywallking,在java、golang等多语言中有过实践,所以这里主要记录自己在java项目中使用skywallking的一些心得和笔记。
lelezc
2023/09/21
6720
Java Agent 开发初探
Java Agent是一种特殊的Java程序,允许开发者在 Java 应用程序运行时对其进行动态修改和监控的机制。它利用了 Java 虚拟机(JVM)的 java.lang.instrument 包提供的功能,可以在类加载时或运行时对字节码进行修改。这种技术通常用于性能监控、安全检测、调试和诊断等场景。
FunTester
2025/01/23
990
Java Agent 开发初探
agentmain | JVM运行时的代码增强
在前文中,介绍了Instrumentation中的premain功能, 这次再一起看下它的agentmain功能.
一个架构师
2022/06/27
8410
agentmain | JVM运行时的代码增强
Java Agent入门实战(三)-JVM Attach原理与使用
之前的permain方法只能在java程序启动之前执行,并不能程序启动之后再执行,但是在实际的很多的情况下,我们没有办法在虚拟机启动之时就为其设定代理,这样实际上限制了instrument的应用。而Java SE 6的新特性改变了这种情况,可以通过Java Tool API中的attach方式来达到这种程序启动之后设置代理的效果。
蒋老湿
2020/01/15
5.5K0
Java-Agent 实现字节码热替换
正在运行中的 SpringBoot 项目需要在不停机的情况下,针对某个 Aop 切面的方法体内容进行修改,需要执行字节码替换的类为:
浪漫主义狗
2024/08/07
1200
相关推荐
Java Agent内存马演变历史
更多 >
LV.0
腾讯Android开发工程师
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验