VBA 有用的小段代码收藏(日积月累)

简介: VBA 有用的小段代码收藏(日积月累)

1. 启动Excel后只留用户窗体

Private Sub Workbook_Open()
    Application.Visible = False
    UserForm1.Show vbModeless
End Sub

2. 判断文件(夹)是否存在

Private Function bFileExist(ByVal strFullName As String) As Boolean
    If Dir(strFullName, vbDirectory) <> Empty Then
        bFileExist = True
    Else
        bFileExist = False
    End If
End Function
Private Sub CommandButton1_Click()
    Dim sFN As String
    sFN = "D:\abc\*.*"
    MsgBox IIf(bFileExist(sFN), "存在", "不存在")
End Sub
' 可以判断文件或文件夹,支持通配符
' sFN = 判断"D:\abc",abc可能是文件夹,也可能是一个没有后缀的文件
' 如存在文件abc时判断"D:\abc\*.*"会报错

   Dir [ (pathname [ , attributes ] ) ]

   pathname    可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。

   attributes     可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。

   attributes 参数的设置可为:

   常数                值    描述

   vbNormal         0    (缺省) 指定没有属性的文件

   vbReadOnly    1    指定无属性的只读文件

   vbHidden         2    指定无属性的隐藏文件

   VbSystem       4    指定无属性的系统文件 在Macintosh中不可用

   vbVolume        8    指定卷标文件;如果指定了其它属性,则忽略vbVolume在Macintosh中不可用

   vbDirectory   16    指定无属性文件及其路径和文件夹

   vbAlias          64    指定的文件名是别名,只在Macintosh上可用。



3. 返回Windows系统文件夹的路径

Function DesktopPath() As String
    Dim wsShell As Object
    Set wsShell = CreateObject("WScript.Shell")
    DesktopPath = wsShell.SpecialFolders("Desktop") & "\"
End Function
Private Sub CommandButton1_Click()
    MsgBox DesktopPath
End Sub


   可用的SpecialFolders常量:

   桌面: Desktop

   公共桌面: AllUsersDesktop  

   开始菜单: StartMenu  

   公共程式: AllUsersStartMenu  

   程序: Programs  

   公共程序: AllUsersPrograms  

   启动: Startup  

   公共启动: AllUsersStartup  

   收藏: Favorites  

   字体: Fonts  

   网络: NetHood  

   最近: Recent  

   发给: SendTo  

   模板: Templates  

   打印机: PrintHood  

   我的文档: MyDocuments

   应用程序数据: AppData  



4. 判断指定名称的Sheet是否存在(遍历所有的Sheet)

Private Function bSheetExist(ByVal strSheetName As String) As Boolean
    Dim ws As Worksheet
    Dim bExist As Boolean
    bExist = False
    For Each ws In Worksheets
        If ws.Name = strSheetName Then
            bExist = True
           Exit For
        End If
    Next
    bSheetExist = bExist
End Function
Private Sub CommandButton1_Click()
    MsgBox IIf(bSheetExist("Sheet3"), "存在", "不存在")
End Sub




5. 分拆长字符串到字串数组

Sub splitString()
Dim I As Integer
Dim strTitle As String
Dim arrTitle() As String
strTitle = "报告日期|一级行名称|二级行名称|支行名称|客户编号|客户名称"
arrTitle = VBA.Split(strTitle, "|")
For I = LBound(arrTitle) To UBound(arrTitle)
    Debug.Print arrTitle(I)
Next
Debug.Print "字符串个数:" & UBound(arrTitle) + 1
End Sub



   Split ( expression , [ delimiter , [ limit , [ compare ] ] ] )

   参数             含义

   expression   需要拆分的字符串

   delimiter       参数为拆分的分隔符(缺省时用空格分隔)

   limit              指定返回字符串的数量

   compare      指定拆分子字符串时的比较类型

   arrResult = VBA.Split(strString, delimiter:="s", compare:=vbTextCompare)

   vbTextCompare 忽略分隔符大小写    vbBinaryCompare 区别分隔符大小写



6. 遍历删除单元格中的网址链接


Sub unLink()
    Dim r As Range
    For Each r In Range("A1:A10")
        r.Hyperlinks.Delete
    Next
End Sub



7. API函数条件解释、计算时间差

#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
#Else
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function GetTickCount Lib "kernel32" () As Long
#End If
Private Sub Test()
Dim iTime As Single
iTimer = Timer
Sleep 1000
MsgBox "耗时:" & Timer - iTimer
Dim lTime As Long
lTimer = GetTickCount
Sleep 1000
MsgBox "耗时:" & GetTickCount - lTimer
End Sub


   Timer() 返回秒数,值为Single型

   GetTickCount() 返回毫秒数,值为Long型

   #If VBA7 Then

   ‘ win64位的代码

   #Else

   ‘ win32位的代码

   #End If

   PtrSafe 关键字,请参见:

  https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/ptrsafe-keyword



