较多详细注释的excelVBA入门语句_xldialogsaveas 路径_gxiyv的博客-程序员宅基地

技术标签: 活动  excel  网格  vba  integer  工作  

 较多详细注释的excelVBA入门语句(BY rjjj)

[VBA起步]常用的、带解释的 VBA 短句
[A65536].End(xlUp).Row                            'A列末行向上第一个有值的行数
[A1].End(xlDown).Row                               'A列首行向下第一个有值之行数
[IV1].End(xlToLeft).Column                        '第一行末列向左第一列有数值之列数。
[A1].End(xlToRight).Column                       '第一行首列向右有连续值的末列之列数
Application.CommandBars("Standard").Controls(2).BeginGroup=True '在常用工具栏的第二个按钮前插入分隔符
Cells.WrapText = False             '取消自动换行
    If Len(Target) > 5 Then           '如果当前单元格中的字符数超过5个,执行下一行
        Target.WrapText = True        '自动换行
    End If

[A1:B10].SpecialCells(xlCellTypeBlanks).Rows.Hidden = True      '有空格即隐藏行
[A2].parent.name                                                '返回活动单元格的工作表名
[A2].parent.parent.name                                         '返回活动单元格的工作簿名
如下代码可使工作簿打开后30秒(或闲置30秒)内不输入、不重新选择等,自动关闭工作簿
Private Sub Workbook_Open()               '工作簿打开事件
   tt                                     '工作簿打开时启动 tt 过程
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)  '工作表变化事件
   tt                                                                '工作表中任一单元格有变化时启动 tt 过程
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) '工作表选择变化事件
   tt                                                            '工作表中单元格的选择有变化时启动 tt 过程
End Sub
Sub tt()                                       'tt 过程
   Dim myNow As Date, BL As Integer            '定义myNow为日期型;定义BL为长整型
   myNow = Now                                 '把当前的时间赋给变量myNow
   Do                                          '开始循环语句Do
      BL = Second(Now) - Second(myNow)         '循环中不断检查变量BL的值
      If BL = 30 Then GoTo Cl                  '当BL=30即跳转到CL
      DoEvents                                 '转让控制权,以便sheets可继续操作
   Loop Until BL > 30                          '当BL>30即跳出循环
   Exit Sub
Cl:
   Application.EnableEvents = False            '避免引起其他事件
   ActiveWorkbook.Close True                   '关闭活动工作簿并保存
   Application.EnableEvents = True             '可触发其他事件
End Sub
range("e4").addcomment.Text "代头" & Chr(10) & "内容……"         '添加批注
range("e4").Comment.Visible = True                     '显示批注
把工作簿中所有工作表的指定列调整为最佳列宽:
Sub 调整列宽()
   Dim i%                
   For i = 1 To Sheets.Count                '遍历工作簿中所有的工作表
      Sheets(i).Columns("A:K").AutoFit      '把每个工作表的[A:K]列调整为最佳列宽
   Next i                                   
End Sub
Do循环语句的几种形式:
1.
Do While i>1     '条件为True时执行
... ...  '要执行的语句
Loop
2.
Do Until i>1     '条件为False时执行
... ...  '要执行的语句
Loop
3.
Do
... ...  '要执行的语句
Loop While i>1   '条件为True时执行
4.
Do
... ...  '要执行的语句
Loop Until i>1   '条件为False时执行
5.While...Wend 语句
While i>1        '条件为True时执行
... ...  '要执行的语句
Wend
勾选"VBA项目的信任"
Application.SendKeys "%(tmstv){ENTER}"                 '在 Excel 窗口操作
Application.SendKeys "%(qtmstv){ENTER}"                '在 VBE 窗口操作
Application.CommandBars("命令按钮名称").Position = msoBarFloating  '使[命令按钮]悬浮在表格中
   Application.CommandBars("命令按钮名称").Position = msoBarTop       '使[命令按钮]排列在工具栏中
ActiveSheet.protect Password:="wshzw"                         '为工作表保护加口令
ActiveSheet.Unprotect Password:="wshzw"                         '解除工作表保护
Activesheet.ProtectContents                                 '判断工作表是否处于保护状态
工作表的复制与命名
Sub wshzw()
   Dim i As Integer
   For i = 1 To 5
      Sheets("Sheet1").Copy After:=Sheets(1)  'Before/After 复制新表在 Sheets("Sheet1") 前/后
      ActiveSheet.Name = i & "月"             '为复制的新表命名
   Next i
   Sheets("Sheet1").Name = "总表"             '为 Sheets("Sheet1") 改名
End Sub
Application.EnableEvents = False      
      ......
Application.EnableEvents = True   '抑制事件连锁执行

Application.EnableEvents = False
ActiveWorkbook.Save     '抑制BeforeSave事件的发生
Application.EnableEvents = True     '抑制指定事件

Application.DisplayAlerts=False  '屏蔽确认提示

 

Application.ScreenUpdating = False
   .......
Application.ScreenUpdating = true    ' 冻结屏幕以加快程序运行
 
ActiveCell.CurrentRegion.Select                              '选择与活动单元格相连的区域

range("a2:a20").NumberFormatLocal = "00-00"                          '区域的格式化

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row          '已用区域的最末行

ActiveSheet.Copy Before:=Sheets(1)                          '复制活动工作表到第一张工作表之前

range("a2:a20").FormulaHidden = True                           '工作表处于保护状态时隐藏部分单元格公式

 
FileDateTime("E:/My Documents/33.xls")

FileDateTime(thisworkbook.FullName)     '文件被创建或最后修改后的日期和时间

FileLen(thisworkbook.FullName) / 1024

FileLen("E:/My Documents/temp/33.xls") / 1024     '文件的长度(大小),单位是 KB
Application.AskToUpdateLinks = False                     '不询问是否更新链接,并自动更新链接
ActiveSheet.Hyperlinks.Delete                                   '删除活动工作表超链接
ActiveWorkbook.SaveLinkValues = False                        '不保存活动工作簿的外部链接值
ActiveSheet.PageSetup.CenterFooter = Range("k2").Value          '打印时设置自定义页脚
ActiveSheet.PageSetup.Orientation = xlLandscape                 '设置为横向打印
ActiveSheet.PageSetup.Orientation = xlPortrait                  '设置为纵向打印
Application.WindowState = xlMinimized    '最小化窗口
    Application.WindowState = xlNormal    '最大化窗口
Sub 删除工作表()
    Application.DisplayAlerts = False
    Sheet1.Delete
    Application.DisplayAlerts = True
End Sub
有删除就有添加
Sub 添加工作表()
    For i = 1 To 5
        Worksheets.Add.Name = i
    Next
End Sub
[A1:A20].AdvancedFilter xlFilterCopy, [B1], Unique:=True          '可去掉重复数据
[A2:C32].Replace What:="F", Replacement:="G"                     '指定范围内的查找与替换
Activesheet.AutoFilterMode = false                              '取消自动筛选
执行以下语句可有效缩小工作簿的大小,执行前请先看清每条语句的作用:

ActiveSheet.UsedRange.ClearComments             '清除活动工作表已使用范围所有批注
ActiveSheet.UsedRange.ClearFormats             '清除活动工作表已使用范围所有格式
ActiveSheet.UsedRange.Validation.Delete         '取消活动工作表已使用范围的数据有效性
ActiveSheet.Hyperlinks.Delete                   '删除活动工作表超链接
ActiveSheet.DrawingObjects.Delete               '删除活动工作表已使用范围的所有对象
ActiveSheet.UsedRange = ActiveSheet.UsedRange.Value      '取消活动工作表已使用范围的公式并保留值
还有:
Sub x()
   Dim myRange As String
   myRange = ActiveSheet.UsedRange.Address     '去除活动工作表无数据的行列
End Sub

