日期 2019年3月 下的文章

VBA对话框批量添加按钮

说明:这篇不是原创内容,来自ExcelHome。时间长了也忘了具体网址了,这里摘录下来方面以后查找。

1.插入一个类模块,命名为MyCla,代码如下:

Public WithEvents Butt As MSForms.CommandButton
Private Sub Butt_Click()
    Dim x, y As Integer  
    strs = Split(Butt.Tag, "|")
    x = strs(0)
    y = strs(1)
End Sub

2.插入一个用户窗体UserForm1,代码如下:

Private Sub UserForm_Initialize()
    Dim i, j As Integer
    '画按钮,默认隐藏
    For i = 0 To MAPHEIGHT - 1 '行
        For j = 0 To MAPWIDTH - 1 '列
            Set buttons(i, j).Butt = UserForm1.Controls.Add("Forms.Commandbutton.1")
            With buttons(i, j).Butt
                .Caption = ""
                .Height = 18
                .Width = 18
                .Tag = i & "|" & j
                .PicturePosition = 12
                .Visible = False
                '.Caption = i & j
                If i = 0 Then
                    .Top = 10
                Else
                    .Top = buttons(i - 1, j).Butt.Top + 18
                End If
                If j = 0 Then
                    .Left = 150
                Else
                    .Left = buttons(i, j - 1).Butt.Left + 18
                End If
            End With
        Next
    Next
End Sub

效果图:

VBA入门基础(二)

之前提了一下用VBA做个推箱子游戏,当然这个纯属是拿来练手做教程用的,如果真的用vba来做游戏估计你让你搞到吐,Excel真心不合适做游戏!

一、准备工作(开启Excel宏支持)

说明:因需要通过Excel宏实现相应功能,所以使用前必须确保宏命令可以正常执行。本次通过Excel 2016演示宏命令启动,其他版本office基本相同,可参考执行。


1.启动Excel 2016,打开文件菜单



2.点击选项



3.点击信任中心,打开信任中心设置(T)...



4.点击宏设置,将宏设置选择为启用所有宏(不推荐:可能会运行有潜在危险的代码)(E)。(注意:此处选择为禁用所有宏,并发出通知(D)也可以,在首次启动是手动选择运行宏即可)

二、基本概念

概念解释是根据个人理解解释的,更准确的表示请自行找度娘

Workbook 工作簿

一个打开的Excel相当于一个Workbook,当前workbook可以用ThisWorkBook表示,或者Workbooks("名称")。

worksheet 工作表

每个打开的workbook西方看到的就是sheet,一个workbook至少有一个worksheet。

工作表可以用名称表示,也可以用序号,比如worksheets(“名称”)或worksheet(1)

Range 区域

可以是一个单元个,多个连续单元格或不连续单元格,如Range(“A1”),Range(“A:Z)

Cells 单元格

Cells是指单元格和Range不同的之处在于Cells是用的参数,Cells(行,列)。比如A1单元格表示为Cells(1,1)。

sub,定义一个过程,可以直接运行

比如:

sub test()
    Thisworkbook.Worksheets(1).Range("A1")="A1"
end sub

function,定义一个函数,只能被调用不能直接运行

function test1()
    ThisWorkbook.Worksheets(1).cells(1,1)="A1"
end function

三、开始使用vba。

启动Excel,打开或新建一个Excel文件,按Alt+F11,在左侧工程面板点右键,插入-模块

点击模块1,在下方属性区域可以修改名称。

四,注意事项

1.标点符号请使用英文输入法下的标点符号
2.尽可能给代码添加注释,这个好习惯在代码很长的项目中会让你深有感受
3.vba代码不区分大小写,比如str和Str是一样的,不过为了方便维护,建议统一风格
4.vba默认情况下变量不用声明即可使用,例如:

str = “heollo VBA”
msgbox(str)

如果项目比较大,你会为此付出惨痛代价,比较单词输入错误了,系统不会提示任何错误。建议开启变量要求声明功能。
点击工具,选项,勾选要求变量声明。

开启该功能后,新插入的模块会多出来一句Option Explicit,再运行声明的代码会提示出错。需要改一下:

Option Explicit

Sub test5()
Dim str As String
str = "Hello VBA!"
MsgBox (str)
End Sub

或者

Option Explicit

Sub test5()
Dim str  = "Hello VBA!"
MsgBox (str)
End Sub

给office添加功能按钮

