精华内容
下载资源
问答
  • 实现对工作簿中的工作表标签匹配,并对其中的数据进行加工处理,用到了循环遍历,及文件输出Dim MyPath Sub ClickThere() ' 得到当前活动工作簿的根目录 MyPath = ActiveWorkbook.Path & "\" Close #1 ' 打开文件 ...

    实现对工作簿中的工作表标签匹配,并对其中的数据进行加工处理,用到了循环遍历,及文件输出

    Dim MyPath
    Sub ClickThere()
    '   得到当前活动工作簿的根目录
        MyPath = ActiveWorkbook.Path & "\"
        Close #1
    '   打开文件
        Open MyPath & "test.txt" For Output As #1
    '   填充数据
    '    Call FillNum("ADS")
    '    Call FillNum("SDS")
    '    Call FillNum("RDM")
        Dim sh1 As Worksheet
    '   匹配工作表名并调用对应sub
        For i = 1 To Workbooks(1).Worksheets.Count
            Workbooks(1).Activate
            Set sh1 = ActiveWorkbook.Worksheets(i)
            sh1.Activate
            sheetName = sh1.Name
            If sheetName = "OPT" Then
                Call OptionSub
            ElseIf sheetName = "FTP" Then
                Call FTPSub
            ElseIf sheetName = "ODS" Then
                Call ODSSub
            ElseIf sheetName = "DDS" Then
                Call DDSSub
            ElseIf sheetName = "ADS" Then
                Call ADSSub
            ElseIf sheetName = "SDS" Then
                Call SDSSub
            ElseIf sheetName = "RDM" Then
                Call RDMSub
            End If
        Next i
        Close #1
    End Sub
    '遍历工作表中的数据,并输出到文件
    Sub OptionSub()
        Dim OPTNum As Integer
    '   得到有效数据行
        OPTNum = Sheets("OPT").[B65536].End(xlUp).Row
    '   循环控制,读取单元格数据
        For i = 1 To OPTNum
            S = Sheets("OPT").Range("B" & i).Text
            Print #1, S
        Next i
    End Sub
    Sub FTPSub()
        Dim FTPnum As Integer
        FTPnum = Sheets("FTP").[B65536].End(xlUp).Row
    '    taskname,D,10,FTP,,ftpdownload,taskdely
        Print #1, "###FTP层"
        For i = 2 To FTPnum
            taskName = Sheets("FTP").Range("B" & i).Text
            taskRely = Sheets("FTP").Range("C" & i).Text
            taskCycle = Sheets("FTP").Range("D" & i).Text
    '       设置默认值
            If Len(Trim(taskCycle)) = 0 Then
                taskCycle = "D"
            End If
            Print #1, taskName & "," & taskCycle & ",10,FTP,,ftpdownload," & taskRely
        Next i
    End Sub
    Sub ODSSub()
        Dim ODSnum As Integer
        ODSnum = Sheets("ODS").[B65536].End(xlUp).Row
    '   taskName,D,9,ODS,taskRely,olload,taskRely
        Print #1, "###ODS层"
        For i = 2 To ODSnum
            taskName = Sheets("ODS").Range("B" & i).Text
            taskRely = Sheets("ODS").Range("C" & i).Text
            taskCycle = Sheets("ODS").Range("D" & i).Text
            If Len(Trim(taskCycle)) = 0 Then
                taskCycle = "D"
            End If
            Print #1, taskName & "," & taskCycle & ",9,ODS," & taskRely & ",olload," & taskRely
        Next i
    End Sub
    Sub DDSSub()
        Dim DDSNum, ADSNum As Integer
        Dim j As Integer
        DDSNum = Sheets("DDS").[B65536].End(xlUp).Row
        ADSNum = Sheets("ADS").[B65536].End(xlUp).Row
    '   taskName,D,8,DDS,taskRely,olcall,
        Print #1, "###DDS层"
        For i = 2 To DDSNum
            taskName = Sheets("DDS").Range("B" & i).Text
            taskRely = Sheets("DDS").Range("C" & i).Text
            taskCycle = Sheets("DDS").Range("D" & i).Text
            If Len(Trim(taskCycle)) = 0 Then
                taskCycle = "D"
            End If
            ADSRely = ""
            For j = 2 To ADSNum
                ADSTN = Sheets("ADS").Range("C" & j).Text
                If taskName = ADSTN Then
                    ADSTag = SelectNum("ADS", j)
                    ADSRely = ADSRely & "|ADS" & ADSTag
                End If
            Next j
            Print #1, taskName & "," & taskCycle & ",8,DDS" & ADSRely; "," & taskRely & ",olcall,"
        Next i
    End Sub
    Sub ADSSub()
        Dim ADSNum, SDSNum, RDMNum As Integer
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
        ADSNum = Sheets("ADS").[B65536].End(xlUp).Row
        SDSNum = Sheets("SDS").[B65536].End(xlUp).Row
        RDMNum = Sheets("RDM").[B65536].End(xlUp).Row
    '   taskName,D,7,ADS,taskRely,olcall,
        Print #1, "###ADS层"
        ADSFlag = ""
        For i = 2 To ADSNum
            taskName = Sheets("ADS").Range("B" & i).Text
            taskCycle = Sheets("ADS").Range("D" & i).Text
            taskTagNum = SelectNum("ADS", i)
            If Len(Trim(taskCycle)) = 0 Then
                taskCycle = "D"
            End If
            If ADSFlag <> taskName Then
                ADSRely = ""
                For j = 2 To ADSNum
                    ADSTN = Sheets("ADS").Range("C" & j).Text
                    If taskName = ADSTN Then
                        ADSTag = SelectNum("ADS", j)
                        ADSRely = ADSRely & "|ADS" & ADSTag
                    End If
                Next j
                For k = 2 To SDSNum
                    SDSTN = Sheets("SDS").Range("C" & k).Text
                    If taskName = SDSTN Then
                        SDSTag = SelectNum("SDS", k)
                        ADSRely = ADSRely & "|SDS" & SDSTag
                    End If
                Next k
                For l = 2 To RDMNum
                    RDMTN = Sheets("RDM").Range("C" & l).Text
                    If taskName = RDMTN Then
                        RDMTag = SelectNum("RDM", l)
                        ADSRely = ADSRely & "|RDM" & RDMTag
                    End If
                Next l
                Print #1, taskName & "," & taskCycle & ",7,ADS" & ADSRely; ",@ADS" & taskTagNum & ",olload,"
            End If
            ADSFlag = taskName
        Next i
    End Sub
    Sub SDSSub()
        Dim SDSNum, RDSNum As Integer
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        SDSNum = Sheets("SDS").[B65536].End(xlUp).Row
        RDMNum = Sheets("RDM").[B65536].End(xlUp).Row
    '   taskName,D,6,SDS,taskRely,olcall,
        Print #1, "###SDS层"
        SDSFlag = ""
        For i = 2 To SDSNum
            taskName = Sheets("SDS").Range("B" & i).Text
            taskCycle = Sheets("SDS").Range("D" & i).Text
            taskTagNum = SelectNum("SDS", i)
            If Len(Trim(taskCycle)) = 0 Then
                taskCycle = "D"
            End If
            If SDSFlag <> taskName Then
                SDSRely = ""
                For j = 2 To SDSNum
                    SDSTN = Sheets("SDS").Range("C" & j).Text
                    If taskName = SDSTN Then
                        SDSTag = SelectNum("SDS", j)
                        SDSRely = SDSRely & "|SDS" & SDSTag
                    End If
                Next j
                For k = 2 To RDMNum
                    RDMTN = Sheets("RDM").Range("C" & k).Text
                    If taskName = RDMTN Then
                        RDMTag = SelectNum("RDM", k)
                        SDSRely = SDSRely & "|RDM" & RDMTag
                    End If
                Next k
                Print #1, taskName & "," & taskCycle & ",6,SDS" & SDSRely; ",@SDS" & taskTagNum & ",olcall,"
            End If
            SDSFlag = taskName
        Next i
    End Sub
    Sub RDMSub()
        Dim RDMNum As Integer
        Dim i As Integer
        RDMNum = Sheets("RDM").[B65536].End(xlUp).Row
    '   taskName,D,5,RDM,taskRely,olload,taskRely
        Print #1, "###RDM层"
        RDMFlag = ""
        For i = 2 To RDMNum
            taskName = Sheets("RDM").Range("B" & i).Text
            taskCycle = Sheets("RDM").Range("D" & i).Text
            taskTagNum = SelectNum("RDM", i)
            If Len(Trim(taskCycle)) = 0 Then
                taskCycle = "D"
            End If
            If RDMFlag <> taskName Then
                Print #1, taskName & "," & taskCycle & ",5,RDM,@RDM" & taskTagNum & ",olcall,"
            End If
            RDMFlag = taskName
        Next i
    End Sub
    
    Sub FillNum(sheetName As String)
        Dim num As Integer
        totalNum = Sheets(sheetName).[B65536].End(xlUp).Row
        flag = Sheets(sheetName).Range("B2").Text
        Sheets(sheetName).Range("e1") = "标签序列"
        num = 1
        For i = 2 To totalNum
            taskName = Sheets(sheetName).Range("B" & i).Text
            If flag <> taskName Then
                num = num + 1
            End If
            flag = taskName
            Sheets(sheetName).Range("e" & i) = num
        Next i
    End Sub
    
    Sub test()
        t = SelectNum("RDM", 12)
        MsgBox t
    End Sub
    Function SelectNum(sheetName As String, totalNum As Integer)
        flag = Sheets(sheetName).Range("B2").Text
        num = 1
        For i = 2 To totalNum
            taskName = Sheets(sheetName).Range("B" & i).Text
            If flag <> taskName Then
                num = num + 1
            End If
            flag = taskName
        Next i
        SelectNum = num
    End Function
    展开全文
  • VB操作Excel时,如何遍历工作簿中的工作表,并将每张工作表的名字显示出来? Set xlAppFilter = CreateObject("Excel.Application") '创建EXCEL应用类 Set xlBookFilter = xlAppFilter.Workbooks.Open...
  • 对【常用小代码201】中的代码稍加修改,即可批量将工作簿的完整名称提取到当前工作表的A列。代码如下:Sub kjxgbooks() Dim p$, f$, k& With Application.FileDialog(msoFileDialogFolderPicker) .Al...

    今天我们分享的内容是按指定条件批量删除Excel工作簿,但在删之前,我们自然需要先知道相关文件夹内都有哪些工作簿?

    对【常用小代码201】中的代码稍加修改,即可批量将工作簿的完整名称提取到当前工作表的A列。

    代码如下:


    Sub kjxgbooks()

    Dim p$, f$, k&

    With Application.FileDialog(msoFileDialogFolderPicker)

    .AllowMultiSelect = False

    If .Show Then p = .SelectedItems(1) Else: Exit Sub

    End With

    If Right(p, 1) <> "" Then p = p & ""

    [a:b].ClearContents

    k = 1

    [a1] = "目录"

    [b1] = "是否删除"

    f = Dir(p & "*.xls*")

    Do While f <> ""

    k = k + 1

    Cells(k, 1) = p & f

    f = Dir

    Loop

    End Sub


    使用以上代码可以将指定文件夹内的工作簿名称提取到表格的A列,如下图所示。

    55796309485c96a41bf1c16d88a95741.png

    之后在表格的B列,咱们可以通过排序、筛选、以及函数等方式,灵活快捷的对A列的工作簿名称判断是否需要删除,如需删除,在B列标注为“删除”。

    f067134dcac584e924445586af8025ae.png

    最后通过以下代码对判断的结果进行删除操作:


    Sub Delbooks()

    Dim r, i&

    r = [a1].CurrentRegion '数据区域装入数组r

    For i = 2 To UBound(r) '遍历数组r

    If r(i, 2) = "删除" Then Kill r(i, 1)

    '如果B列的值为删除,则杀死相关文件。

    Next

    End Sub


    小贴士:

    本文第二段代码通过Kill语句从磁盘删除文件,它的语法是

    Kill pathname

    参数pathname是必须的,一个字符串表达式,用来指定要删除的文件名,可以包含目录或文件夹以及驱动器,可以使用通配符指定多个文件。比如,删除D:看见星光下的所有包含“星光”的Excel工作簿,代码如下:

    Kill "D:看见星光*星光*.xls*"

    星号(*)是通配符,可以代替零到多个字符。

    细心的您也许会问,为什么是.xls*,而不是.xls?

    在Kill眼中xls和xlsx以及xlsm是截然不同的,如果是.xls,则Kill语句只杀死后缀名为.xls的工作簿。

    图文作者:看见星光

    展开全文
  • 昨天从知乎上学会EXCEL批量把一个表格中的不同数据复制到多个格式相同表格中的同一位置,非常实用方便,今天又在想,怎样把这些工作表合并到一个工作表中?又从知乎上得到了答案,感谢知乎的老师,现在收藏如下:...
    利文物语记录生活

    天气预报说:

    今冬是一个寒冬。

    那就让北方干洌的冷来得痛快些吧!

    昨天从知乎上学会EXCEL批量把一个表格中的不同数据复制到多个格式相同表格中的同一位置,非常实用方便,今天又在想,怎样把这些工作表合并到一个工作表中?又从知乎上得到了答案,感谢知乎的老师,现在收藏如下:

    (作者:运营菌

    链接:https://www.zhihu.com/question/20366713/answer/1514642143

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。)

    首先明确工作簿和工作表的区别:

    下图我们是工作簿:

    d29c971b10355e4aa19ad3e9e667f001.png

    下图是工作表:

    44d53d21d6d1290613190dc90108a825.png

    工作开始:

    用VBA合并工作表

    01.打开VBA的编辑器,【开发工具】【Visual Basic】

    becee3c98f0fd607a0bbb1f4f1f2113f.png

    02.进入VB编辑器,双击选择This workbook 对象下,复制以下代码进去:

    56c794fb13368c1cbbed282ea6b16e7e.png

    以下为代码:

    Sub 合并当前工作簿下的所有工作表()
    Dim ws As Worksheet
    Dim sh As Worksheet, i%
    On Error Resume Next '如遇错误继续运行
    Application.ScreenUpdating = False '关闭屏幕刷新
    Application.DisplayAlerts = False '禁用警告提示
    Worksheets("汇总").Delete '删除原汇总表
    Set ws = Worksheets.Add(before:=Sheets(1)) '新建工作表
    ws.Name = "汇总" '新建工作表命名为汇总
    For Each sh In Sheets: '遍历所有工作表
    If sh.Name <> "汇总" Then '判断工作表是否为汇总表
    i = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 '获取汇总表中A列数据区域最后一行的行号+1
    sh.UsedRange.Copy '复制分表中的数据
    ws.Cells(i, 1).PasteSpecial Paste:=xlPasteAll '粘贴数据
    ws.Cells(i, 1).PasteSpecial Paste:=xlPasteColumnWidths '粘贴列宽
    End If
    Next
    Application.DisplayAlerts = True '恢复警告提示
    Application.ScreenUpdating = True '开启屏幕刷新
    MsgBox "工作表合并完毕"
    End Sub

    03.粘贴完成后,按F5运行,即可合并该工作簿下的所有工作表。

    是不是特简单?

    这是我合并的表格:

    666721fb066f867d2e7bef9adbcf3287.png

    展开全文
  • 在用vba处理多个excel文件时,经常会...但是如果只是要过滤每个Excel文件内的工作表名称,满足指定条件的工作表名称才需要打开处理时,如果还是逐个打开来判断,效率就低了,如果再遇到每个excel文件都比较庞大,逐...
    cde6ca6d69e8aaff818b7e7ed81dd5dd.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:myFoldermyExcel2007file.xlsx;Extended Properties=Excel 12.0;HDR=YES";

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

    https://www.connectionstrings.com/

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

    ba65c8d3b5c0a91fc950c32b7bd0d1fa.png
    展开全文
  • vb中定义一个dictionary,作用类似java中的map。 遍历每行的固定cell,如果都是同一个类型的,则将这些同一类的row,加入到一个key。 value使用一个集合,union可以用于合并多个cell rang集合。 代码如下: ...
  • Excel如何自动生成有超链接的Sheet目录?...✔这里我先不给出答案,我给出我来做这个思路:我想到要做目录,首先要对所有的Sheet进行循环遍历,获取Sheet的名字,然后在目录中列出来每个Sheet的名字,并...
  • 帮朋友来写个Excel VBA 以前写过ASP,所以对vb略微熟悉,但VBA 没有仔细研究过。...2 遍历这些关键字,从【总】中查询这个关键字,把这一行后面的内容复制到 【预算】中去 3 把【操作】中制定内容...
  • 计算机技术的发展和普及不仅改变了人们的生活和娱乐方式,也改变了人们的工作方式,这其中最为重要的便是计算机编程技术。现代的设计任务大多通过代码编程交给计算机来完成,其中算法起到了至关重要的作用。可以毫不...
  • 计算机技术的发展和普及不仅改变了人们的生活和娱乐方式,也改变了人们的工作方式,这其中最为重要的便是计算机编程技术。现代的设计任务大多通过代码编程交给计算机来完成,其中算法起到了至关重要的作用。可以毫不...
  • asp.net知识库

    2015-06-18 08:45:45
    实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP...
  • 9.3 服务器端的VB.NET实现. 9.3.1 定义XML响应格式_ 9.3.2 编写服务器端代码 9.4 显示结果 9.4.1 遍历XML文档 9.4.2 应用CSS 9.5 高级问题 9.5.1 允许多选择查询 9.5.2 将双组合扩展为三组合 9.6 重构 9.6.1 新的和...
  • 23..net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 ...
  • ” 此后,我转向了要求更高的工作——为会说话的未来智能家居开发企业消息中枢(backbone)和各种用户界面组件。我是靠Java方面的技能被录用的,但是很快我又在编写奇妙的JavaScript用户界面了。令人惊奇地是,...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...
  • Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...
  • Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

vb遍历工作表