ActiveWorkbook.FullName                          '当前窗口文件名与路径
Application.AltStartupPath= "E:/My/MyStart"      '替补启动目录路径
Application.AutoRecover.Path                     '返回/设置Excel存储"自动恢复"临时文件的完整路径
Application.DefaultFilePath                      '选项>常规中的默认工作目录
Application.Evaluate("=INFO(""directory"")")     '默认工作目录
Application.LibraryPath                          '返回库文件夹的路径
Application.NetworkTemplatesPath                 '返回保存模板的网络路径
Application.Path                                 '返回应用程序完整路径
Application.RecentFiles.Item(1).Path             '返回最近使用的某个文件路径,Item(1)=第一个文件
Application.StartupPath                          'Excel启动文件夹的路径
Application.TemplatesPath                        '返回模板所存储的本地路径
Application.UserLibraryPath                      '返回用户计算机上 COM 加载宏的安装路径
Debug.Print Application.PathSeparator            '路径分隔符 "/"
CurDir                                           '默认工作目录
Excel.Parent.DefaultFilePath                     '默认工作目录
ThisWorkbook.Path                                '返回当前工作薄的路径
dim mm(2,10)
Range("a1:b10")=mm              '可以将二维数组赋值给Range
Application.Dialogs(XLdialogsaveas).show     显示保存对话框
[SIZE=1]Sub x()
   Dim myRange As String
   myRange = ActiveSheet.UsedRange.Address     '去除活动工作表无数据的行列
End Sub
这相当于把新的已使用区域赋值给变量,效果等同于手工删除多余的列或行后立即保存;

来一个函数的
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'右边单元格反向显示活动单元格文本
If ActiveCell.Column < 256 Then ActiveCell.Offset(0, 1) = StrReverse(ActiveCell)
End Sub

想不到UsedRange还可以这样用,又学到了!有了这个就可以轻松取得当前Sheet的最末行和最末列号了:
Sub test()
Dim myRange As String
myRange = ActiveSheet.UsedRange.Address
Debug.Print "LastRow=" & Cells.SpecialCells(xlCellTypeLastCell).Row
Debug.Print "LastColumn=" & Cells.SpecialCells(xlCellTypeLastCell).Column
myRange = ""
End Sub
跟一帖:如上下相邻单元格数据相同则删除一个
Sub Yjue()
   Dim myCell As Range, NCell As Range        '定义
   Set myCell = ActiveSheet.Range("b2")       '把对象ActiveSheet.Range("b2")赋给变量myCell
   Do While Not IsEmpty(myCell)               '条件为True时执行
      Set NCell = myCell.Offset(1, 0)         '把对象myCell的下一个单元格赋给变量NCell
      If NCell.Value = myCell.Value Then      '如上下相邻单元格数据相同,则望下执行
          myCell.Delete                       '删除myCell
      End If                                  '结束条件语句
      Set myCell = NCell                      '把变量NCell赋给变量myCell,等于在循环中把原myCell下移了一格
   Loop
End Sub

复制行高列宽与内容:
Sub Yjue()                      '过程的名称
   Sheet2.Rows("2:23").Copy     '复制行区域
   Sheet3.Select                '选择粘贴区域
   Range("A2").PasteSpecial Paste:=xlPasteColumnWidths   '粘贴类型
   ActiveSheet.Paste            '实施粘贴
   Application.CutCopyMode = False   '取消复制模式
End Sub
如整行为空白则删除整行:

Sub DelRow()
   Dim i As Integer, LastRow As Integer
   LastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row  '把最后行的行号赋给变量
   For i = LastRow To 1 Step -1                                      '倒循环
      If Range("iv" & i).End(xlToLeft).Column = 1 And Range("a" & i) = "" Then
         Range("a" & i).EntireRow.Delete                          '如整行为空白则删除整行
      End If
   Next i                                       
End Sub

T = Application.GetOpenFilename("Text Files (*.dat), *.dat")选择文件保存路径
通过依次赋色给单元格的例子,展示简单的 On Error GoTo Line1 用法:

Sub Yjue()                '过程名
   Dim i As Integer       '定义 i 为整型
   On Error GoTo Line1    '遇到错误跳转到 Line1
   For i = 0 To 65        '予设从 0 循环到 65
      Cells(i + 1, 2).Interior.ColorIndex = i  '依次赋色给第2列的单元格
      Cells(i + 1, 1) = i                      '依次给第1列的单元格标上色索引号
   Next i
   Exit Sub              '退出过程
Line1:                   '遇到错误跳转到这行继续执行
   MsgBox "默认颜色只有 " & i - 1 & "种。"    '提示对话框
End Sub                  '结束过程

通过显示或取消网格线,展示运算符“Not”应用的简单示例:
   Dim myLine As Boolean                     '定义变量myLine为布尔型
   With CommandButton1                         'With语句结构
      If .Caption = "取消网格线" Then             '如按钮上显示为"取消网格线"
         .Caption = "显示网格线"                  '改按钮上的字幕为"显示网格线"
         myLine = ActiveWindow.DisplayGridlines       '把活动窗口当前网格线的显示状态赋给变量
         ActiveWindow.DisplayGridlines = Not myLine     '进行逻辑否定运算
      Else              
         .Caption = "取消网格线"                        '否则按钮上显示为"取消网格线"
         ActiveWindow.DisplayGridlines = Not myLine     '进行逻辑否定运算
      End If
   End With                           '结束With语句结构

ActiveCell.Offset(, -1).Name = "hzw"                            '定义名称
ActiveCell.Precedents.Address                                   '被当前单元格所引用的区域地址
ActiveCell.Resize(0, 2).Select                                  '选定当前单元格并向右延伸二格
Activesheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 '显示自动筛选后的行数

有选择地删除指定区域内的单元格

点击按钮可选择性的删除[A1:A20]区域内含有[D1]中字样的单元格;再点击按钮可返回原样;
如果替换了[D1]中的字样,点击按钮后所删除[A1:A20]区域中的单元格亦会随着变化。

   With CommandButton1
      If .Caption = "删除单元格" Then       '如按钮显示的字符为:"删除单元格",
         .Caption = "反悔删除"              '则改为:"反悔删除"
         For i = 20 To 1 Step -1            '倒循环
            If Cells(i, 1) Like "*" & Range("d1") & "*" Then
               Cells(i, 1).Delete Shift:=xlUp     '如循环中发现某个单元格含有[D1]中字符,则删除该单元格
            End If
         Next i
      Else
         .Caption = "删除单元格"            '否则让按钮显示的字符为:"删除单元格"
         Range("a1:a20") = Range("f1:f20").Value   '把[F1:F20]赋给[A1:A20],为了可反复测试
      End If
   End With

下面换个话题,举一个限制鼠标只能在[B2:G60]以外的区域活动的例子:

   With ActiveSheet                      'With 语句,在一个单一对象上执行一系列的语句
      .Unprotect                         '解除没设密码的工作表保护
      .Cells.Locked = False              '解除活动工作表中所有单元格的“锁定”
      .Range("b2:g60").Locked = True     '只锁定 [B2:G60] 区域
      .EnableSelection = xlUnlockedCells   '仅允许选定未被有效锁定的单元格
      .Protect                           '工作表保护(没设密码)
   End With                              'With 语句结束

一个复制数据后,只能粘贴数值的例子

Private Sub Worksheet_SelectionChange(ByVal T As Range)  '工作表SelectionChange事件
   On Error Resume Next                                  '忽略代码运行中的错误,并越过错误继续执行后面的语句
   If T.Column = 1 Then                                '如活动单元格为第一列时执行下面的语句
      Selection.PasteSpecial Paste:=xlPasteValues     '粘贴数值
      Application.CutCopyMode = False                 '立即清空剪贴板
   End If                                            'IF结构结束
End Sub                                              '本过程结束

-----------------------------------------------------------
如何用VBA获得工作簿名称?
For Each wbk In Workbooks
    MsgBox wbk.Name
Next

Workbooks.Close  '关闭所有工作簿
Application.Quit '关闭所有工作簿
 
工作簿调用的问题

本人做了一个程序,里面自定义了工具菜单:
     如果程序打开后,调用了一个新的工作簿,当再次调用第二个新的工作簿时如何用vba编写一段代码,先保存退出调用的第一个工作簿,然后再打开第二个新的工作簿

Dim Wb As Workbook

Sub test()
Set Wb = Workbooks.Open("book2.xls")
End Sub


Sub test2()
Wb.Close savechanges:=True
Set Wb = Workbooks.Open("book5.xls")
End Sub

下面代码为何不能进行两工作簿中的工作之间的复制?(复制代码出现不支持此属性或方法的错误)

 Mybo = ActiveWorkbook.Name
    She = Sheets(1).Name
    Range("A1:B1").Select
    Selection.AutoFilter
    Range("B2").Select
    Selection.AutoFilter Field:=1, Criteria1:=">100", Operator:=xlAnd, _
        Criteria2:="<200"
    Windows(Mybo).Worksheets(She).Range("A1:K5000").Copy _
        Destination:=Windows(mybook).Worksheets("acfmis").Range("A1")

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gxiyv/article/details/1573281

智能推荐

【微信小程序+echarts点亮中国地图】微信小程序echarts中国地图点亮功能_小程序 地图上如何将城市高亮_天南浅蓝的博客-程序员宅基地

0 小程序开发背景1 下载官方Github项目2 按照Echarts官网的map示例使用3 点击事件的函数效果图0 小程序开发背景前段时间在上学校的软件开发与实践B课程因为赶上了工大百年校庆,选择了开发百年工大校庆微信小程序功能涵盖了校庆官方信息发布、校庆应援点亮地图、校庆活动发布、寻找校友、校友回忆、校庆祝福、校庆捐款、校庆周边等参考的资料有微信官方小程序文档微信小程序的一个开发社区,资料比较老B站上的小程序开发视频,是一个培训机构的,用于实战还行在这里想复盘一下校庆应援点亮地.._小程序 地图上如何将城市高亮

Docker容器日志管理最佳实践_ln -sft /dev/stderr_小霸戈的博客-程序员宅基地

本文所有内容基于:Docker-CEServer Version: 18.09.6Storage Driver: overlay2Kernel Version: 3.10.0-862.el7.x86_64Operating System: CentOS Linux 7 (Core)Docker 日志分为两类:Docker 引擎日志(也就是 dockerd 运行时的日志),容器..._ln -sft /dev/stderr

蓝桥杯 BASIC-13 数列排序 C语言 冒泡排序_Guan_qiqi的博客-程序员宅基地

冒泡排序以前写的程序,不是很好看????主要理解冒泡排序的思想//Bubble Sort for(j=0;j<n-1;j++) { for(k=0;k<n-j-1;k++) { if(a[k]>a[k+1]) { temp=a[k]; a[k]=a[k+1]; a[k+1]=temp; } } }完整程序#i...

vue给列表添加序号_使用Vue.js的v-for生成table并给table加上序号的实例代码_梵擎的博客-程序员宅基地

