精华内容
下载资源
问答
  • 工具可以将excel vba编写的程序 转换为可执行文件, 软件于2006-11-1进行了更新: 1).改进了超链失效的BUG.. 2).启动界面取消了置顶
  • 将您的VBA程序进行快速加密,方便用户进行将代码封装
  • Excle也能编程-VBA工具

    千次阅读 2017-02-06 23:40:50
    工作中有用到,就学习了一下VBA编程。发现这个真的可以使得Excle工作效率倍增。 工作需求,为照片粘贴档案条。需要将一条条数据,转换为小纸片并且按照特殊样式排序。 完成后像这样其实要完成这个还是比较简单的。...

    工作中有用到,就学习了一下VBA编程。发现这个真的可以使得Excle工作效率倍增。
    工作需求,为照片粘贴档案条。需要将一条条数据,转换为小纸片并且按照特殊样式排序。
    完成后像这样这里写图片描述

    其实要完成这个还是比较简单的。
    主要说说自己遇到的几个“坑”
    1.此次样式用到了“模板”,并不是完全靠代码来调整出来的。
    2.想用插件-窗口来封装“转换”操作。但是发现窗口不行,所以后面用到窗体中的按钮来实现。
    3.因为要符合打印纸的格式,所以样式调了好一会儿。

    首先建立标签的模板
    这里写图片描述
    像这样,在最右边建立相应的模板样式。

    接下来就是编辑窗体代码了!
    窗体代码

    Dim a As Integer '声明一个公共变量
    Private Sub UserForm_Initialize()
    With Me
    StartUpPosition = 0
    Left = 600
    Top = 50
    End With
    End Sub
    
    Private Sub CommandButton1_Click()
        Call 生成档案条
        UserForm1.Hide
    End Sub
    Sub 生成档案条()
        Sheets(2).Activate
        Sheets(2).PageSetup.PrintArea = ""
        Dim MaxRow As Long '声明变量
        a = 0
        Application.ScreenUpdating = False
        MaxRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
        Cells(1, Columns.Count - 2).Resize(4, 3).Copy
        '将档案条模板粘贴到A列,且粘贴的份数由工资表的行数决定
        Range("a1:C" & (MaxRow - 1) * 4).PasteSpecial xlPasteAll
        Range("a1:C" & (MaxRow - 1) * 4).PasteSpecial xlPasteColumnWidths
        Range("a1:C" & (MaxRow - 1) * 4).PasteSpecial xlPasteFormulas
        Dim rowHigh As Range
        Dim rowHighBase As Range
        Dim HighBase As Integer
        For i = 1 To MaxRow * 4
            HighBase = i Mod 4
            If HighBase = 0 Then
                HighBase = 4
            Else
                HighBase = i Mod 4
            End If
            Set rowHigh = Rows(i)
            Set rowHighBase = Rows(HighBase)
            rowHigh.RowHeight = rowHighBase.RowHeight
        Next
        For i = 2 To MaxRow '循环复制数据
            复制数据 (i) '调用“复制数据”过程,将工资表的信息复制到工资卡中
        Next
    Call 排版 '调用过程'排版'
        Application.ScreenUpdating = True
    End Sub
    Sub 复制数据(i As Integer)
    '将‘档案的数据’填入每一份档案卡中
        Dim id As String
        id = Sheets(1).Cells(i, 2) & "." & Format(i - 1, "0000")
        Cells(4 * a + 1, 2) = id
        Cells(4 * a + 2, 2) = Sheets(1).Cells(i, 5)
        Cells(4 * a + 3, 2) = Sheets(1).Cells(i, 16)
        a = a + 1
    End Sub
    Private Sub 排版()
        lrow = 1
        drow = 0
        Application.ScreenUpdating = False
        Dim MaxRow As Long, c As Long
        MaxRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row '记录已用区域的行数
        c = Int(MaxRow / 2 + 1) '计算拆分成两列后纵向需要排列多少份
        For i = 1 To c '横向复制7次
            Range(Cells(c * (i) * 4 + 1, 1), Cells(Int(MaxRow / 2 + 1) * (i + 1) * 4, 3)).Copy
            '粘贴到右边一列
            Cells(1, i * 3 + 1).PasteSpecial xlPasteAll
            Selection.PasteSpecial xlPasteColumnWidths '选择性粘贴列宽
        Next
        Rows((c * 3 + 1) & ":" & Rows.Count).Clear
        
        'Dim rng As Range
        'Set rng = Rows(1) '将第一行赋予变量
        'For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row + 1 Step 4
        '遍历所有行,步长为4
        '    Set rng = Union(rng, Rows(i)) ' 将Rng与第一行合并,即获得所有工资卡中的间隔行
        'Next
        'rng.RowHeight = 40
        '将 A 列到 F列的已用区域为打印区域
        Sheets(2).PageSetup.PrintArea = "$A$1:$F$" & Cells(Rows.Count, "A").End(xlUp).Row
        '页边距设置为0
        With Sheets(2).PageSetup
             .LeftMargin = Application.InchesToPoints(0) '左边距
            .RightMargin = Application.InchesToPoints(0)  '右边距
            .TopMargin = Application.InchesToPoints(0) '上边距
            .BottomMargin = Application.InchesToPoints(0) '下边距
            .HeaderMargin = Application.InchesToPoints(0) '页眉
            .FooterMargin = Application.InchesToPoints(0) '页脚
            .Orientation = xlPortrait '设置纵向打印模式
        End With
        ActiveWindow.View = xlPageBreakPreview ' 进入分页浏览状态
        '删除每页最上面多出来的一行
        Do While drow < MaxRow * 3 \ 2
            drow = lrow * 28
            Rows(drow).RowHeight = 20
            lrow = lrow + 1
        Loop
        'ActiveSheet.PageSetup.Orientation = xlLandscape '将页面设置为横向
        'ActiveWindow.View = xlPageBreakPreview ' 进入分页浏览状态
        'If ActiveSheet.VPageBreaks.Count > 0 Then '如果有纵向分页符'
            '将第一个分页符向右拖出'
        '    ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
        'End If
        Application.ScreenUpdating = True '恢复屏幕刷新
    End Sub
    
    Private Sub UserForm_Click()
    
    End Sub
    
    

    VBA虽然承袭了VB的代码,感觉有点儿坑。但是能让excle能够编程,并表现的更加自动化,真是比国产WPS强太多!

    展开全文
  • 使用VB对VBA开发的窗体进行封装成DLL,窗体作用:根据配置的Excel基础数据表,在其他工作表中使用模糊查询赋值(当使用 序列 时,如果列表很长时,可以使用该工具
  • 封装我们的VBA代码

    2008-11-30 12:30:18
    VBA在代码的保护上存在着缺陷。如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。而且即使设置了密码保护,也很容易被人破解。笔者就曾用破解工具officekey轻松地破解了他人设置的密码保护,不费吹灰之力...
  • Excel VBA 代码加密

    千次阅读 2019-10-29 11:28:49
    1.VBA自带的加密 工具-属性-保护 2.封装到DLL - 封装一部分代码到DLL - 封住一段读文件程序,文件存储到秘密位置 3.smart indenter for vbe

    1.VBA自带的加密
    工具-属性-保护
    2.封装到DLL
    - 封装一部分代码到DLL
    - 封住一段读文件程序,文件存储到秘密位置

    3.smart indenter for vbe

    展开全文
  • 第2部分以编程任务的形式讲述VBA面向对象的特性,使用PowerPoint对象进行任务编程以及使用VBA的类构建对象,代码的封装,运用虚拟类实现类的继承并封装成组件的技术。第3部分重点阐述如何运用各种技术增强VBA语言的...
  • 第2部分以编程任务的形式讲述VBA面向对象的特性,使用PowerPoint对象进行任务编程以及使用VBA的类构建对象,代码的封装,运用虚拟类实现类的继承并封装成组件的技术。第3部分重点阐述如何运用各种技术增强VBA语言的...
  • 第16章介绍了使用VB开发AutoCAD的一些知识(将VBA代码转换到VB中,VB窗体和AutoCAD的焦点切换,使用ActiveXDLL封装带有窗体的VB程序)、搜索某个文件夹中所有的文件和VBAIDE的编程,利用这些知识,完全有可能开发出...
  • 比如利用我封装的这些方法可以很方便地生成导入数据的SQL。 当然熟悉Excel编程的同学还可以直接用VBA写个脚本生成插入数据的SQL。还可以将.xls文件改为.csv文件,然后通过SQLyog或者Navicat等工具导入进来,但是不能...

    今天需要从一个Excel文档(.xls)中导数据到数据库的某表,开始是手工一行行输的。后来想不能一直这样,就用Python写了下面的代码,可以很方便应对这种场景。比如利用我封装的这些方法可以很方便地生成导入数据的SQL。 当然熟悉Excel编程的同学还可以直接用VBA写个脚本生成插入数据的SQL。

    还可以将.xls文件改为.csv文件,然后通过SQLyog或者Navicat等工具导入进来,但是不能细粒度控制(比如不满足某些条件的某些数据不需要导入,而用程序就能更精细地控制了;又比如重复数据不能重复导入;还有比如待导入的Excel表格和数据库中的表的列不完全一致) 。

    我的Python版本是3.0,需要去下载xlrd 3,传送门:

    http://pypi.python.org/pypi/xlrd3/ 然后通过setup.py install命令安装即可

    1.[代码]Python读取Excel数据方法封装

    import xlrd3

    '''

    author: jxqlove?

    本代码主要封装了几个操作Excel数据的方法

    '''

    '''

    获取行视图

    根据Sheet序号获取该Sheet包含的所有行,返回值类似[ ['a', 'b', 'c'], ['1', '2', '3'] ]

    sheetIndex指示sheet的索引,0表示第一个sheet,依次类推

    xlsFilePath是Excel文件的相对或者绝对路径

    '''

    def getAllRowsBySheetIndex(sheetIndex, xlsFilePath):

    workBook = xlrd3.open_workbook(xlsFilePath)

    table = workBook.sheets()[sheetIndex]

    rows = []

    rowNum = table.nrows # 总共行数

    rowList = table.row_values

    for i in range(rowNum):

    rows.append(rowList(i)) # 等价于rows.append(i, rowLists(i))

    return rows

    '''

    获取某个Sheet的指定序号的行

    sheetIndex从0开始

    rowIndex从0开始

    '''

    def getRow(sheetIndex, rowIndex, xlsFilePath):

    rows = getAllRowsBySheetIndex(sheetIndex, xlsFilePath)

    return rows[rowIndex]

    '''

    获取列视图

    根据Sheet序号获取该Sheet包含的所有列,返回值类似[ ['a', 'b', 'c'], ['1', '2', '3'] ]

    sheetIndex指示sheet的索引,0表示第一个sheet,依次类推

    xlsFilePath是Excel文件的相对或者绝对路径

    '''

    def getAllColsBySheetIndex(sheetIndex, xlsFilePath):

    workBook = xlrd3.open_workbook(xlsFilePath)

    table = workBook.sheets()[sheetIndex]

    cols = []

    colNum = table.ncols # 总共列数

    colList = table.col_values

    for i in range(colNum):

    cols.append(colList(i))

    return cols

    '''

    获取某个Sheet的指定序号的列

    sheetIndex从0开始

    colIndex从0开始

    '''

    def getCol(sheetIndex, colIndex, xlsFilePath):

    cols = getAllColsBySheetIndex(sheetIndex, xlsFilePath)

    return cols[colIndex]

    '''

    获取指定sheet的指定行列的单元格中的值

    '''

    def getCellValue(sheetIndex, rowIndex, colIndex, xlsFilePath):

    workBook = xlrd3.open_workbook(xlsFilePath)

    table = workBook.sheets()[sheetIndex]

    return table.cell(rowIndex, colIndex).value # 或者table.row(0)[0].value或者table.col(0)[0].value

    if __name__=='__main__':

    rowsInFirstSheet = getAllRowsBySheetIndex(0, './产品.xls')

    print(rowsInFirstSheet)

    colsInFirstSheet = getAllColsBySheetIndex(0, './产品.xls')

    print(colsInFirstSheet)

    print(getRow(0, 0, './产品.xls')) # 获取第一个sheet第一行的数据

    print(getCol(0, 0, './产品.xls')) # 获取第一个sheet第一列的数据

    print(getCellValue(0, 3, 2, './产品.xls')) # 获取第一个sheet第四行第二列的单元格的值

    展开全文
  • 使用VBA合并多个Excel文件

    万次阅读 2012-04-29 13:29:29
     今天一同学突然在Q上问起我如何将多个Excel文件合并到一个Sheet文件中,起初我是想通过编程来实现的,因为之前我用C++实现过一个Excel操作类的封装,也用该类实现过一些自动化工具。但考虑到这本来是个很简单的...

    【背景】

           今天一同学突然在Q上问起我如何将多个Excel文件合并到一个Sheet文件中,起初我是想通过编程来实现的,因为之前我用C++实现过一个Excel操作类的封装,也用该类实现过一些自动化工具。但考虑到这本来是个很简单的任务,相信Excel本身应该可以实现,于是度娘了下,找到了可以使用VBA来解决,但网上的代码要不有问题,要不操作不明白,经过摸索,决定写篇文章,让像我一样的小白用户从零来完成任务。

    【过程】

             一、创建E:\test_excel目录,下面放上几个要合并的Excel文件。

          

             二、新打开一个Excel文件,先“开启开发工具”,如下图点击1,选择“Excel选项”,然后在“常用”选项卡中勾选“在功能区显示‘开发工具’选项卡”,保存后,就能看到了。


            三、开启宏,如上图所示,开发工具—宏安全性—宏设置里面。

            四、在Visual Basic里面选择"Sheet1",并编写相应的宏

      

    相关代码:

    'VBA for merge excel files,.just support for Excel 2007
    'Excel 2003 need change the codes
    'Author:naiveloafer
    'Date:2012-04-29
    Sub naiveloafer()
    Dim fs, f, f1, fc, s, x, rowss, columnss
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder("E:\test_excel\") 'Directory of excel files will be merge
    Set fc = f.Files
    x = 1
    
    For Each f1 In fc
    
    If Right(f1.Name, 4) = "xlsx" Then
    Workbooks.Open (f1.Path)
    rowss = Workbooks(f1.Name).Sheets(1).Range("A65536").End(xlUp).Row
    columnss = Workbooks(f1.Name).Sheets(1).Columns.Count
    
    Workbooks(f1.Name).Sheets(1).Range("A1:z" & CStr(rowss)).Copy
    Workbooks(1).Activate
    Workbooks(1).Sheets(1).Range("A" & CStr(x) & ":z" & CStr(x + rowss)).Select
    Workbooks(1).Sheets(1).Paste
    Application.CutCopyMode = False
    
    x = x + rowss
    Workbooks(f1.Name).Close savechanges:=False
    End If
    
    Next
    
    End Sub
    

           五、回到刚才的Excel中,点击宏,选择刚才的宏,运行即可,如果代码没问题,那就能在当前Sheet中显示合并的结果,当然如果你有编程经验可以选择调试才定位问题,修改等。




    展开全文
  • 同时还搭配窗体与控件、正则表达式、字典、FileSystemObject、API、类模块、脚本语言的应用,以及开发功能区、开发加载宏、封装代码等高级应用,力求完整地展示了VBA的功能与魅力。通读本书,您不仅能学到如何开发...
  • python 读取 excel 的方法封装

    千次阅读 2013-05-25 20:00:02
    比如利用我封装的这些方法可以很方便地生成导入数据的SQL。 当然熟悉Excel编程的同学还可以直接用VBA写个脚本生成插入数据的SQL。  还可以将.xls文件改为.csv文件,然后通过SQLyog或者Navicat等工具导入进来,
  • VB封装DLL实例(三)

    千次阅读 2017-02-11 17:40:46
    进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的...
  • ​很久很久以前发的文章《利用Excel批量修改文件名》,没...为了简化过程,我使用了Excel里面的开发工具VBA编程把重命名的过程封装起来,只要填一下文件夹路径、目标文件名,点一下按钮即可实现批量傻瓜式重命名文件...
  • ​很久很久以前发的文章《利用Excel批量修改文件名》,没...为了简化过程,我使用了Excel里面的开发工具VBA编程把重命名的过程封装起来,只要填一下文件夹路径、目标文件名,点一下按钮即可实现批量傻瓜式重命名文件...
  • Excel集成工具箱7.0是利用VBA(Visual Basic for Applications)语言编写的增强应用型插件。包括160个菜单功能和100个左右自定义函数,集160个工具于一身,但体积小于15MB。当安装集成工具箱后,如果您使用Excel ...
  • Excel集成工具箱7.0是利用VBA(Visual Basic for Applications)语言编写的增强应用型插件。包括160个菜单功能和100个左右自定义函数,集160个工具于一身,但体积小于15MB。当安装集成工具箱后,如果您使用Excel ...
  • 自己优化的“月亮FLV合并工具”,基于官方最新版本V 1.42优化,这次真正去掉所有广告,整理界面,使得界面更清爽整洁,属于此网站首发,希望大家踊跃下载,在线查毒网站:http://www.virscan.org下查杀无毒,请放心...
  • 如何提高外部调用Office的速度?

    千次阅读 2011-11-20 22:53:05
    (感觉同事小皮 + 。。。的提醒) ...2. 如果你是一个VBA的爱好者,发现以前在Office中写VBA时,运行速度还不错,但为了给没有装VBA封装成一个exe后,发现速度看起来慢了一些? 为
  • 在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VBA接口的复杂性,而又不失VBA的强大功能,在此...
  • 在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VBA接口的复杂性,而又不失VBA的强大功能,在此...
  • 在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VBA接口的复杂性,而又不失VBA的强大功能,在此...
  • 在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VBA接口的复杂性,而又不失VBA的强大功能,在此...
  • 在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VBA接口的复杂性,而又不失VBA的强大功能,在此...
  • 在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VBA接口的复杂性,而又不失VBA的强大功能,在此...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

vba封装工具