这篇文章秉承拿来主义思想,学会复制粘贴使用即可,不做理论上的讲解,想深入学习的同学自行百度Ribbon,XML相关知识。
这篇文章主要介绍一下怎样给office菜单功能添加自定义的功能。在起名字的时候纠结了一下,本想直接写成《Microsoft Ribbon菜单功能区添加自定功能》,怕大家看到E问头皮发麻,就写了个很土但是能看懂的名字。

一、准备工作

几篇参考文档:
1.Customizing the 2007 Office Fluent Ribbon for Developers https://docs.microsoft.com/zh-cn/previous-versions/office/developer/office-2007/aa338199(v=office.12)
2.VSTO二次开发PowerPoint之:XML方式创建Ribbon并自定义图标https://blog.51cto.com/yangfandev/1404925

office功能区添加自定义功能实质上是通XML添加的,这里推荐一个工具方便编辑修改XML文件。
OfficeCustomUIEditorSetup(2010支持中文编辑).rar
OfficeidMsoViewer,本工具用于查看Office内置控件的idMso属性。
OfficeidMsoViewer.zip

二、开始动工

1.启动Excel文件,新建一个Excel文件,另存为xlsm格式,关闭Excel。


查看图示


2.启动Custom UI Editor For Microsoft Office软件,打开刚才保存的Excel文件。

查看图示


3.依次点击Inset-Sample XML-Excel-A Custom Tab

查图示



最终效果


4.保存,双击打开Excel文件查看效果。

查看图示

三、解释

在XML中:
id相当于给每个模块定义的名称,必须唯一不能重复。
label是相应空间在tab上显示的名称。
size控件打开,可以是large和small。
onAction控件点击后执行的事件名称。



1.固定格式部分,用于声明,使用过程中不用修改。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon>

    </ribbon>
</customUI>



2.Excel上面整个功能区都属于tabs,是tab的集合。开始、插入、页面布局...这些都属于tab。

        <tabs>
            <tab id="customTab" label="Contoso" insertAfterMso="TabHome">

            </tab>
        </tabs>



3.实例中我们插入了一个tab,叫Contoso,在开始tab后面。

<tab id="customTab" label="Contoso" insertAfterMso="TabHome">

</tab>



4.插入6组功能,也就是6个group。其中id为customGroup之中加入了3个按钮。由于版本兼容性问题6个group之中只显示了前3。

                <group idMso="GroupClipboard" />
                <group idMso="GroupFont" />
                <group id="customGroup" label="Contoso Tools">
                    <button id="customButton1" label="ConBold" size="large" onAction="conBoldSub" imageMso="Bold" />
                    <button id="customButton2" label="ConItalic" size="large" onAction="conItalicSub" imageMso="Italic" />
                    <button id="customButton3" label="ConUnderline" size="large" onAction="conUnderlineSub" imageMso="Underline" />
                </group>
                <group idMso="GroupEnterDataAlignment" />
                <group idMso="GroupEnterDataNumber" />
                <group idMso="GroupQuickFormatting" />

vba基础教程(一)

摘要:用过Excel人都应该有这种体会,公式用好了就如神一般的存在,一大堆数据分分钟搞定。但大家却不一定知道另一个神一般存在的东西——vba。公式和vba就像是屠龙刀+倚天剑一样的存在,强大到让你质疑以前学的都是假的。公式是Excel专有的,VBA是Microsoft Office软件都可以用的。一套NB的VBA代码可以通过点一下按钮完成一大堆工作,也有可能看着让你爱机CPU占用率100%几个小时出不了结果...

一、什么是VBA

借用百度百科的一段话解释一下:

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能。(原文链接https://baike.baidu.com/item/VBA/1596798

有点长,通俗点将就是Microsoft office支持的一中脚本语言,语法和VB一致,可以扩展Micsoft office功能。

二、VBA能做什么

能做的太多了...点一下导入数据,点一下弹出个对话框,点一下生成个数据报表...学VBA就是为了解放双手,提高生产力。

说明一下,截图上的这些按钮的实现与VBA没有关系,但是点了按钮以后执行的命令是用VBA写的。如何添加菜单实现功能后面会介绍。

三、学VBA难吗?

如果你学过VB,只需了解一些感念就能入门,
如果你不知道啥是编程,没关系,VBA的语法很简单,没你想象的那么复杂。

四、学VBA花钱不?

学习是免费的,不花钱,网上教程一大把。如果你想花钱的话就买一套正版的Microsoft office吧,这东西绝对比盗版的好用。