ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 自己常用的VBA语句\函数\子过程

自己常用的VBA语句\函数\子过程

作者:绿色风 分类: 时间:2022-08-18 浏览:104
楼主
wen98
  以下是本人Wen98在VBA工作实践中,为方便查找,备忘性的积累了一些VBA常用的语句\函数\子过程,以提高自己一点工作效率。(仅供参考、引用)

获取名字:
    WorkbookName主表 = ActiveWorkbook.Name
    Sheet透视表 = ActiveSheet.Name

选定:
    Windows(WorkbookName主表).Activate
    Sheets("取数").Select
    Range("A1").Select
    Range("K1:M3").Select

单元格赋值:
    Range("A1")="Abc"
    [A1]="Abc"
    Cells(行, 列)="123.00"

是否显示警告信息:
    Application.DisplayAlerts = False  'True= 显示警告信息

显示提示信息:
    MsgBox "包括完整路径的工作簿名称为:" & ThisWorkbook.FullName

选择是否提示:
If MsgBox("设为汇总的单元格是:" & Selection.Address & "  确定吗?", vbYesNo) = vbNo Then Exit Sub

关闭薄:
    Windows(Workbook表).Close

删除子表:
    Sheets("操作步骤").Delete  或:
    Sheets(Sheet透视表).Select
    ActiveWindow.SelectedSheets.Delete

删除行
    Rows("2:316").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Range("A2").Select

全表复制粘贴:
    Windows(Workbook表).Activate
    Sheets("表1").Select
    Cells.Select '全选
    Selection.Copy
    Windows(WorkbookName主表).Activate
    Sheets("表2").Select
    Cells.Select
    ActiveSheet.Paste
    Windows(Workbook表).Close