8. 文件全名分拆成路径和文件名

Private Function strFileName(ByVal strFullName) As String
    Dim I As Integer, tmp As String
    tmp = ""
    For I = Len(strFullName) To 1 Step -1
        If Mid(strFullName, I, 1) = Application.PathSeparator Then
            strFileName = tmp
            Exit Function
        End If
        tmp = Mid(strFullName, I, 1) & tmp
    Next I
    strFileName = tmp
End Function
Private Function strPathName(ByVal strFullName) As String
    Dim I As Integer, tmp As String
    If Right(strFullName, 1) = Application.PathSeparator Then
        strPathName = strFullName
        Exit Function
    End If
    For I = Len(strFullName) To 1 Step -1
        If Mid(strFullName, I, 1) = Application.PathSeparator Then Exit For
    Next I
    strPathName = Left(strFullName, I)
End Function
Sub Test()
Dim fn As String
fn = "c:\abc\abc.txt"
MsgBox strPathName(fn) & " " & strFileName(fn)
End Sub





目录
相关文章
|
网络安全 Apache PHP
[网络安全]upload-labs Pass-04 解题详析
[网络安全]upload-labs Pass-04 解题详析
345 0
|
安全 Linux 网络安全
组网神器WireGuard安装与配置教程(超详细)
组网神器WireGuard安装与配置教程(超详细)
40380 2
|
SQL 存储 消息中间件
大厂偏爱的Agent技术究竟是个啥
为了解释什么是Agent技术,我在网上搜了一圈,但没有找到想要的结果。反倒是搜到了不少Java Agent技术,要注意Java Agent技术指的是一种Java字节码修改技术,和本文要说的完全是两码事。 既然搜不到,我就说下自己的理解吧。Agent技术是在「客户端」机器上部署一个Agent进程,「客户端」与「服务端」的交互通过这个Agent进行代理,其中Agent与Client通常在同一主机,即可通过「localhost」进行访问。
1813 0
大厂偏爱的Agent技术究竟是个啥
|
数据采集 关系型数据库 MySQL
2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
|
数据采集 数据可视化 数据挖掘
基于Python的数据分析与可视化实战
本文将引导读者通过Python进行数据分析和可视化,从基础的数据操作到高级的数据可视化技巧。我们将使用Pandas库处理数据,并利用Matplotlib和Seaborn库创建直观的图表。文章不仅提供代码示例,还将解释每个步骤的重要性和目的,帮助读者理解背后的逻辑。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供有价值的见解和技能。
606 0
|
10月前
|
传感器 存储 程序员
一文彻底搞明白51单片机的发展历程
51单片机自1980年Intel推出MCS-51系列以来,历经40余年发展,从最初的工业控制逐步扩展到家电、通信、智能家居等多领域。其哈佛架构和丰富的指令集奠定了技术基础,并通过持续创新保持竞争力。面对ARM等新架构的挑战,51单片机通过工艺革新和功能扩展,如集成ADC、USB、蓝牙等,仍占据电动工具、智能传感器等成本敏感领域的70%以上市场份额。如今,它不仅是嵌入式技术的活化石,更是中国电子产业崛起的见证者,全球90%的51单片机产自长三角地区。坚持学习,每天一个小知识点,是不是有了新收获,加油哈!
1089 0
|
机器学习/深度学习 人工智能 搜索推荐
AI时代下的个人发展之路:通过多栈变革实现跨越式成长
随着人工智能(AI)技术的飞速发展,企业和个人面临着前所未有的机遇和挑战。在AI时代,多栈变革成为推动企业和个人发展的关键。对企业而言,AI不仅促进了数据驱动的决策和智能自动化,还推动了产品创新和业务流程优化。而对于个人,AI的崛起提供了通过跨界学习、掌握多项技能及使用AI工具提升效率的机会。本文探讨了AI如何通过多栈变革推动企业和个人的全方位发展,同时也分析了面临的挑战与未来展望。在这个智能化、数据化的时代,只有不断学习与适应的企业和个人,才能抓住AI带来的机遇,迎接更加智能化的未来。
|
机器人 芯片
ChatGPT提问技巧——对话提示
ChatGPT提问技巧——对话提示
1222 8
|
机器学习/深度学习 边缘计算 PyTorch
PyTorch 与边缘计算:将深度学习模型部署到嵌入式设备
【8月更文第29天】随着物联网技术的发展,越来越多的数据处理任务开始在边缘设备上执行,以减少网络延迟、降低带宽成本并提高隐私保护水平。PyTorch 是一个广泛使用的深度学习框架,它不仅支持高效的模型训练,还提供了多种工具帮助开发者将模型部署到边缘设备。本文将探讨如何将PyTorch模型高效地部署到嵌入式设备上,并通过一个具体的示例来展示整个流程。
3573 1

热门文章

最新文章