精华内容
下载资源
问答
  • 获取工作簿中所有表的名称和地址

    ####一、目的
    一个工作簿中有很多的表,想提取所有表的名称和地址,方便后期公式的使用
    ####二、方法
    1、 使用VBA代码

    Sub 提取所有工作表的名称()
    	For Each x In Sheets
    	    k = k + 1  'k可以不用定义,因为VBA中可以默认变量类型为variant
    	    'Cells(k, 1) = x.Name   '表的名称纵向排列
    	    Cells(1, k) = x.Name   '表的名称横向排列
    	    If k = ThisWorkbook.Sheets.Count - 1 Then Exit For 
    	     '可以控制显示的表的名称的数量
    	Next
    End Sub
    
    

    2、excel公式
    a. 在A1单元格输入=CELL("filename")获得路径和表名;
    b1.在A2单元格输入=MID(A1,FIND("]",A1)+1,99)摘出表名
      b2.或者用“数据”—“分列”–“]”分出表名

    3、定义名称(如定义名称为“你好”)
    a. 定义名称“你好”=index(get.workbook(1),row(A1)&T(NOW())
    b. 在A1单元格输入=IFERROR(HYPERLINK(你好&"!A1",MID(你好,FIND("]",你好)+1,99)),"")
    有表的名称,并且有链接;

    4、定义名称2(如定义名称为“不好”)
    a. 定义名称“不好=get.workbook(1)
    b1. 在A1单元格输入=transpose(不好)必须选中多个单元格然后按ctrl+shift+enter三键进行数组运算;
    b2. 在A1单元格输入=INDEX(不好,ROW(A1)&T(NOW()))
    c. 用“数据”—“分列”–“]”分出表名

    Application.ActiveWorkbook.Path 只返回路径
    Application.ActiveWorkbook.FullName 返回路径及工作簿文件名
    Application.ActiveWorkbook.Name 返回工作簿文件名

    展开全文
  • 写在前面:Office办公套件(Word,Excel,PowerPoint等)是我们最常接触的工作软件。它们的功能非常强大:Word可以制作排版精美的文档,Excel有强大的数据统计与处理功能,PowerPoint则可以很好地方便我们向他人展示...

    73098f0f61f0f55dbda291be07b7f1ab.png

    写在前面77cff2b7f1bde6998ed38ae45da85e37.png

    Office办公套件(Word,Excel,PowerPoint等)是我们最常接触的工作软件。它们的功能非常强大:Word可以制作排版精美的文档,Excel有强大的数据统计与处理功能,PowerPoint则可以很好地方便我们向他人展示我们的观点。只要用好这三个软件,处理日常的工作和生活事务就会变得相当容易。

    我的office水平并不算很强,有很多简便的操作和函数对我来说仍是未知领域,VBA也只是入门水平,编译不通过或者运行出bug也是经常的事。为了努力提高自己的知识水平,我会不定期地写一些office操作的小手账,强化自身学习的同时,也和大家一起分享。水平粗浅,如有错漏或可以改进之处,欢迎大家提出77cff2b7f1bde6998ed38ae45da85e37.png

    提示:这篇学习手账涉及编程,适合有一定编程基础的同志阅读

    0d9f579abe4fbdce6896b9c57457eef4.png

    06ade9184b7783a1da8dbe98b0b95b9e.gif

    1

    案例:合并多个工作簿

    我们也许经常能遇到如下图所示的情况。

    85057eb0e411e0920f833ba52a2968da.png

    总是有一些令人生厌的数据源,明明放在一张表格里的事情,它偏要给你来上三五张表,甚至十几二十张表。有些表格还分Sheet来存放数据。

    70f51471684ccac017e127e97cbaeb6b.png

    d93c4ccaa88c9439186c3a0c2ce5f849.png

    这个案例里尚且只有3个工作簿总共不到10个工作表,在数据量大的情况下可能会有几十张表,手动复制粘贴怕是会粘到头皮发麻。

    98ca54e0e97d35f14885f44ec1afe49b.png

    有时候粘贴完了还不够,还要分部门/分人头将表格拆分,以分别发送给相应人员。如果要拆分很多次的话……

    cd546290769fd6f7a88c967faab92723.png

    这一期我们使用VBA来将这些表格一键整合到一起,同时一键将一个工作簿中的不同工作表分别另存。

    cb0ce3a396dbf57b91d2490def94a24f.png

    2

    撰写打开工作簿并复制其内容的代码

    这个代码的核心思路很简单:打开已有的工作簿文件复制工作簿的每个工作表粘贴到当前的工作簿之中

    新建一个工作簿之后,首先想办法打开已有的工作簿。VBA对于打开工作簿文件的理解是:给它一个工作簿地址的字符串,然后解析这个字符串地址来打开工作簿。可以使用Application.GetOpenFilename方法,调用打开文件的窗口,获取要打开的工作簿所在地址。这个方法的一般使用形式如下:

    Application.GetOpenFilename([FileFilter/文件类型过滤器], [FilterIndex/过滤器索引], [Title/标题], [ButtonText/按钮文本(仅限MAC系统)], [MultiSelect/是否多选])

    我们一般用到的就是FileFilter,Title和MultiSelect三个参数。FileFilter是一个字符串,VBA会自动解析其中的星号、逗号、分号等字符,从而在打开文件的对话框中指定文件类型。

    '注意这里的Variant类型:如果要判断是否选择了文件(即是否在弹出的对话框中点了关闭或取消按钮),就要设置Variant类型。

    '定义File作为单个文件的地址,Filename作为文件地址的集合。

    Dim File As Variant, Filename As Variant

    Filename = Application.GetOpenFilename(FileFilter:="Excel工作簿文件, *.xls;*.xlsx;*.xlsm;*.csv", Title:="请选择您要复制的工作簿", MultiSelect:=True)

    实现的效果如下图所示。

    7dad49e91209d160f9b52d287c949d97.png

    选择这三个工作簿之后按“打开”,这三个工作簿的地址就会输入到Filename变量中。如果点击右上角的“×”或右下角的“取消”,则会返回一个False逻辑值到Filename变量中。如果定义Filename的变量类型是字符串型,程序就会报错,而如果定义的变量类型是Variant则程序会继续进行。

    为了不因为误点“取消”或“×”导致程序出错,我们加一个小小的错误处理子过程。

    '该子过程用于点击“取消”时退出程序

    Private Sub EXITPROGRAM()

        MsgBox "您取消了程序。程序结束。", vbOKOnly + vbExclamation, "太阳矩阵核心提示"

        'End关键字可直接终止主程序。

        End

    End Sub

    (关于MsgBox函数可参阅上期推文)

    判断点了“取消”和“×”的方法也很简单。由于点了这两个按钮之后对话框会返回False值,而这是一个逻辑(Boolean)值,而不点这两个按钮意味着选择了文件(不选择文件是不能点击“打开”的)、对话框返回字符串值,因此使用VarType函数判定返回的值类型即可:

    '如果If...Then...在一行内编写完成,则不需要End If

    If VarType(Filename) = vbBoolean Then EXITPROGRAM

    我们需要将代码所在的工作簿和需要复制的工作簿圈定下来,以确保复制的目标不会跑错。

    '可以直接将变量定义为对象(Workbook,Worksheet等)

    Dim ThisWB As Workbook, CopyWB As Workbook

    '给对象类型的变量“赋值”,要使用Set关键字

    'ThisWorkbook代表代码所在的工作簿

    Set ThisWB = ThisWorkbook

    接下来我们从文件名中循环读取每一个工作簿,并复制其中的内容。由于Filename变量中存储了三个文件名,相当于一个数组类型的变量,因此我们可以采取For Each ... Next这样的数组循环。

    对于每个文件名,我们都要进行“解析”,来获取正确的对象。我们可以使用GetObject函数来实现。GetObject函数的用法为:

    GetObject([路径/PathName], [对象类型/Class])

    VBA能自动识别工作簿等内置的类别,因此在本例中我们可以直接省略Class参数。至于路径参数,就是Filename中的每一个路径文本串了。

    我们知道,所有的工作簿下面都有若干个工作表。我们可以简单地使用Count方法来获取工作簿下面有多少个工作表,然后使用Copy方法来复制工作表。Copy方法的用法为:

    Worksheet.Copy [放在某表之前/Before], [放在某表之后/After]

    对一个工作表执行Copy命令后,Excel就会自动生成一张工作表,放在指定的工作表之前/之后(这个工作表可以是任意一个工作簿中的)。如果省略了Before和After参数,那么Excel就会自动建立一个新的空白工作簿并插入这个复制的工作表

    执行完命令之后要关闭工作簿,使用工作簿的Close方法关闭(否则我们想粘贴几个工作簿的内容,执行完成后就会有几个工作簿的窗口)。Close方法的用法为:

    Workbook.Close [是否保存/SaveChanges], [保存更改后的文件名/Filename], [发送工作簿/RouteWorkbook]

    我们不需要保存工作簿,也不需要发送工作簿,因此将第一个参数设置为False即可。本段代码整合后如下所示:

    'File和Filename都是Variant变量,因此其可以作为Filename集合的一个元素参与循环,不需要预先给File定义值。

    '类似的还有Workbook和Workbooks、Worksheet和Worksheets等

    For Each File In Filename

        Set CopyWB = GetObject(File)

        For i = 1 To CopyWB.Worksheets.Count Step 1

            'Sheets(i)代表标签序号为i的工作表

            '特别注意:请务必思考清楚所需要的工作表顺序

            CopyWB.Sheets(i).Copy After:=ThisWB.Sheets(1)

            '工作表在复制时会复制原有的名称,如果与已有工作表重名则会发生错误导致程序停止。使用On Error Resume Next来跳过错误,此时Excel会自动对重名的工作表重新命名。

            On Error Resume Next

        Next i

        'False针对的是Close方法的第一个参数,因此可以直接不写参数名。

        CopyWB.Close False

    Next File

    整合后的代码如下所示。

    '该子过程用于点击“取消”时退出程序

    Private Sub EXITPROGRAM()

        MsgBox "您取消了程序。程序结束。", vbOKOnly + vbExclamation, "太阳探机的提示"

        End

    End Sub

    '主程序

    Sub 复制指定工作簿的所有工作表()

        'Chr(13)代表换行符

        MsgBox "本程序将打开若干工作簿," & Chr(13) & "复制其中的所有工作表并插入本工作簿。", vbOKOnly + vbInformation, "太阳探机的提示"

        MsgBox "请选择您要复制的工作簿。", vbOKOnly + vbInformation, "太阳探机的提示"

        Dim File As Variant, Filename As Variant, ThisWB As Workbook, CopyWB As Workbook, i&

        Filename = Application.GetOpenFilename(FileFilter:="Excel工作簿文件, *.xls;*.xlsx;*.xlsm;*.csv", Title:="请选择您要复制的工作簿", MultiSelect:=True)

        If VarType(Filename) = vbBoolean Then EXITPROGRAM

        '设置DisplayAlerts为False来跳过工作表重名的确认环节

        With Application

            .ScreenUpdating = False

            .DisplayAlerts = False

        End With

        Set ThisWB = ThisWorkbook

        For Each File In Filename

            Set CopyWB = GetObject(File)

            For i = 1 To CopyWB.Worksheets.Count Step 1

                CopyWB.Sheets(i).Copy After:=ThisWB.Sheets(1)

                On Error Resume Next

            Next i

            CopyWB.Close False

        Next File

        '不重新开启ScreenUpdating的话,下面的MsgBox语句将无法出现执行效果

        Application.ScreenUpdating = True

        MsgBox "已成功完成工作表的复制。", vbOKOnly + vbInformation, "太阳探机的提示"

    End Sub

    实际执行一下。等待若干秒以后(时间主要浪费在重复的打开、关闭工作簿的操作中),即可发现所有工作表都已经转入到了我们新建的工作簿中。

    2116b69d8db5dbcecbd443d82f35c13b.png

    接下来执行第二步:将其它工作表中的数据转移到活动的工作表中。

    3

    复制其它工作表的内容到一张工作表中

    这一步比刚才更加简单。在上面的操作中,我们把所有的工作表都放在了这个工作簿自带的工作表(Sheet1)之后,因此只需要跳转回第一个工作表,再执行代码将其它工作表的内容复制过来即可。只需要很简单的代码即可完成:

    Sub 复制所有工作表到特定表()

        Application.ScreenUpdating = False

        Dim i&

        For i = 2 To ThisWorkbook.Worksheets.Count Step 1

            '通过EntireRow来选中整行。这样做是为了避免复制时,由于各工作表的列数不统一导致出现错位的情况。

            '例如,表1有5列,但表2只有4列。如果不选中整行将表2复制到表1的话,那么插入复制的单元格时,如果指定活动单元格下移,就只有前4列会下移,而第5列会不动,从而产生错位。

            Sheets(i).UsedRange.EntireRow.Copy

            ThisWorkbook.ActiveSheet.Rows(1).Insert

        Next i

        Application.ScreenUpdating = True

        MsgBox "已从其它工作表中复制所有内容到活动工作表。", vbOKOnly + vbInformation, "太阳探机的提示"

    End Sub

    执行之后的效果如图所示:

    9fa178810eabe30ec6a4de3ebee28032.png

    再写一个更简单的代码,删除多余的表头:

    Sub 删除多余表头()

        Dim i&

        '这里的循环是从最后一行往上走的,各位可以想一想为什么要这样走

        For i = ActiveSheet.UsedRange.Rows.Count To 2 Step -1

            '整行删除之后,下方的单元格会上移

            If Cells(i, 1).Value = "工号" Then Rows(i).EntireRow.Delete

        Next i

        MsgBox "已删除多余表头。", vbOKOnly + vbInformation, "太阳探机的提示"

    End Sub

    执行的效果如下:

    494f74fb75c0eabcc32d92f8f62fd3b3.png

    再写一个最简单的代码,删除其它的无用表格:

    Sub 删除无用表格()

        Dim i&

        '关闭DisplayAlerts来避免重复确认。注意:工作表删除后不可撤销,请谨慎处理。

        Application.DisplayAlerts = False

        If ThisWorkbook.Worksheets.Count > 1 Then

            '这里的循环也是从最后一个往前走的,各位可以想一想为什么要这样走

            For i = ThisWorkbook.Worksheets.Count To 2 Step -1

                ThisWorkbook.Sheets(i).Delete

            Next i

            MsgBox "已删除多余的表格。", vbOKOnly + vbInformation, "太阳探机的提示"

        Else

            MsgBox "没有多余的表格。", vbOKOnly + vbExclamation, "太阳探机的提示"

        End If

    End Sub

    执行的效果:

    61379dabbdbdf91bbd5e805008c978f7.png

    如果在只有一个工作表的情况下运行,则会弹出提示信息:

    fe2b1817dd8735680a18f7fdc5875c66.png

    是不是很完美?0966c12c008bb2adb249b252f48d9807.png别急,更完美的还在下面~

    4

    分别保存每个工作表的内容

    假设在上面这张表中,我们需要将表按照部门拆分,分别保存。拆分的过程这里略过(可以用VBA实现,欢迎大家思考),表如图所示:

    2d7a29758855fa2355442975c9451a7b.png

    其思想非常简单。我们之前有提到,Worksheet的Copy方法如果省略了Before和After参数,那么Excel就会自动建立一个新的空白工作簿并插入这个复制的工作表。我们可以灵活运用这一点,并使用Application.Dialogs属性的Show方法来弹出“另存为”对话框,供选择保存路径。代码如下:

    '该子过程用于点击“取消”时退出程序

    Private Sub EXITPROGRAM()

        MsgBox "您取消了程序。程序结束。", vbOKOnly + vbExclamation, "太阳探机的提示"

        End

    End Sub

    Sub 将工作表分别另存()

        Dim i&, Response As Variant

        For i = 1 To ThisWorkbook.Worksheets.Count Step 1

            ThisWorkbook.Sheets(i).Copy

            'Show方法会弹出“另存为”对话框。弹出对话框时可以查看工作簿的内容以及下方的标签,以防忘记当前保存的工作簿。

            Response = Application.Dialogs(xlDialogSaveAs).Show

            If Response = False Then

                ActiveWorkbook.Close False

                EXITPROGRAM

            End If

        ActiveWorkbook.Close False

        Next i

        MsgBox "已将所有" & ThisWorkbook.Worksheets.Count & "个工作表另存。", vbOKOnly + vbInformation, "太阳探机的提示"

    End Sub

    实现的效果如图所示:

    087bf591aab2eb516a3e84ebbacf1c82.png

    7a23bcb478ae1cf35ea5de4dfedfc815.png

    5

    本章使用到的方法、函数汇总

    Application.GetOpenFilename方法:https://docs.microsoft.com/zh-cn/office/vba/api/excel.application.getopenfilename

    GetObject函数:https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/getobject-function

    Worksheet.Copy方法:https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.copy

    Workbook.Close方法:https://docs.microsoft.com/zh-cn/office/vba/api/excel.workbook.close

    VarType函数:https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/vartype-function

    Range.Copy方法:https://docs.microsoft.com/zh-cn/office/vba/api/excel.range.copy

    Range.Insert(Rows、Columns其实都属于Range对象)方法:https://docs.microsoft.com/zh-cn/office/vba/api/excel.range.insert

    Application.Dialogs属性:https://docs.microsoft.com/zh-cn/office/vba/api/excel.application.dialogs

    另可参考:

    Range.PasteSpecial方法(可执行行列转置、保留源列宽等特殊粘贴操作):https://docs.microsoft.com/zh-cn/office/vba/api/excel.range.pastespecial

    学好VBA

    走遍天下都不怕

    ▶THE END◀

    274a94b3ca1ef19f8f17f4e20d67010d.png953a147091935a62a345e8eaaed91731.png

    太阳矩阵核心

    一颗人工恒星

    真的很厉害哦

    不扫一扫关注一下吗

    根据微信政策,从今年3月起,所有新开的微信公众号都将暂时不开放留言功能,具体什么时候再开放是个未知数。想要留言的小伙伴们,欢迎在后台留言嘿~77cff2b7f1bde6998ed38ae45da85e37.png

    展开全文
  • 学习Excel技术,关注微信公众号:excelperfect有时候,我们在借助于宏快速整理和分析数据、创建报表后,需要将工作簿分发给其他人,但不想将工作簿中的宏一并发送,或者没有必要在发送的工作簿中带有宏,或者对方不...

    学习Excel技术,关注微信公众号:

    excelperfect

    有时候,我们在借助于宏快速整理和分析数据、创建报表后,需要将工作簿分发给其他人,但不想将工作簿中的宏一并发送,或者没有必要在发送的工作簿中带有宏,或者对方不接收带有宏的工作簿。这样,就需要我们在发送工作簿前将所有的宏代码清除。

    下面的代码将生成不含宏代码的当前工作簿的副本。

    '复制当前工作簿'新工作簿不含有任何宏代码Sub CopyActiveWorkbook()    Dim varName As Variant    Dim wb As Workbook    Dim vbc As Object      '询问存储当前文件的位置    varName = Application.GetSaveAsFilename( _        InitialFileName:="副本_" & ThisWorkbook.Name, _        FileFilter:="Microsoft Excel工作簿(*.xls),*.xls")       If TypeName(varName) = "Boolean" Then       '选择取消,退出程序        Exit Sub    End If      '确保访问的VBA工程存在    On Error Resume Next    Set vbc =ActiveWorkbook.VBProject.VBComponents(1)    On Error GoTo err_h    If vbc Is Nothing Then       '拒绝访问,要求用户开启        MsgBox "不允许访问VB工程." & _            vbNewLine & "请设置信任对VBA工程对象模型的访问."        Exit Sub    End If       Set vbc = Nothing      '以用户指定的文件名保存工作簿    ActiveWorkbook.SaveCopyAs varName      '打开工作簿(关闭信息提示)    Application.EnableEvents = False    Set wb = Workbooks.Open(varName)    Application.EnableEvents = True       For Each vbc In wb.VBProject.VBComponents        Select Case vbc.Type          '标准模块,vbext_ct_StdModule          '类模块,vbext_ct_ClassModule          '用户窗体,vbext_ct_MSForm          Case 1, 2, 3            wb.VBProject.VBComponents.Removevbc          'vbext_ct_ActiveXDesigner          'vbext_ct_Document          Case Else            With vbc.CodeModule              .DeleteLines 1, .CountOfLines            End With        End Select    Next vbc      '保存工作簿    wb.Save   '关闭    wb.Close SaveChanges:=False       MsgBox Prompt:="完成!"    Exit Sub   err_h:    MsgBox "错误 " & Err.Number & ", " &Err.Description, vbCriticalEnd Sub

    代码中使用工作簿的VBProject对象的VBComponents集合,遍历每一项,根据组件的类型,删除其内容或移除该项。

    欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

    欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。

    96ba4d3967df990e69f21999046d889d.png

    展开全文
  • 利用VBA,自动生成工作簿内工作表清单,清单生成在sheet1.range("B3")单元格。
  • Jon Peltier改编了VBA过程,可以列出当前所有已经打开的工作簿中所含有的VBA模块和过程清单。在输出工作表中,前两行为模块所在工作簿名称和工程名称。并且,代码会绕过受保护的VBA工程,同时如果工作簿中没有代码,...

    学习Excel技术,关注微信公众号:

    excelperfect

    有时,我们可能需要知道工作簿中有哪些模块和相应的过程。Jon Peltier改编了VBA过程,可以列出当前所有已经打开的工作簿中所含有的VBA模块和过程清单。在输出工作表中,前两行为模块所在工作簿名称和工程名称。并且,代码会绕过受保护的VBA工程,同时如果工作簿中没有代码,也会在输出工作表中说明。

    下面是完整的代码:

    Sub GetVBAProcedures()

        '声明访问Excel工作簿的变量

        Dim app As Excel.Application

        Dim wb As Excel.Workbook

        Dim wsOutput As Excel.Worksheet

        Dim sOutput() As String

        Dim sFileName As String

        '声明访问工作簿中宏的变量

        Dim vbProj As VBIDE.VBProject

        Dim vbComp As VBIDE.VBComponent

        Dim vbMod As VBIDE.CodeModule

        '声明其它变量

        Dim iRow As Long

        Dim iCol As Long

        Dim iLine As Integer

        Dim sProcName As String

        Dim pk As vbext_ProcKind

        Set app = Excel.Application

        '创建新工作簿用于输出数据

        Set wsOutput =app.Workbooks.Add.Worksheets(1)

        '遍历打开的所有工作簿

        For Each vbProj In app.VBE.VBProjects

            On Error Resume Next

            sFileName = vbProj.Filename

            If Err.Number <> 0 Then sFileName= "文件没有保存"

            On Error GoTo 0

            '初始化输出数组

            ReDim sOutput(1 To 2)

            sOutput(1) = sFileName

            sOutput(2) = vbProj.Name

            iRow = 0

            '检查是否为受保护的工程

            On Error Resume Next

            Set vbComp = vbProj.VBComponents(1)

            On Error GoTo 0

            If Not vbComp Is Nothing Then

                '遍历工程中的每个组件

                For Each vbComp InvbProj.VBComponents

                    '找到代码模块

                    Set vbMod = vbComp.CodeModule

                    '浏览代码模块,查找程序

                    iLine = 1

                    Do While iLine

                        sProcName =vbMod.ProcOfLine(iLine, pk)

                        If sProcName <>"" Then

                            iRow = iRow + 1

                            ReDim PreservesOutput(1 To 2 + iRow)

                            sOutput(2 + iRow) =vbComp.Name & ": " & sProcName

                            iLine = iLine +vbMod.ProcCountLines(sProcName, pk)

                        Else

                            '这行没有程序,到下一行

                            iLine = iLine + 1

                        End If

                    Loop

                    Set vbMod = Nothing

                    Set vbComp = Nothing

                Next

            Else

                ReDim Preserve sOutput(1 To 3)

                sOutput(3) = "工程被保护"

            End If

            If UBound(sOutput) = 2 Then

                ReDim Preserve sOutput(1 To 3)

                sOutput(3) = "工程中没有代码"

            End If

            '定义输入位置并输出

            IfLen(wsOutput.Range("A1").Value) = 0 Then

                iCol = 1

            Else

                iCol = wsOutput.Cells(1,wsOutput.Columns.Count).End(xlToLeft).Column + 1

            End If

            wsOutput.Cells(1,iCol).Resize(UBound(sOutput) + 1 - LBound(sOutput)).Value =WorksheetFunction.Transpose(sOutput)

            Set vbProj = Nothing

        Next

        wsOutput.UsedRange.Columns.AutoFit

    End Sub

    在编写代码前,先要设置对“Microsoft Visual Basic for ApplicationsExtensibility 5.3”库的引用。在VBE中,单击菜单“设置——引用”,在下图1所示的对话框中找到“Microsoft Visual Basic forApplications Extensibility 5.3”并选中前面的复选框。

    bbc16ecfd4fec257fd0388284b54a2ad.png

    1

    运行GetVBAProcedures过程,在我的当前环境中的输出如下图2所示。

    52d0f29db84ab1ad82d61b841e00830c.png

    2

    从图2中可以看出,我当前打开了3个工作簿,其中两个没有保存也没有代码,另外的工作簿就是GetVBAProcedures过程代码所在的工作簿,有2个模块3个过程。

    GetVBAProcedures过程代码的图片版如下:

    81c74b5743d9181df35848b0f2d8b651.png

    ff1e1bf526d1b9e51fbe4a89a4dc5f64.png

    874ada4d70f09648224cc72b1f5a6e38.png

    展开全文
  • 大家好,最近推出的内容是“VBA信息获取与处理”中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第三个专题“VBA代码的分类及如何利用代码自动关闭空闲文件”的内容。 第二节 工作簿...
  • 今日的内容是“VBA之EXCEL应用”的第三章“工作簿(Workbook)和工作表(Worksheet)对象(Object)”中第二节“工作簿和工作表的属性(Properties)和方法(Methods)”。“VBA之EXCEL应用”这套教程从简单的录制宏的讲解...
  • 大家好,我们今日讲解“VBA信息获取与处理”教程中第二十个专题“定制工作表函数获取工作表的信息”的第3节“获取指定工作表名称及工作表可见性的信息函数”,这个专题是非常实用的知识点,希望大家能掌握利用。...
  • mypath = ThisWorkbook.Path '获取当前工作簿的路径 Filename = Dir(mypath &amp; "\*.xls") '获取当前路径下所有的文件名称,这里所指工作簿的名称名称都一样,如下,只是结尾的数字不一样 Set wk_...
  • 合并工作表有2种主流使用方法:00两种方法合并工作表01VBA合并工作表01.打开VBA的编辑器,【开发工具】【Visual Basic】02.进入VB编辑器,双击选择This workbook 对象下,复制以下代码进去:以下为代码↓↓ Sub 合并...
  • 下面提到的工作簿,即单个的 .xlsx 或 .xls 文件,工作表就是文件里的 sheet 。1、自定义函数自定义一个 Countcolor() 函数,统计区域内指定颜色的单元格个数。无情,知乎的代码块提供了几十种语言,就是没有VB…...
  • VBA打开工作簿后,通常一个工作簿有若干个工作表Sheet,访问其中一个工作表有三种方法,代码如下: ThisWorkbook.Sheets(1) ThisWorkbook.Sheets.Item (1) ThisWorkbook.Sheets("Sheet1")'Sheet1为工作表名称 二、...
  • 作者:Ryoko来源:凹凸数据当你收集了 n 个人的 EXCEL 记录表,...最终成品合并 EXCELVBA 实现合并不套路,下面直接放出 VBA 代码(来源于网络,经过了我修改):Sub合并当前目录下所有工作簿的全部工作表()DimMyPat...
  • 大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第三个专题"VBA代码的分类及如何利用代码自动关闭空闲文件"的内容。第二节 工作簿和工作...
  • VBA获取文件夹中的文件列表

    千次阅读 2010-03-13 22:03:00
    代码运行后,首先弹出一个浏览文件夹对话框,然后新建一个工作簿,并在工作表的A至F列分别列出选定文件夹中的所有文件的文件名、文件大小、创建时间、修改时间、访问时间及完整路径。方法如下: 1.按Alt+F11,打开...
  • 转自:...代码运行后,首先弹出一个浏览文件夹对话框,然后新建一个工作簿,并在工作表的A至F列分别列出选定文件夹中的所有文件的文件名、文件大小、创建时间、修改时间、访问时间及完整路
  • 从其他Excel工作簿取值.rar,在Excel VBA开发过程中,如果希望从一个未打开的工作簿获取单元格的值,也可以借用当前工作簿的单元格进行公式引用,但这样做并不是最理想的方案。利用介绍的方法,将演示如何通过后台...
  • 取消隐藏所有的行和列对所有合并单元格取消合并以当前时间为名字保存工作簿将每张工作表单独保存为一个PDF文件将工作簿保存为一个PDF文件保护所有带公式的单元格给选定区域交替高亮显示,增加可读性高亮显示所有带...
  • Part 1:目标将Access数据库中数据表学生信息表中的所有信息读入当前Excel工作簿示例工作表VBA逻辑过程连接数据库根据需求确定SQL语句执行SQL语句,得到recordset将recordset写入工作表(字段名+所有记录 即 列名+每...
  • 现已拥有2003版代码,但由于即03版excel之后,微软取消了vba的filesearch功能,不知为何,请问有高手可以用别的代码... MsgBox "没有找到任何工作簿文件" '提示没有找到任何工作簿文件 End If End With End Sub 另
  • 比如,当我们进行跨工作簿数据查询及汇总时,在不打开相关工作簿的情况下,如何快速遍历指定工作簿每个工作表的名称?——Connection对象的OpenSchema方法可以帮助我们解决此类问题;它可以从提供者获取数据库模式的...
  • 工作簿:讲了工作簿的表达方式,以及批量操作工作簿的数据。比如合并多工作簿数据。 工作表:讲了工作簿的表达方式,以及批量操作工作表的数据。 单元格:单元格是操作频率高的对象,单元格的表达,通过方法或属性...
  • 前面两篇博客,我们介绍了VBA和使用VBA获取当前工作表和另一个工作簿的工作表中的数据。这篇我们来说说如何使用VBA模糊查找当前工作表中有用的数据。我们有时会遇到这样的情况。我们手头有很多很多老的excel文件,...
  • 大家好,我们今日讲解“VBA信息获取与处理”教程中第十三个专题“VBA如何让Excel工作表按指定的顺序排列”的第一节“实现工作表按名称排序”,这个专题是非常实用的...但我们知道,Excel不提供对工作簿中的工作表排...
  • 工作簿中的每个工作表都是一个Worksheet对象,所有Worksheet对象构成了Worksheets集合。我们使用下面的这一张图来完整解析Worksheet对象,如下图1所示。图1工作表的名称如图1所示,上面是Excel主界面,下...
  • EXCEL VBA编程进阶

    万人学习 2016-02-06 11:14:19
    工作簿:讲了工作簿的表达方式,以及批量操作工作簿的数据。比如合并多工作簿数据。 工作表:讲了工作簿的表达方式,以及批量操作工作表的数据。 单元格:单元格是操作频率高的对象,单元格的表达,通过方法或属性...
  • Excel打开工作簿事件

    2010-06-09 19:42:00
    金融行业中Excel做各种数据分析时,一般都有Excel模板,模板里面包含了很多的VBA函数,当然这些VBA函数里面有很多是自定义的,是需要与服务器交互,达到获取即时数据的目的,如股票当前价格等。这些函数需要通过计算...
  • 我们以WPS打开excel为例:1,要先给WPS安装VBA插件,在百度里搜索“VBA7.0.1590_For WPS(中文).exe”,...在左侧菜单“Project(工作簿1)”上点击右键,选择插入“模块”4,在默认打开的模块1里,输入代码:Function...
  • (一)有时需要在工作表中引用同一工作簿中其他工作表名称,当工作表数量较多时,逐一手工输入有些繁琐,这时可以添加一个自定义函数来快速获取工作表名称,方法如下: 按Alt+F11,打开VBA编辑器,单击菜单“插入→...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

vba获取工作簿