精华内容
下载资源
问答
  • 判断工作表是否打开 通过遍历当前应用程序所有已打开的工作簿文件(Workbooks 集合),判断指定名称的工作簿是否打开。 Sub test() Dim wb As Workbook For Each wb In Workbooks If wb.Name = "1.xlsx" Then ...

    判断工作表是否打开

    通过遍历当前应用程序所有已打开的工作簿文件(Workbooks 集合),判断指定名称的工作簿是否打开。

    Sub test()
        Dim wb As Workbook
        For Each wb In Workbooks
            If wb.Name = "1.xlsx" Then
                MsgBox "1文件已经打开"
                Exit Sub
            End If
        Next
        MsgBox "1文件已经没有打开"
    End Sub
    
    展开全文
  • 要解决的问题: 同一个文件夹有多个工作簿,工作簿中有相同格式的多个sheet表,其中有两个固定的SHEET需要...2、使用dir在文件夹中遍历文件,然后打开工作簿,再打印指定工作表,然后关闭文件。 EXCELVBA代码如.

    要解决的问题:

    同一个文件夹有多个工作簿,工作簿中有相同格式的多个sheet表,其中有两个固定的SHEET需要打印(所有EXCEL工作簿表格中两个固定SHEET的名字相同)。每次打开这么多文档,再将表格一个个打印很繁琐,有什么快捷的方法可以直接打印这个文件夹下所有EXCEL表中这两个固定的SHEET表内容?

    解决思路:

    1、将要打印的工作簿放在同一个文件夹内,如:D:\mywbooks\

    2、使用dir在文件夹中遍历文件,然后打开工作簿,再打印指定的工作表,然后关闭文件。


    EXCEL VBA代码如下:

     

    1. Sub myprint()
    2.     Dim file$, folder$, wb As Workbook
    3.     folder = "D:\mywbooks\"
    4.     file = Dir(folder & "*.xlsx") ’如有其他后辍,可以使用Dir(folder & "*.xls*")
    5.     Do While file <> ""
    6.         Set wb = GetObject(folder & file)
    7.         wb.Worksheets("sheet1name").PrintOut
    8.         wb.Worksheets("sheet2name").PrintOut
    9.         wb.Close
    10.         set wb=nothing
    11.         file = Dir
    12.     Loop
    13. End Sub

    或者使用如下方法:

     

     

    1. Sub myprint()        
    2.     Dim file$, folder$, wb As Workbook, sht As Worksheet        
    3.     folder = "D:\mywbooks\"        
    4.     file = Dir(folder & "*.xlsx") '如有其他后辍,可以使用Dir(folder & "*.xls*")        
    5.     Do While file <> ""        
    6.        With Workbooks.Open(folder & file)        
    7.             For Each sht In .Sheets                    
    8.                    If sht.Name = "sheet1name" Or sht.Name = "sheet2name" Then sht.PrintOut            
    9.             Next sht                    
    10.             .Close                
    11.         End With        
    12.         file = Dir
    13.     Loop
    14. End Sub
       

     

     

     

    展开全文
  • 了解更多,观看视频1、准备工作打开Excel后新建一个工作簿,将sheet1工作表标签重命名为"控制面板",删除sheet2、sheet3保存,在"控制面板"的A1至A36单元格内依次输入"七⑴、七⑵、七⑶、七⑷、七⑸、七⑹、七⑺、七...

    了解更多,观看视频

    1、准备工作

    打开Excel后新建一个工作簿,将sheet1工作表标签重命名为"控制面板",删除sheet2、sheet3保存,在"控制面板"的A1至A36单元格内依次输入"七⑴、七⑵、七⑶、七⑷、七⑸、七⑹、七⑺、七⑻、七⑼、七⑽、七⑾、七⑿、八⑴、八⑵、八⑶、八⑷、八⑸、八⑹、八⑺、八⑻、八⑼、八⑽、八⑾、八⑿、九⑴、九⑵、九⑶、九⑷、九⑸、九⑹、九⑺、九⑻、九⑼、九⑽、九⑾、九⑿",将作为新插入的工作表标签名称。

    2、批量创建工作表

    右击"控制面板"工作表标签,在弹出的快捷菜单中选择"查看代码"命令,打开VBA窗口,将下面的代码复制到其中即可。

    Sub CreateSheet()

    ' 创建多个指定名称的工作表,工作表名称必须放在sheet1的第一列

    Dim k As Integer, ShuMu As Integer, Obsht As Worksheet

    ShuMu = 36 '要创建的工作表数量,可根据需要修改

    Set Obsht = Sheets(1)

    For k = 1 To ShuMu

    Worksheets.Add , Worksheets(ThisWorkbook.Worksheets.Count)

    ActiveSheet.Name = Obsht.Cells(k, 1)

    ' 根据sheet1的第一列中数据重命名工作表名称

    Next

    Set Obsht = nothing

    End Sub

    将光标置于将代码中,按F5键将自动创建36个工作表,并且工作表标签名称依次从七⑴一直到九⑿。

    3、如何控制工作表的显示与隐藏

    ⑴下面通过录制一段宏来了解VBA如何控制工作表的显示与隐藏:在"开发工具"选项卡"代码"组中单击"录制宏"按钮,弹出"录制新宏"对话框,指定宏名和保存位置,单击"确定"按钮。

    a07753da9b4e7cc28e334714d34c82df.png

    “录制新宏“对话框

    ⑵选择七⑴至七⑿工作表标签,右击,在弹出的快捷菜单中选择"隐藏"命令,这时12张工作表被隐藏了,在"开发工具"选项卡"代码"组中单击"停止录制"按钮,进入VBA窗口,发现多了一个"模块",选中其中的"模块1"有下面一段代码:

    Sub 宏1()

    Sheets(Array("七⑴", "七⑵", "七⑶", "七⑷", "七⑸", "七⑹", "七⑺", "七⑻", "七⑼", "七⑽", "七⑾", "七⑿")). Select

    Sheets("七⑿").Activate

    ActiveWindow.SelectedSheets.Visible = False

    End Sub

    上面代码就三行:

    第一行就是选中七⑴至七⑿12个工作表;第二行是"七⑿"工作表为活动工作表;第三行就是将所有选中的工作的Visible 属性设置为False,此时工作表就被隐藏不可见了,如果设置为True就以显示了。但是直接修改Visible 属性设置为True会发生如下错误:

    d6bded559ed4881a70e4b8ae65ccc6b8.png

    代码运行错误提示

    发生错误的原因是隐藏的工作表无法选中,自然无法将Visible 属性设置为True。我们要在此基础上对代码进行修改优化。

    4、代码修改与优化

    将宏1代码修改如下:

    Sub 宏1()

    Dim i As Integer, s

    s = Array("七⑴", "七⑵", "七⑶", "七⑷", "七⑸", "七⑹", "七⑺", "七⑻", "七⑼", "七⑽", "七⑾", "七⑿")

    For i = 0 To 11

    Worksheets(s(i)).Visible = True

    Next

    End Sub

    代码第一行:定义两个变量一个整型变量i和变体型变量s;

    代码第二行:将常量数组赋值给变体型变量s;数组下标从0开始,即s(0)表示"七⑴",依次类推s(11)表示"七⑿",而Worksheets(s(0))就指"七⑴"工作表,依次类推Worksheets(s(11))就指"七⑿"工作表。

    代码第三至五行:For-Next循环,i从0至11即将从"七⑴"至"七⑿"工作表的Visible 属性设置为True,从而显示它们。

    5、新问题新矛盾

    每次要显示或隐藏工作表都要进入VBA窗口,还要根据实际情况手动修改Visible 属性,或为True或为False,更不方便。

    ⑴插入命令按钮,将宏指定给该按钮,或者双击命令按钮,将代码复制。

    选中"控制面板"工作表,在"开发工具"选项卡"控件"组中单击"插入"按钮,选择"命令按钮"类型,然后按下鼠标左键拖曳画出一个"CommandButton1"按钮,右击该按钮,在弹出的快捷菜单中选择"属性"命令,在"属性"面板中将名称修改为"CmdQi",将Caption修改为"隐藏七年级班级表",如下图:

    32e31d7dba9c9fcdc5b94b61ee1f29a5.png

    插入命令按钮闰修改其属性

    ⑵双击该按钮,进入VBA窗口,并有下图显示

    f96920558f28f484208ec99867a770e3.png

    命令按钮的click事件过程

    将下面的代码复制粘贴到两行中间得到下图:

    9fcb7a3a1b7d9e9e1f55eb79548ebc27.png

    显示与隐藏工作表代码

    核心代码就是中间选中的条件判断区域,根据按钮"CmdQi"的Caption属性来判断,要设置显示或隐藏工作表,如果是"隐藏七年级班级表",则要隐藏工作表,要将所有范围内的工作表的Visible属性设置为False,同时"CmdQi"的Caption属性要修改为"显示七年级班级表"。如果是"显示七年级班级表",则要显示工作表,要将所有范围内的工作表的Visible属性设置为True,同时"CmdQi"的Caption属性要修改为"隐藏七年级班级表"。这里引入了一个布尔变量blnLook很好的解决了这个问题。

    6、注意:

    如果"开发工具"选项卡没有显示,单击"文件"→"选项"命令,打开"Excel 选项"对话框,在"自定义功能区"选项卡右侧勾选"开发工具"后单击"确定"按钮,如下图:

    f412383cb322a1afcaf3099d4bd2d13e.png

    启用“开发工具”选项卡

    展开全文
  • 通过excel VBA代码中的application.getopenfilename打开选择文件窗口,通过MultiSelect:=True参数允许同时选择多个文件,通过定义变量X,将选择的文件名(含路径赋值给X,后指定每个X1在变更集X中,)如何实现通过VBA...
  • 在用vba处理多个excel文件时,经常会遇到需要...但是如果只是要过滤每个Excel文件内的工作表名称,满足指定条件的工作表名称才需要打开处理时,如果还是逐个打开来判断,效率就低了,如果再遇到每个excel文件都比...

    983556108135b481d502ed788e8f2088.png

    在用vba处理多个excel文件时,经常会遇到需要遍历不同的excel文件。

    如果是需要对每个excel文件都执行某些动作,那可以用Workbooks.Open方法逐个打开excel文件,然后编写要执行的动作代码,最后保存后关闭。

    但是如果只是要过滤每个Excel文件内的工作表名称,满足指定条件的工作表名称才需要打开处理时,如果还是逐个打开来判断,效率就低了,如果再遇到每个excel文件都比较庞大,逐个打开那就更加悲剧了,加载数据都需要消耗较长的时间

    比如现在手上有100多个Excel工作簿,需要用vba判断是否有工作表名称含"统计"两个字的工作簿然后打开对其执行一系列操作,应该如何操作才比较高效呢?

    今天介绍一种用ado技术实现的方法,可以在不打开excel工作簿的情况下就可以获取到其内部的excel工作表名称,代码如下:

    Sub exceloffice()    Dim sFN As String    '获取要读取工作表名称的excel工作簿    sFN = Excel.Application.GetOpenFilename()    If Len(sFN) Then        Dim arrName()        Dim objCatalog        Set objCatalog = VBA.CreateObject("ADOX.Catalog")        Dim sVersion As String        sVersion = Excel.Application.Version        Dim sConStr As String        '创建连接字符串,不同的excel版本使用不同的连接字符串        If sVersion <= 12 Then            sConStr = "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=" & sFN & ";Extended Properties='Excel 8.0;HDR=YES'"        Else            sConStr = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" & sFN & ";Extended Properties='Excel 12.0;HDR=YES'"        End If        Dim oConStr        Set oConStr = VBA.CreateObject("ADODB.Connection")        '使用Connection连接数据源        oConStr.Open sConStr        With objCatalog            '关联Connection对象            Set .ActiveConnection = oConStr            Dim oTable            For Each oTable In .Tables                Dim sName As String                sName = oTable.Name                '提取工作表名称                If Right(sName, 1) = "$" Then                    Debug.Print sName                    ReDim Preserve arrName(k)                    '将工作表名称存在数组中                    arrName(k) = Left(sName, Len(sName) - 1)                    k = k + 1                End If            Next        End With        Set oConStr = Nothing        If UBound(VBA.Filter(arrName, "统计")) >= 0 Then            MsgBox "存在名称为【统计】的excel工作表"        Else            MsgBox "不存在名称为【统计】的excel工作表"        End If    End IfEnd Sub

    限于篇幅,上述代码仅举例了如何对任意一个选中的excel工作簿,不打开提取其内部的excel工作表名称,然后将工作表名称保存在数组arrName中。

    如果是多个excel工作簿,只需要添加循环遍历的代码即可。

    这里再额外介绍下ado技术,ado是一种专门用于访问不同数据源内数据的技术,通过ado我们可以在同一个软件内访问各种不同的外部数据源。

    但是实现的前提需要提供访问数据源的钥匙,通过钥匙搭建与外部数据源之间连接的桥梁,这个钥匙就是连接字符串

    不同的外部数据源有不同的连接字符串,比如针对Excel 2003版本的外部数据源,可以使用如下的连接字符串

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes";

    对于Excel 2007(含 2007) 以上的外部数据源,可以使用如下的连接字符串:

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties=Excel 12.0;HDR=YES";

    对于各种不同的外部数据源对应的连接字符串可以在

    https://www.connectionstrings.com/

    这个网站都找到各种不同的数据源对应的连接字符串。

    a6183fad85542bed1d1125ea21eff6a1.png

    展开全文
  • 双击打开汇总文件.xls(当然我们也可以随便新建一个excel文档),按ALT+F11打开VBE编辑器,新建一个模块,粘贴如下代码:Option ExplicitSub mergeonexls() '合并多工作簿中指定工作表On Error Resume NextDim x As ...
  • VBA代码实例---批量新建工作表模板

    千次阅读 2017-04-19 09:59:41
    在工作中,经常需要用到一个操作:批量生成工作表工作表名字指定。下面写一个VBA,希望能达成如下功能: 1、转移性好,可以直接复制使用; 2、不限制重复,并且以此排序; 3、批量新建工作表; ¤操作步骤¤ ...
  • 时不时有同学问,一个工作簿中每天一份报表,一个月下来30份报表需要汇总成一张表,每个月都要复制,粘贴,复制,粘贴……还有的是有很多个格式一样的表位于不同的工作簿中,需要合并到一个工作表里,需要打开,复制...
  • Sheets("评级审批表").PrintOut Copies:=ol '打印指定工作表 ActiveWorkbook.Save '保存当前工作簙 ActiveWorkbook.Close '关闭当前工作簙 Next i '打开下一个工作簙 Else MsgBox "没有找到任何工作簿文件" '...
  • 1、打开表格文件from openpyxl import load_workbook wb = load_workbook(r"文件路径工作簿文件全名")2.... 读取指定的sheet页sheet1 = wb['指定工作表的名字']4.单元格的使用#写 sheet1.cell(row...
  • Excel VBA指定列插入分页,纯干货

    千次阅读 2018-04-25 02:18:40
    (1)做一个工作表工作表内容如下表 (2)ALT+F11调出开发工具窗口 (3)对象鼠标右键-&gt;新建模块-&gt;双击打开模块 (4)复制下面pageBreak代码到模块里 (5)F5执行 在提示框输入A试一下效果,不...
  • 在EXCEL的VBA中提供了一个ExecuteExcel4Macro函数,可以用于运行Excel工作表中的指定宏。关于ExecuteExcel4Macro函数的用法具体详见MSDN上的描述。在Python中,对Excel表格的操作需要借助于win32com.client模块...
  • 在用vba处理多个excel文件时,经常会...但是如果只是要过滤每个Excel文件内的工作表名称,满足指定条件的工作表名称才需要打开处理时,如果还是逐个打开来判断,效率就低了,如果再遇到每个excel文件都比较庞大,逐...
  • 在Excel中通过VBA编码,制做了一个小程序,功能是"修改指定文件夹包括子文件中文件后缀名".说明:Excel的sheel1列A中存放了后缀名,不能删除。否则窗口中的下拉框没有值。该程序的特点是用VBA调用外部批处理代码...
  • 比如,当我们进行跨工作簿数据查询及汇总时,在不打开相关工作簿的情况下,如何快速遍历指定工作簿每个工作表的名称?——Connection对象的OpenSchema方法可以帮助我们解决此类问题;它可以从提供者获取数据库模式的...
  • 谢谢寻欢,原来核心就是GETOBJECT,特帖帮助内容,与大家分享:GetObject 函数示例该示例使用 GetObject 函数来获取对指定的 Microsoft Excel 的工作表 (MyXL) 的引用。它使用工作表的 Application 属性来显示或关闭...
  • 此宏解决的痛点:多个表格字段相同,需要手工一个个打开之后复制合并到一个上面的难题。宏使用方式:如下代码贴到VBE编辑器里后,不需任何修改即可直接使用。使用前确保要合并的Excel放置在同一个文件夹内,点击宏...
  • 功能描述:合并当前文件夹下面所有excel,包括每一个工作簿与每一个工作簿下面的每一个工作表 步骤: 1、所有表的每个sheet需要表头一致; 2、所有表需要放在一个文件夹下面; 3、该程序会合并当前文件夹下面...
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧48 保存指定工作表为工作簿文件 12 技巧49 打印预览时不触发事件 12 技巧50 设置工作簿文档属性信息 12 技巧51 不打开工作簿取得其他工作簿数据 12 51-1 使用公式 12 51-2 使用GetObject函数 12 51-3 隐藏...
  • 此宏解决的痛点:多个表格字段相同,需要手工一个个打开之后复制合并到一个上面的难题。宏使用方式:如下代码贴到VBE编辑器里后,不需任何修改即可直接使用。使用前确保要合并的Excel放置在同一个文件夹内,点击宏...
  • 如果你想强制指定一个工作表(例如 封面)作为打开后首先显示的工作表,可以通过vba实现。 按ALT+F11 双击thisworkbook 粘贴下面的代码 Private Sub Workbook_Open() Sheets("想要一打开就显示的工作表名").Select...
  • 此宏解决的痛点:多个表格字段相同,需要手工一个个打开之后复制合并到一个上面的难题。宏使用方式:如下代码贴到VBE编辑器里后,不需任何修改即可直接使用。使用前确保要合并的Excel放置在同一个文件夹内,点击宏...
  • vba常用英文

    2014-10-26 17:02:30
    vba语句 (1) Option Explicit '强制对模块内所有变量进行声明 (2) Option Base 1 '指定数组的第一个下标为1 (3) On Error Resume Next '忽略错误继续...(14) ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表
  • VBA编程技巧大全

    2013-08-05 09:03:19
    技巧48 保存指定工作表为工作簿文件 116 技巧49 打印预览时不触发事件 118 技巧50 设置工作簿文档属性信息 120 技巧51 不打开工作簿取得其他工作簿数据 121 51-1 使用公式 121 51-2 使用GetObject函数 122 51-3 隐藏...
  • VBA与数据库

    2015-11-19 18:07:38
    1-10 利用工作表数据创建数据表(ADOX) 18 1-11 利用工作表数据创建数据表(ADO+SQL) 21 1-12 利用工作表数据创建数据表(DAO) 23 1-13 利用已有的数据表创建新数据表(ADO) 25 1-14 利用已有的数据表创建新数据...
  • 以WPS 2019版本为例:关于excel怎么快速合并多个工作表数据到一个工作表,您可使用WPS参考下述步骤zd完成操作:1、打开「表格(Excel)」文档;2、点击「数据-合并表格-多个工作表合并成内一个工作表」;3、勾选需合并...
  • 1、 通过菜单及VBA刷新数据(1) 打开工作簿时刷新(2) 每几分钟刷新(3) 按需刷新,删除连接ThisWorkbook.Connections("查询-表名").RefreshThisWorkbook.Connections("查询-表名").Delete请注意这个连接名称不单是单独...
  • Excel_VBA教程

    2014-09-22 11:36:34
    第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...
  • 比如,当我们进行跨工作簿数据查询及汇总时,在不打开相关工作簿的情况下,如何快速遍历指定工作簿每个工作表的名称?——Connection对象的OpenSchema方法可以帮助我们解决此类问题;它可以从提供者获取数据库模式的...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

vba打开指定工作表