复制值:
    Workbooks.Open Filename:="存款表.xls"
    Windows("模板20.xls").Activate
    Sheets("发布").Select
    Range("C4:H4").Select
    Range(Selection, Selection.End(xlDown)).Select  'Shift+Ctrl+下键
  '  Range(Selection, Selection.End(xlToRight)).Select   'Shift+Ctrl+右键
  '  Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'Ctrl+End 键

    Selection.Copy
    Windows("存款表.xls").Activate
    Sheets("人民币").Select
    Range("C4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False  '复制值

保存薄:
    ActiveWorkbook.Save

新建薄并保存修改结果:(复制区域SUB,在下面)
    Workbooks.Add
    WorkbookName新薄 = ActiveWorkbook.Name
    Call 复制区域SUB((WorkbookName日报表), "发布3", "A1:CF82", (WorkbookName新薄), "Sheet1", "A1")
    Workbooks(WorkbookName新薄).Close SaveChanges:=True, Filename:=C_PRG路径 & "测试表.xls"

原名保存文件,不显示警告信息框
    Application.EnableEvents = False
    ActiveWorkbook.Save
    Application.EnableEvents = True

关闭不保存,不显示警告信息框
    Application.DisplayAlerts = False '不显示
    ThisWorkbook.Close
    Application.DisplayAlerts = True  '显示

是否显示屏幕变化
    Application.ScreenUpdating = False
    Application.ScreenUpdating = True

不显示Excel界面
Application.Visible = False '显示Excel界面 True or False

打开文件:
    TXT_Name = Application.GetOpenFilename("文本文件(*.txt), *.txt") '获取文件
    Workbooks.Open Filename:=TXT_Name
    Workbooks.Open Filename:=C_PRG路径 & "模板5.XLS"
另一种:
    If MsgBox("[B1]单元内容应先设为读取的文件名, 准备好了吗?", vbYesNo) = vbNo Then 'Exit Sub
       XLS_Name = Application.GetOpenFilename("Excel文件(*.xls), *.xls")
       Range("B1") = XLS_Name
    Else
       XLS_Name = Range("B1") '读取的文件名
    End If
    Workbooks.Open Filename:=XLS_Name
    Workbook表名 = ActiveWorkbook.Name

总行数:
已选区域行数 = Sheets("基金取数").UsedRange.Rows.Count  '已选区域行数

或:
已选区域行数 = Selection.Rows.Count '已选定范围的行数
[B1] = 已用区域行数

已选区域右下角坐标 = Cells(Selection.Rows.Count, Selection.Columns.Count).Address
MsgBox 已选区域右下角坐标
MsgBox Range("A1:" & 右下角坐标已选区域).Address  '矩形范围

右下角坐标 = Cells(Range("A1").End(xlDown).Row,Range("A1").End(xlToRight).Column).Address
MsgBox Range("A1:" & 右下角坐标).Address  '矩形范围

或:
最后行号 = Range("B5").End(xlDown).Row   'B列最后行号,可用,B5下方不应有空单元格
最后列号 = Range("A4").End(xlToRight).Column
列名 = Columns(最后列号).Address  '得出如: $N$N

最后行号 = Cells(Rows.Count, 3).End(xlUp).Row  'C列最后行号,可用
相当于:
最后行号 = Range("C65536").End(xlUp).Row   '最后行号,可用,V2003

获取行列坐标:
列 = Selection.Column
行 = Selection.Row

列 = ActiveCell.Column
行 = ActiveCell.Row

设置公式(填充):(关联的透视表最后列并不固定)

Sheets("透视表").Select
最后列号 = Range("A4").End(xlToRight).Column   '最后列号
列名 = Columns(最后列号).Address
Sheets("金额").Select
最后行号 = Range("C4").End(xlDown).Row   '最后行号
Range("E5").Select
ActiveCell.Formula = "=SUMIF(透视表!A:A,B:B,透视表!" & 列名 & ")"  '设置公式
Selection.AutoFill Destination:=Range("E5:E" & 最后行号) '填充

消除表内容:
ActiveSheet.Cells.Clear

消除内容:
Selection.ClearContents

把每个数字转换成9位字符,不足者前面添0, 在单元格输入公式:
=REPT(0,9-LEN(A23)) &A23

用代码简化输入(在[代码]工作表中有A列代码,B列名称)
在工作表A列输入代码后,在B列得出名称,B2单元格输入公式:
=IF(ISERROR(VLOOKUP(A2,代码!A:B,2,FALSE)),"",VLOOKUP(A2,代码!A:B,2,FALSE))

冻结窗口
    Range("C4").Select
    ActiveWindow.FreezePanes = True '冻结窗口,C4起

查找包括X的单元格
Cells.Find(what:="X").Activate
行号 = Cells.Find(what:="X").Row
列号 = Cells.Find(what:="X").Column

通过短名(简称)求长名代码
=LOOKUP(0,0*FIND(简称!$A$2:$A$112,A3),简称!$B$2:$B$112)
其中:[简称!$A$2:$A$112] 为简称,[简称!$B$2:$B$112] 为行号,A3为网点全名

================================================================================
Sub 复制区域SUB(源薄名 As String, 源表名 As String, 源区域 As String, 目标薄名 As String, 目标表名 As String, 目标区域 As String)
   
    Windows(源薄名).Activate
    Sheets(源表名).Select
    Range(源区域).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
   
    Windows(目标薄名).Activate
    Sheets(目标表名).Select
    Range(目标区域).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False  '复制值
End Sub

================================================================================
Function 工作表是否存在(表名 As String) As Boolean '自定义函数: 工作表是否存在

    Dim i As Long
    For i = Worksheets.Count To 1 Step -1
        If Worksheets(i).Name = 表名 Then
            Exit For
        End If
    Next
    工作表是否存在 = IIf(i = 0, False, True) '如果i = 0工作表未找到
End Function

调用:
    If 工作表是否存在((表名)) = False Then
       Sheets.Add(after:=Sheets("成表")).Name = 表名   '"成表"之后插入
    End If

=====================================================================================
Function 工作簿是否打开(sWkbName As String) As Boolean '自定义函数: 工作簿是否打开

'如果要判断一个指定的工作簿是否打开,可以将下面的VBA代码放入标准模块中,然后在子过程中进行调用。
'如果目标工作簿已打开则返回TRUE,否则返回FALSE
    Dim i As Long

    For i = Workbooks.Count To 1 Step -1
        If Workbooks(i).Name = sWkbName Then
            Exit For
        End If
    Next
   
    工作簿是否打开 = IIf(i = 0, False, True) '如果i = 0工作簿未找到
End Function
================================================================================
Sub 返回模板1()
    If 工作簿是否打开("模板1.xls") = False Then
        Workbooks.Open Filename:="F:\报表\日报\prg\模板1.xls"  '打开表
    End If
    Windows("模板1.xls").Activate
End Sub
=====================================================================================
Sub 打开或隐藏列()
    Sheets("变动表").Select
    Columns("V:AO").Select
    Selection.ColumnWidth = IIf(Selection.ColumnWidth > 0, 0, 12)
End Sub
=======================================================
Sub 打开或隐藏无关表()
    Worksheets("过渡表").Visible = Not Worksheets("过渡表").Visible   'False 'True
    Worksheets("汇总单位").Visible = Not Worksheets("汇总单位").Visible   'False 'True
End Sub
=============================================================
Sub 另存并关闭()
    ActiveWorkbook.Close SaveChanges:=True, Filename:="test.xls"
End Sub
=============================================================
Sub 设置片区汇总公式()

'用法: 先定位"分行汇总的单元格", 再运行本宏, 即可自动设置片区汇总公式
'分行汇总在最上面,片区汇总在网点下方(片区包含若干网点)

'MsgBox ActiveCell.Column
If MsgBox("设为合计汇总的单元格是:" & ActiveCell.Address & "  确定吗?", vbYesNo) = vbNo Then Exit Sub

列 = ActiveCell.Column  '自动得出
行0 = ActiveCell.Row    '自动得出

Dim A As Variant
'片区个数 = 14
A = Array(10, 5, 3, 3, 4, 1, 2, 3, 2, 2, 9, 6, 6, 6) '各片区包含的网点个数(行)
行 = 行0
总计 = "=SUM("

For i = 0 To UBound(A) '确定数组的指定维的最大可用下标。
    含 = A(i)
    行 = 行 + 含 + 1
    'Range(列 & 行).Select
    Cells(行, 列).Select '可行
    ActiveCell.FormulaR1C1 = "=SUM(R[-" & 含 & "]C:R[-1]C)"
    总计 = 总计 & "R[" & 行 - 行0 & "]C,"
Next

Cells(行0, 列).Select '可行
ActiveCell.FormulaR1C1 = 总计 & ")"   '总计
End Sub
2楼
pblcxpblcx
谢谢楼主了,学习一上。
3楼
iolq99
看看吧....











系统下载
猪猪猫论坛
最新QQ签名
qianming.myzzm.com
网址导航jujumao论坛
4楼
beci426
向楼主学习
5楼
塵封Dè眷戀

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap