vba 订阅
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。它也可说是一种应用程式视觉化的 Basic 脚本。1993年由微软公司开发的应用程序共享一种通用的自动化语言--------即Visual Basic for Application(VBA),实际上VBA是寄生于VB应用程序的版本。1994年发行的Excel 5.0版本中,即具备了VBA的宏功能。 展开全文
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。它也可说是一种应用程式视觉化的 Basic 脚本。1993年由微软公司开发的应用程序共享一种通用的自动化语言--------即Visual Basic for Application(VBA),实际上VBA是寄生于VB应用程序的版本。1994年发行的Excel 5.0版本中,即具备了VBA的宏功能。
信息
启发语言
Visual Basic,QuickBASIC
外文名
Visual Basic for Applications
操作系统
Microsoft Visual,Mac OSX
简    称
VBA
发行时间
1993年
释    义
Visual Basic的一种宏语言
语言属性
应用程序一种通用的自动化语言
中文名
Visual Basic宏语言
功    能
扩展Windows的应用程式功能
具备功能时间
1994
VBA概述
Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。 [1]  VBA是基于 Visual basic发展而来的,与VB具有相似的语言结构。从语言结构上讲,VBA是VB的一个子集,它们的语法结构是一样的。两者的开发环境也几乎相同。但是,VB是独立的开发工具,它不需要依附于任何其他应用程序,它有自己完全独立的工作环境和编译、链接系统。VBA却没有自己独立的工作环境,它必须依附于某一个主应用程序,VBA专门用于Office的各应用程序中,如Word、 Excel、 Access等。在 Access中,可以通过VBA编写模块来满足特定的需要。 [1]  正是由于VBA与主应用程序的这种关系,使得它与主程序之间的通信变得简单而高效。它与 AutoCAD完全共享内存空间,所以执行速度比用C语言开发的ADS应用程序要快很多。 [2]  VBA提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。它的编写是以子过程和函数为单位,在 Access中以模块形式出现。 [1]  Office取得巨大成功的一个重要原因就是VBA,使用VBA可以完成很多事情,基于Excel、Word的VBA小程序不计其数。Office中的应用程序可以共享VBA语言,如果掌握了在 Excel 2016中使用VBA的方法,那么在Word、Power Point中使用VBA自然会变得易如反掌。掌握对VBA语言的使用,可以让复杂的工作简易化,减少不必要的重复性工作,大大提高我们的工作效率。 [3]  VBA程序员很多是业余程序员,正因为业余,解决的却是工作中需要解决的问题;所以,VBA程序大多都是只是在部门内部或个人使用的小工具。集成了VBA的其他应用程序也很多,但真正能为程序增色的不多。 [1]  大多数人看到了VBA可以自动化一个程序,可以扩展已有程序,但没有看到在Office中,VBA代码可以是录制的,而不是写出来的,带来的好处是,学习曲线变得非常缓。如果没有宏录制功能,要熟悉某个Office组件的对象模型,绝非一日之功。 [1]  以ArcGIS为例,ArcGIS扩展必须使用ArcObject,不管是使用VBA也罢,VB也罢,还是C++也罢。但同时,ArcObject的学习不是一天两天可以搞定,对于业余程序员,要使用VBA来扩展ArcGIS,几乎没有可能;专业程序员又不屑使用VBA;而对于公司,如果要基于ArcObject来扩展ArcGIS,选择VBA意味着源码的保护很困难。所以,ArcGIS的VBA就如同鸡肋。 [1]  VBA 是基于Visual Basic 发展而来的,它们具有相似的语言结构。Visual Basic 是Microsoft 的主要图形界面开发工具,VBA 5.0 (亦即VBA 97)则是Visual Basic 5.0 的子集。Visual Basic 是由Basic 发展而来的第四代语言。Visual Basic 作为一套独立的 Windows 系统开发工具,可用于开发Windows 环境下的各类应用程序,是一种可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。VB 的程序语言简单、便捷,利用其事件驱动的编程机制,新颖易用的可视化设计工具,并使用Windows应用程序接口(API)函数,采用动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)以及开放式数据库访问(ODBC)等技术,可以高效、快速地编制出 Windows 环境下功能强大、图形界面丰富的应用软件系统。 [1]  Visual Basic 程序很大一部分以可视(Visual)形式实现,这意味着在设计阶段就可以看到程序运行的屏幕画面,用户可以在设计时能够方便地改动画面图像、大小、颜色等,直到满意为止。VB 的用户可以是缺乏Windows 及C 语言开发经验的专业软件人员,也可以是具有一定Windows开发经验的专业人员,VB 的可视化编程方法使得原来繁琐枯燥、令人生畏的Windows 应用程序设计变得轻松自如、妙趣横生。以往的Windows 应用程序开发工具在设计图形用户界面时,都是采用编程的方法,并伴随大量的计算任务,一个大型应用程序约有90%的程序代码用来处理用户界面,而且在程序设计过程中不能看到界面显示的效果,只有在程序执行时才能观察到,如果界面效果不佳,还需要回到程序中去修改。Visual Basic 提供了新颖的可视化设计工具,巧妙地将Windows界面设计的复杂性封装起来,程序开发人员不必再为界面设计而编写大量程序代码,仅需采用现有工具按设计者要求的布局,在屏幕上画出所需界面,并为各图形对象设置属性即可,VB 自动产生界面设计代码,这样便将事先编制好的控件可视地连接到一起,构成一个随时可调整的界面。 [1]  VBA 不但继承了VB 的开发机制,而且VBA 还具有与VB 相似的语言结构,它们的集成开发环境IDE(Intergrated Development Environment)也几乎相同。但是,经过优化,VBA 专门用于Office 的各应用程序。VB 可运行直接来自Windows 95 或NT 桌面上的应用程序,而VBA 的项目(Project)仅由使用VBA 的Excel、Word、 PowerPoint 等称为宿主(Host)的Office 应用程序(Application)来调用。 [1]  1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化。 [3]  2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序。 [3]  3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的父应用程序,例如EXCEL。 [3]  4.VBA是VB的一个子集。 [3]  尽管存在这些不同,VBA和VB在结构上仍然十分相似。事实上,如果你已经了解了VB,会发现学习VBA非常快。相应的,学完VBA会给学习VB打下坚实的基础。而且,当学会在EXCEL中用VBA创建解决方案后,即已具备在WORD ACCESS OUTLOOK FOXPRO POWERPOINT 中用VBA创建解决方案的大部分知识。 [3]  * VBA一个关键特征是你所学的知识在微软的一些产品中可以相互转化。 [3]  * VBA可以称作EXCEL的“遥控器”。 [3] 
收起全文
精华内容
参与话题
问答
  • VBA Excel实战

    2011-11-17 14:55:44
    为了帮朋友实现Excel中的一个功能,接触了VBA Excel。历经两天的时间,现将最终结果存档。 参考资料 vba excel编程三日谈 实现功能 在Excel文档中,当第一列为“是”,则右边6个单元格不可编辑且背景色改变;当...

        

    为了帮朋友实现Excel中的一个功能,接触了VBA Excel。历经两天的时间,现将最终结果存档。

    参考资料

    vba excel编程三日谈

    实现功能

    在Excel文档中,当第一列为“是”,则右边6个单元格不可编辑且背景色改变;当第一列为“否”,则右边6个单元格可编辑且背景色恢复白色。

    准备工作

    新建一个Excel文档,选中第一列,按照下图设置数据有效性:

    代码

    Private Sub Worksheet_Change(ByVal Target As range)
        
        If Target.Column = 1 Then
        
            Dim editable As Boolean
            Dim rowNumber As Integer
            Dim columnNumber As Integer
            Dim rag As range
                    
            rowNumber = Target.Row
            columnNumber = Target.Column
            Set rag = range(Cells(rowNumber, columnNumber + 1), Cells(rowNumber, columnNumber + 6))
                                
            If Target.Text = "是" Then
               
                editable = False
     
                rag = ""
                With rag.Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .TintAndShade = -0.149998474074526
                    .PatternTintAndShade = 0
                End With
                
            End If
            
            If Target.Text = "否" Then
      
                editable = True
                
                With rag.Interior
                    .Pattern = xlNone
                    .TintAndShade = 0
                    .PatternTintAndShade = 0
                End With
            
            End If
            
            With rag.Validation
                .Delete
                .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=editable
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .IMEMode = xlIMEModeNoControl
                .ShowInput = True
                .ShowError = True
            End With
            
        End If
        
    End Sub
    
    
    


     

    展开全文
  • Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Address = "$f$5" Then Image1.Picture = LoadPicture(ThisWorkbook.Path & "\照片\" & Trim(Target.Value) & ".jpg") ...
  • vba excel 画折线图

    千次阅读 2018-08-08 10:45:52
    vbs:  Sub dttp() On Error Resume Next Dim rowend&, arr, i&, myShap As Shape, str As String, lastcol As Integer rowend = Range("a" & Rows.Count).End(xlUp... ...

    vbs: 

    Sub dttp()
        On Error Resume Next
        
        Dim rowend&, arr, i&, myShap As Shape, str As String, lastcol As Integer
        
        rowend = Range("a" & Rows.Count).End(xlUp).Row
        
        Shapes("违约分布").Delete
        
        Set myShap = Shapes.AddChart
        myShap.Name = "违约分布"
        
        lastcol = ActiveSheet.UsedRange.Columns.Count
          
        Dim MyNumber
        MyNumber = Asc("A")
        
        MyNumber = MyNumber + lastcol - 1
        
        Dim MyChar
        MyChar = Chr(MyNumber)
        
        
        str = "B2 :" & MyChar
        
        With myShap.Chart
            .ChartType = xlLine
            .HasTitle = True
            .ChartArea.Height = ActiveSheet.UsedRange.Rows.Count * 2
            .ChartArea.Width = lastcol + 600
            .ChartTitle.Characters.Text = "违约分布"
            .SetSourceData Source:=Range(str & rowend), PlotBy:=xlRows
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "概" & Chr(10) & "率"
            .Axes(xlValue).AxisTitle.Orientation = xlHorizontal
              ' 更改图表2的水平类别轴的轴标签区域.
             .SeriesCollection(1).XValues = "=Sheet1!$A$1:$H$1"
            For i = 1 To ActiveSheet.UsedRange.Rows.Count
              With myShap.Chart
               .SeriesCollection(i).Name = ActiveSheet.Range("A" & i + 1)
              End With
            Next i
        
        End With
    
    End Sub

     

    展开全文
  • vba excel 单元格格式设置

    千次阅读 2017-01-12 10:49:04
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)  Cells.Font.ColorIndex = xlAutomatic  Dim x As Range  For Each x In ActiveSheet.UsedRange  If x.Value = ActiveCell.Value An
    
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Cells.Font.ColorIndex = xlAutomatic
        Dim x As Range
        For Each x In ActiveSheet.UsedRange
        If x.Value = ActiveCell.Value And x.Value <> "" Then
        x.Font.Color = vbRed
        x.Font.Size = 14
        x.Font.Bold = True
        End If
        Next
    End Sub
    在这找的,但这个会同值的都会变,我只要选中的那个单元格,怎么改?
    另加一点,当选其它后,刚选的那个单元格变回原样
    展开全文
  • VBA Excel 高级筛选AdvancedFilter

    千次阅读 2014-03-27 17:16:32
    最近在网上找到了一些比较好的关于AdvancedFilter应用的例子,总结和分享如下: expression.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique) ...该表达式返回“应用于”列表中的对象之一。...
    最近在网上找到了一些比较好的关于AdvancedFilter应用的例子,总结和分享如下: 
    

    expression.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)

    expression 必需。该表达式返回“应用于”列表中的对象之一。

    Action XlFilterAction 类型,必需。

    XlFilterAction 可为以下 XlFilterAction 常量之一。
    xlFilterCopy
    xlFilterInPlace

    CriteriaRange Variant 类型,可选。条件区域。如果省略本参数,则没有条件限制。

    CopyToRange Variant 类型,可选。如果 ActionxlFilterCopy,则本参数指定被复制行的目标区域。否则忽略本参数。

    Unique Variant 类型,可选。如果为 True,则重复出现的记录仅保留一条;如果为 False,则筛选出所有符合条件的记录。默认值为 False

    例子:(看附件)

    VBA <wbr>Excel <wbr>高级筛选AdvancedFilter应用实例总结

    Sub Macro1()

    Range("A1:D12").Select

    Range("A1:D12").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _

    "F5:I6"), CopyToRange:=Range("K1"), Unique:=False

    End Sub

    总结:

    在条件设定中:

    1. 同一行的各条件是“and”的关系

    2.不同行间是“or”的关系

    3. 条件列标题要和原来表格的一致

    4. VBA条件范围时要注意,在选定多行范围时,空单元格也是一个条件,如本例,如果只选定“F5I6”,那只有“F6and "G6"的共同条件, 但如果选F5I7”,而第7行为空,则在以上条件下,还要考虑 or ""的条件 (相当于全选)


    原文载于:http://blog.sina.com.cn/s/blog_4ae507470100zd54.html    作者:长风破浪
    展开全文
  • VBA Excel曲线图批量生成

    千次阅读 2018-06-22 15:50:08
    根据大量数据批量生成折线图,以下代码为根据不同proj_name与region,绘制以时间为横坐标,size为纵坐标,不同种类数据的折线图。iRows = ActiveSheet.UsedRange.Rows.Count proj_name_first = "...
  • 引言 我们还是要回顾下我们要干什么?我们的目标是做一个具有查询及显示查询结果的工具。上一章介绍了窗体及其属性、事件、方法等,这个东西只能算是画个查询条件的框框,里面的具体查询条件怎么填呢。...
  • 引言 本人本次实践的目标是数据查询。具体实现方式应该是: 使用窗体及其他控件做查询的条件的输入 使用excel作为查询结果的输出 从桌面上看应该是,...在VBA中也有,可以打开excel->开发工具 点开Visu...
  • VBA Excel 2007 画饼图

    千次阅读 2013-06-05 22:09:36
    1、在当前激活的sheet数据上画图,数据区域为A2:B6,运行效果如下: 2、源代码 Sub AddChart() '画饼图 ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType ... ActiveChart.SetSourceData Sou
  • 一个excel文件其实就是一个excel工作簿,所以只需要使用workbook的open()方法。 '使用workbook的open()方法,当打开excel时窗口就会马上执行 Private Sub Workbook_Open() UserForm1.Show End Sub '窗体的初始化 ...
  • VBA Excel 直接增加任意名字sheet

    千次阅读 2008-08-25 17:09:00
    VBA编程的时候我们增加sheet的时候一般都是先增加,再改名字Sheets.Addsheets(1).name = "newName" 原来还可以直接增加某个名字的sheetSheets.Add.Name = "newName" 另外Range拷贝的时候如果不是激活的sheet ,rang...
  • 之前已经描述分别描述了Excel VBA的窗体、控件和Excel本身的对象(也就是数据的承载者)。本章主要描述Excle VBA中如何将控件和excel中的数据相关联。 一、如何关联已有的Excel文档和VBA 其实这个就是如何使用Vba...
  • vba excel编程三日谈(1)

    万次阅读 多人点赞 2010-06-09 14:28:00
    最近由于要修改一个excel report,见识了vba的强大。 这个report是一个大牛3年前写的,每天只需打开该文件, 就会自动连接oracle的dev和uat数据库读取最新的市场数据, 生成6个透视图,并比较dev和uat的数据的异同。...
  • VBA EXCEL 对象操作 - 新建工作表

    万次阅读 2012-02-28 10:27:19
    From http://club.excelhome.net/forum.php?mod=viewthread&tid=470603&page=23#pid3118642 新建一个工作表(Worksheet),要调用工作表(Worksheet对象)的Add方法(可以建制一个新建工作表的宏来查看相关的...
  • vba设置单元格字体,以下是设置给定单元格内字体的加粗,单元格填充灰色等,参数是Range对象 Sub font_sty(Rng As Range) Rng.Select Selection.Font.Bold = True With Selection.Interior .Pattern = xlSolid...
  • VBA Excel 插入图片(非引用方式)

    万次阅读 2017-05-03 16:32:52
    引用的方式插入图片ActiveSheet.Pictures.Insert(imgPath)这种方式插入的图片只是引用而已,当图片被删除、移动时,excel文件中的图片将会找不到资源位置。非引用方式插入图片worksheet.Shapes.AddPicture("C:\\GW...
  • vba excel编程三日谈(3)

    千次阅读 2010-06-10 14:15:00
    本文将讲解vba连接数据库读取数据,更新数据, vba创建透视图.vba连接数据库读取数据,更新数据使用adodb通过windows系统提供的datasource, 即可连接各类数据库并进行crud操作.通过控制面板->Administrative Tools ->...
  • vba excel编程三日谈(2)

    万次阅读 2010-06-09 17:55:00
    表格基本操作由于表格操作内容繁多, 本文将以例子为主演示一些常用的操作.下面的例子将演示怎么遍历worksheet,选中worksheet,添加worksheet,删除worksheet.Sub test8() Dim sh As Worksheet ...
  • 【实例】VBA excel 隔行插入行与列

    千次阅读 2018-03-14 15:18:15
    参考:https://jingyan.baidu.com/article/d621e8da25177a2865913fb5.html效果代码Sub 插入空列() For i = 1 To 20 '20即插入20列 Cells(1, 2 * i).Select '(1,2*i)即在第1行,2*i列处插入 Selec...
  • 这两天把Access移植到MySQL上,遇到个问题,始终报错说-----80004005 - 未找到数据源名称并且未指定默认驱动程序 ...直接配的后果就是excel中找不到。 做法就是:运行 C:\Windows\SysWOW64\odbca...
  • 在网上看了很多教程,VBA怎么把图片通过ACCESS数据库的OLE对象传到数据库。结果全是其他语言写的。我今天用VBA 实现一下以下功能:代码前需引用 Microsoft Activex Data Objects x.x 库 1,把图片保存到ACCESS...
  • vba excel学习系列(三)---事件过程

    千次阅读 2018-05-24 20:27:57
    添加事件 禁止和使能事件 要注意的是Worksheet_Change事件,当在该事件处理函数中对sheet进行修改是,会连续触发该事件,导致溢出,所以需要设置一个标志,在修改sheet之前清标志,使下一次不再修改sheet。...
  • 从单元格获取数据获取sheet名字为 “sheetname”的表格中的第一行第五列的值 赋值给变量aa = Sheets("sheetname").Cells(1, 5).value修改单元格数据修改sheet名字为 “sheetname”的表格中的第一行第五列...
  • http://zhidao.baidu.com/question/205789958.html
  • excel中批量创建超链接代码(连接当前文档中的sheet),在sheet1中B列中要创建一系列的超链接,链接的内容是本文档中的其他sheet,如下图,在sheet1下创建宏,代码如下。 Sub 宏1() Dim temp, temp2 Dim i, j ...
  • VBA代码编写,如何在工作表区域内查找某个值,发回这个值所在的行号、列号 spwangxu | 浏览 7128 次 推荐于2016-01-03 11:29:18 最佳答案 1 2 3 4 5 6...
  • 笔者最近在做一个数据库项目,其中需要从EXCEL中提取关键字段。提取内容如下图所示,需要将图中加粗部分单独提出后进行去噪处理。如果通过word处理,文字量小的时候尚可实现,但几十万字的处理量很容易就造成假死。...
  • 一小时搞定 简单VBA编程 Excel宏编程快速扫盲

    万次阅读 多人点赞 2018-01-19 09:45:19
    1. Excel VBA编辑界面 (进入路径: sheet名称 --> 鼠标右键菜单 --> 查看代码) 2. 输入代码方法: 在VBE编辑器的代码模块中输入VBA代码,通常有以下几种方法: ■手工键盘输入; ■使用...

空空如也

1 2 3 4 5 ... 20
收藏数 266,592
精华内容 106,636
关键字:

vba