使用Vue.js的v-for生成table并给table加上序号的实例代码发布于 2020-2-24|复制链接摘记: 现在有一个使用mybatis的分页插件生成的table,table中数据是通过vue获得的 , 前台显示使用后台vue获取数据使用分页插件进行查询然后使用回调,将结果返回给vue的一个model```javascript/*** 分页控件加载* @param data*/funct..._vue ts table 加序号

vue-ssr性能优化几种方法_vue3的ssr的优化算法_缓月的博客-程序员宅基地

vue-ssr性能优化:减少服务端渲染DOM数:1.结合vue的插槽系统、内置component组件的is,利用vue ssr服务端只会执行beforeCreate和created生命周期的特性,封装自定义组件,该组件在mounted的时候将包裹的组件挂载到component组件的js属性上。2.vue高级异步组件封装延迟加载方法,只有当模块到达指定可视区域时在加载。开启多进程。node.js是单进程,单线程模型。开启缓存:1.页面级缓存:在创建render实例时利用LRU-C_vue3的ssr的优化算法

使用Microsoft Broadcaster将信息获取到您的博客-程序员宅基地

Do you often have people ask you for advice about technology, or do you write tech-focused blog or newsletter? Here’s how you can get information to share with your readers about Microsoft technology...

随便推点

Nginx转发,swagger误将upstream作为base url_swagger的base url_苏尼特是羊肉的博客-程序员宅基地

在用Nginx转发请求到sprint boot上游服务的时候,有一个配置项,如果处理不好,会导致在swagger里面无法访问API。下面来看一下实例:(实例来自VMWare 开源项目Singleton,https://github.com/vmware/singleton,欢迎关注。)首先来看问题的现象,通过nginx能够访问到swagger-ui的页面;并且,直接url 访问API也正常,如下:但是,在swagger-ui界面通过输入参数去请求API,就会得不到响应结果,如下:_swagger的base url

Bin文件打开方式_bin文件用什么软件打开_shifuwawa的博客-程序员宅基地

bin 二进制文件,其用途依系统或应用而定 。 也就是说,一般来讲是机器代码,汇编语言编译后的结果,(DOS下汇编语言编译后与.com文件相类似),用debug、WINHEX,U_EDIT等软件打开(通常不一定能看得懂是些什么除非精通汇编语言) 所有的文件, 无论后缀名是什么, 一律分为两种格式. text 和 binary. 一种文件格式binary的缩写。一个后缀名为.bin的文件, 只是想表明它是binary格式.,但并不表明它与某种应用程序有必然的联系性. 。_bin文件用什么软件打开

SpringBoot项目中快速集成腾讯云短信服务SDK实现手机验证码功能_若依集成腾讯云短信sdk-程序员宅基地

大家春节好!我是程序员阿福,今天过年的日子祝大家在新的一年里健康平安、步步高升、虎年大吉大利、财源滚滚! 今天分享一篇简短一点的文章,希望在将来工作中需要的时候能够用得到,如果将来工作中需要实现短信验证码功能时可以打开我的公众号并翻到这篇文章再仔细参考我的实现思路,那么笔者分享这篇文章的用意也就达到了。前言几乎每一个新项目中都会涉及到手机验证码的动能,用户登录采用手机验证码登录方式、用户忘记密码需要密码修改密码时以及用户进行支付确认时也需要用到手机验证码。可以说手机验证码在各种项目中用的非常多,因此在_若依集成腾讯云短信sdk

机器学习“特征编码”解析_特征编码是什么意思_IT独白者的博客-程序员宅基地

1 为什么要进行特征编码?我们拿到的数据通常比较脏乱,可能会带有各种非数字特殊符号,比如中文。下面这个表中显示了我们最原始的数据集。而实际上机器学习模型需要的数据是数字型的,因为只有数字类型才能进行计算。因此,对于各种特殊的特征值,我们都需要对其进行相应的编码,也是量化的过程。2 特征编码类型本篇,我们主要说一下分类型特征的编码方式。对于分类型数据的编码,我们通常会使用两种方式来实..._特征编码是什么意思

Springboot 日志应用使用入门_spring 开root日志-程序员宅基地

目录日志框架背景主流日志框架SLF4J详解SLF4J 原理slf4j 与实现框架图总览slf4j 与 logback入门slf4j 与 log4j 入门添加 Maven 依赖添加配置文件日志记录Springboot使用logback日志框架背景1)程序媛小张,开发了一个大型系统;2)最开始系统中使用 System.out.printl..._spring 开root日志

DB2序列使用详解——使用序列实现流水号隔天重置_db2序列号_wjw_20112243的博客-程序员宅基地

DB2序列使用详解——使用序列实现流水号隔天重置_db2序列号

推荐文章

热门文章

相关标签