精华内容
下载资源
问答
  • Excel_VBA教程

    2014-09-22 11:36:34
    21.在窗体上添加按钮、选项框和其它控件 204 22.更改控件名称 206 23.设置其它控件属性 206 24.准备工作表以储存窗体数据 207 25.显示自定义窗体 208 26.设置TAB顺序 208 27.了解窗体和控件事件 209 28.编写VBA过程...
  • Excel VBA 基础教程

    2019-01-01 18:51:06
    ........................................................................EXCEL环境中基于应用程序自动化的优点................................................................................1 1.3 录制简单的...
  • Excel ActiveX教程(一)

    千次阅读 2016-05-20 17:38:23
    VBA真的是一个很强大的东西,当人家手工黏贴的...不用思考那么多,反正就是一种集成在Excel中的控件,也就是说,你可以在excel表格旁边加一个按钮,别人打开excel表格之后,填几个数字,点一下按钮就可以实现某些功能,

            VBA真的是一个很强大的东西,当人家手工黏贴的时候,你只要编好代码,然后一劳永逸。不过最近发现ActiveX用起来好像更加方便的样子,特别是对于要做简单界面,人性化的应用场景。

           excel中什么是ActiveX?不用思考那么多,反正就是一种集成在Excel中的控件,也就是说,你可以在excel表格旁边加一个按钮,别人打开excel表格之后,填几个数字,点一下按钮就可以实现某些功能,这就是本质。而单纯的VBA其实还是适合后台,当然啦,你也可以做界面,但是,那么low的界面也好意思分离出来么,而且没有activeX方便。

           好了,不说了,上基础教程(一)

    1.打开你的excel,点开发工具选项卡,如果没有的话 自行百度吧。如果有过VB界面或者Qt界面开发经验的,应该很熟悉插入控件这样的事情。

    点击插入之后,有下箭头,然后就可以选择了,建议大家选下面两行里面的,应为这是activeX支持控件,而上面两行则是以前的。稍后的用法也有点点不一样哦。

            我在我的表格中插入了下面这些控件。大家可以一个个自己插入一下看看,熟悉熟悉,具体的是什么功能,想必每一个控件的功能只要看到你就会知道了。

            教程里我们只说最常用的。一般为了方便查询最常用的控件当然是下拉列表,叫做Comobox。还有就是button、textbox、lable。

    2.大家插入之后是不是发现有种无力选中的感觉呢。点击插入旁边的 “设计模式”, 然后“设计模式”图标就会被按下去的感觉,说明在这样的情形下,你是可以编辑控件的,而要退出,就再点击一下 设计模式 然后就是普通的模式了。


    展开全文
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    1.2EXCEL环境中基于应用程序自动化的优点................................................................................1 1.3录制简单的宏....................................................................
  • 首先,我们在新建的C#winform程序页面中的窗体form1中先加入一个按钮button1,将其text属性设置为“insert”;然后再加入一个文本框textBox1以及一个数据表格控件DataGridView1。 需要的引用如下: using System; ...

    今日的记录如标题所示,废话不多说,我们直接讲解步骤。
    首先,我们在新建的C#winform程序页面中的窗体form1中先加入一个按钮button1,将其text属性设置为“insert”;然后再加入一个文本框textBox1以及一个数据表格控件DataGridView1。
    需要的引用如下:

    using System;
    using System.Data;
    using System.Windows.Forms;
    using System.IO;
    using System.Data.OleDb;
    using System.Web.Script.Serialization;
    

    要注意的是,在使用如下引用时

    using System.Web.Script.Serialization;

    要在System.Web.Extensions的引用条件下才行,具体方法如下:
    1、右键“引用”–>>> 添加引用–>>> .NET->>> 选择System.Web.Extensions
    2、 using System.Web.Script.Serialization
    在这里插入图片描述
    在这里插入图片描述
    接下来是代码:

    public partial class Form1 : Form
        {    
            public Form1()
            {
                InitializeComponent();
            }
    
            **String[] aa =new String[2048];**
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Filter = "Excel文件|*.xlsx|所有文件|*.*";
                    ofd.Title = "打开文件夹";
                    string b="";
                    ofd.InitialDirectory = "e:\\";
                    ofd.FilterIndex = 1;
                    if (ofd.ShowDialog() == DialogResult.OK)  //如果点击的是打开文件
                    {
                        
                        b = ofd.FileName;
                    }
                    string tablename = gete(b);               
                    string TSql = "SELECT*FROM[" + tablename + "]";
                    DataTable table = etds(b,TSql).Tables[0];
                    dataGridView1.DataSource = table; //将DataSet类对象table中存储的excel中的值放入
                    **for (int i = 0;i < 2048;i++)
                    {
                        aa[i] = table.Rows[i]["WaveLength"].ToString();
                    }**
                                  
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                
    
            }
    
            
        
        }   
    }
    
    

    首先,我们来看以下代码

    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Filter = "Excel文件|*.xlsx|所有文件|*.*";
                    ofd.Title = "打开文件夹";
                    string b="";
                    ofd.InitialDirectory = "e:\\";
                    ofd.FilterIndex = 1;
    

    文件对话框(FileDialog)主要包括文件浏览对话框,以及用于查找、打开、保存文件的功能,OpenFileDialog即为文件的读入操作类。
    Filter的意思即是设置读入文件的类型,其规则为“文件名|*.后缀”;Title即为弹出的窗体中的按键的text属性值;InitialDirectory即为设置所选文件的限定范围,FilterIndex即为导入文件的数量。

    if (ofd.ShowDialog() == DialogResult.OK)  //如果点击的是打开文件
                    {
                        
                        b = ofd.FileName;
                    }
                    string tablename = gete(b);               
                    string TSql = "SELECT*FROM[" + tablename + "]";
                    DataTable table = etds(b,TSql).Tables[0];
                    dataGridView1.DataSource = table; //将DataSet类对象table中存储的excel中的值放入dataGridView1中
    

    以上代码难点已经标出,具体函数后面会说明,这里就不细说了。注意TSql的创建是为了函数public static DataSet etds(string,string);的调用。

    接下来是两个自己创建的函数的讲解

    public static string gete(string path)
            {
                string tablename = null;
                if (File.Exists(path))
                {
                    using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
                        + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"))
                    {
                        conn.Open();
                        tablename = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();
                    }
                }
                return tablename;
            }
    

    首先是函数public static string gete(string );这个函数的作用是将需要导入的excel文件的具体名称提取出来。

    对于不同的.net数据提供者,ADO.NET采用不同的Connection对象连接数据库。OleDbConneetion连接支持OLE DB的数据库,如Access、excel等。关于"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"的代码在上一篇博客中我说的足够清楚,就不再进行强调了

    
    ```csharp
    conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();
    

    这行代码的作用就是将OleDbConneetion连接的excel文件中数据导入DataSet中

    接下来是另一个函数public static DataSet etds(string ,string)

    public static DataSet etds(string filename,string tsql)
            {
                DataSet ds;
                string strcon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
                    + filename + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
                OleDbConnection myConn = new OleDbConnection(strcon);//带参数的构造方法,传递string类的对象作为参数
                string strcom = tsql;
                myConn.Open();//打开数据库链接
                OleDbDataAdapter mycommand = new OleDbDataAdapter(strcom, myConn);//带参数的构造方法,strcom参数是指定对数据表执行的SQL语句,myConn是数据库的连接对象
                ds = new DataSet(); 
                mycommand.Fill(ds); //使用OleDbDataAdapter对象mycommand将查询结果填充到DataTable对象ds中
                myConn.Close();
                return ds;
                }
    

    这个函数内重要的语句功能都已经进行了标注,再要注意的一点就是若使用OleDbConnection.Open();打开数据库链接,在代码运行结束后就一定要加一个OleDbConnection.Close();

    最后是将DataTable中数据导入String[]。首先是建立一个足够大的String数组aa,长度取决于每个人的需要,这里我的数据铁定为2048个,所以我的String数组的长度为2048。

    String[] aa =new String[2048];
    

    接着是将数据从之前的DataTable中导入String[]的代码。

    for (int i = 0;i < 2048;i++)
                    {
                        aa[i] = table.Rows[i]["WaveLength"].ToString();
                    }
    

    for循环相信没什么人是不知道的,就不多讲了,不懂的可以上网查,重要的是代码aa[i] = table.Rows[i]["WaveLength"].ToString();,这段代码的意思是将名为table的DataTable类数据中的名为“WaveLength”的那一列第i个数据提取了出来。

    这里要注意的是,一般excel的第一行的命名就会默认为列的名字。举个例子,你导入的excel数据表的第一列有“姓名”、“学号”、“成绩”三个量,那么系统在使用这些代码将数据导入进DataTable中后,就会默认这三列的名字为“姓名”、“学号”、“成绩”,假如在“姓名”栏目的第3行为“小明”,那么如果有如下代码
    string bb=table.Rows[3]["姓名"].ToString();//DataTable的名字是table
    那么此时string类数据bb中就会写入“小明”这个字符串。

    那么再来看回这个代码,就能明白它是利用for循环将名为“WaveLength”的列中的1-2048个数据分别写入了String[]类的数据aa[0]~aa[2047]中去了。

    展开全文
  • VBA基础教程 ...Next语句Exit语句With语句调试程序Debug调试IDE调试错误处理事件触发工作簿的事件窗体事件OnTime事件窗体按钮控件文本框控件excel里面的窗体使用 VBA简介 VBA即Visual Basic For Appilication

    VBA基础教程

    VBA简介

    VBAVisual Basic For Appilication,属于VB语言的的子集。

    VBA环境简单介绍

    无论打开多少EXCEL表格,都会共享一个IDE环境。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ9eAzWe-1615651551095)(images/VBA基础教程一/打开VB_IDE.gif)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwXdBfam-1615651551097)(images/VBA基础教程一/image-20210227175708925.png)]
    每一个Excel文件,对应的VBA工程都有4类对象,包括: Microsoft Excel对象、窗体、模块和类模块。

    Microsoft Excel对象 Microsoft Excel对象代表了Excel文件及其包括的工作薄等几个对象,包括所有的 Sheet和一个Workbook,分别表示文件(工作薄)中所有的工作表(包括图表),例如缺省情况下,Excel文件包括3个Sheet,在资源管理器窗口就包括3个 Sheet,名字分别是各Sheet的名字。

    ThisWorkbook 代表当前Excel文件。双击这些对象会打开代码窗口,在此窗口中可输入相关的代码,响应工作薄或者文件的一些事件,例如文件的打开、关闭,工作薄的激活、内容修改、选择等有关事件。

    窗体 窗体对象代表了自定义对话框或界面。

    模块 模块为自定义代码的载体。作用:1.保存过程和函数 2.定义模块内的私有变量或者整个工程的公有变量。

    类模块 类模块则是以类或对象的方式编写代码的载体。

    第一个代码

    插入一个模块,写上如下代码。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZah1rmT-1615651551099)(images/VBA基础教程一/image-20210227181814339.png)]

    Sub MyFirstVBAProgram()
        Dim strName As String
        Dim strHello As String
        strName = InputBox("请输入你的名字:")
        strHello = "你好," & strName & " !"
        MsgBox strHello
    End Sub
    ----------------
    解释:下面我们简单看一下这段代码的组成,代码第1行表示这是一个新的过程,名称为“MyFirstVBAProgram",第2、3行定义了2个变量,其类型为字符串类型,第4行调用InputBox这个内置函数,并将返回值赋给strName这个变量,第5行将几个字符串组合成一个新的字符串,第6行调用MsgBox这个函数,显示一个对话框,第7行表示过程结束。VBA程序由不同的模块组成,在模块内部,可以定义不同的变量、过程或函数,由此组成一个完整的程序。
    
    

    与其他程序设计语言不同,VBA程序是事件驱动的,没有Main函数之类的入口的概念。本质上,VBA代码应该只是一些完成具体工作的集合,而通过界面元素或者Excel的事件驱动执行,你可以通过自定义按钮、菜单,并指定一个宏(VBA过程,自定义界面也可以通过编程手段完成此类工作),通过单击此按钮即可调用相应的VBA代码。

    过程

    过程是最基本的运行单位,格式如下:

    Sub Test()
      ...
    End Sub	
    
    ------------
    [ Private | Public][Static ] Sub name [ (arglist) ]
    [ statements]
    [Exit sub]
    [ statements]
        
     End sub
    
    
    部分 描述
    Public 可选的。表示所有模块的所有其它过程都可访问这个Sub过程。如果在包含Option Private的模块中使用,则这个过程在该工程外是不可使用的。
    Private 可选的。表示只有在包含其声明的模块中的其它过程可以访问该Sub过程。
    Static 可选的。表示在调用之间保留Sub过程的局部变量的值。Static属性对在Sub 外声明的变量不会产生影响,即使过程中也使用了这些变量。
    name 必需的。Sub 的名称;遵循标准的变量命名约定。
    arglist 可选的。代表在调用时要传递给Sub 过程的参数的变量列表。多个变量则用逗号隔开。
    statements 可选的。Sub过程中所执行的任何语句组。

    函数

    从其它过程调用一个过程(Sub)时,必须键入过程名称以及任何需要的参数值。Call语句可有可无,如果使用它,则参数必须以括号括起来。

    [ Public | Private] [static] Function name [ (arglist) ] [As type]
        [ statements]
        [ name = expression]	
        [Exit Function]
        [ statements]
        [name = expression]
    End Function
    
    

    下面的示例展示了调用具有多个参数的Sub 过程的两种不同方法。当第二次调用HouseCalc 时,因为使用Call语句(第3行),所以需要利用括号将参数括起来。

    sub Main ()
    HouseCalc 99800,43100
    Call HouseCalc (380950,49500)
    End sub
    
    
    sub HouseCalc (price As single, wage As single)
        if 2.5 * wage <= 0.8 * price Then
    	MsgBox "You cannot afford this house. "
        Else
    	MsgBox "This house is affordable. "
        End If
    End Sub
    
    

    Answer3 = MsgBox ("Are you happy?",4, "Question 3")

    MsgBox "Task Completed! ", 0,"Task Box"

    如果不在意函数的返回值,可以用调用Sub 过程的方式来调用函数。如下面示例所示,可以省略括号,列出参数并且不要将函数指定给变量:

    基本语法

    变量

    定义变量可以使用Dim语句

    Dim 变量名 As 数据类型
    -----
    变量名命名一般可以这样
    change_name
    函数命名一般这样
    changeName()
    

    数据类型

    数据类型,指变量的特性,用来决定可保存何种数据。数据类型包括 Byte、Boolean、Integer、Long、Currency、Decimal、Single、Double、Date、String、Object、Variant(默认)和用户定义类型等。

    ​ VBA的数据类型、存储空间大小、数值范围

    数据类型 存储空间大小 范围
    Byte 1个字节 0到255
    Boolean 2个字节 True或False
    Integer 2个字节 -32,768到32,767
    Long(长整型) 4个字节 -2,147,483,648 到2,147,483,647
    Single(单精度浮点型) 4个字节 负数时从-3.402823E38到-1.401298E-45;正数时从1.401298E-45到3.402823E38
    Double(双精度浮点型) 8个字节 负数时从-1.79769313486231E308 到一4.94065645841247E-324;正数时从4.94065645841247E-324 到1.79769313486232E308
    Date 8个字节 100 年1月1日到9999年 12月31日
    object 4个字节 任何0bject引用
    String(变长) 10字节加字符串长度 到大约20 亿
    Variant(数字)(字符) 16 个字节 任何数字值,最大可达 Double 的范围
    用户自定义(利用Type) 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同。

    时间函数

    ​ VBA的日期和函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQpAha56-1615651551102)(images/VBA基础教程一/image-20210228112134099.png)]

    字符串

    字符串定义后为空字符串,即没有任何数据的字符串(“”),可以通过以下方式对字符串赋值。字符串在VBA中用双引号表示。

    Mystring = "Hello world."
    MyFixedstring = "This is a fixed string . 
    "MyEmptystring = ""
    

    定长字符串必须是其确定的长度,如果赋值时长度过长或过短,则自动以空格添满或截断。

    字符串的连接可以使用“&”或者“+”,不过不推荐使用后者,因为容易和数字运算混淆。例如可以使用以下语句连接字符串。

    Mystring ="test"
    Mystring = Mystring &" Test Added"
    Mystring = Mystring + " Added still"
    

    字符串处理的常用函数如表2-6所示,各函数的具体使用方法可参考VBA的帮助文档。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgRGkdXE-1615651551109)(images/VBA基础教程一/image-20210228111326468.png)]

    Format格式字符串

    Dim MyTime,MyDate,Mystr
    MyTime = #17:04:23#
    MyDate = #January 27,1993#
    '以系统设置的长时间格式返回当前系统时间。
    Mystr =Format ( Time, "Long Time " )
    '以系统设置的长日期格式返回当前系统日期。
    MyStr = Format (Date, "Long Date")
    Mystr = Format (MyTime,"h :m : s")'返回 "17:4:23"。
    Mystr = Format (MyTime,"hh : mm : ss AMPM")'返回"05:04:23 PM"。
    '如果没有指定格式,则返回字符串。
    MyStr = Format (23)'返回 "23"。
    '用户自定义的格式。
    MyStr = Format (5459.4,"##,##0.00")  ’返回"5,459.40"。
    Mystr = Format (334.9,"###0.00") '返回 "334.90"。
    Mystr = Format (5,"0.00%")'返回"500.00%"。
    MyStr = Format ("HELLO","<")'返回"hello"。
    Mystr = Format ("This is it", ">")'返回"THIS IS IT"。
    
    

    常量

    要声明常量并设定常量的值,需要使用Const语句。常量声明后,不能对它赋一个新的数值。例如,假设需要声明一个常量来保存书本价格,可以使用如下语句:

    Const BOOKPRICE As Long = 23.50
    
    

    运算符

    VBA中的运算符有以下几类运算符:

    1. 算术运算符,用来进行数学计算的运算符;
    2. 比较运算符,用来进行比较的运算符;
    3. 连接运算符,用来合并字符串的运算符;
    4. 逻辑运算符,用来执行逻辑运算的运算符。

    算术运算符

    1. ^运算符:求一个数字的某次方,如A^B;
    2. *运算符:乘法运算;
    3. /运算符:除法运算;
    4. \运算符:对两个数作除法并返回一个整数;
    5. Mod运算符:求两数的余数;
    6. 运算符:加法运算;
    7. -运算符:减法运算;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mLZ5kzMS-1615651551113)(images/VBA基础教程一/image-20210228114618550.png)]

    比较运算符

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ixp7v9xb-1615651551114)(images/VBA基础教程一/image-20210228114654659.png)]

    逻辑运算符

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXaDVbmN-1615651551117)(images/VBA基础教程一/image-20210228114714427.png)]

    运算符比较

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFNO6fyr-1615651551119)(images/VBA基础教程一/image-20210228110647838.png)]

    数组

    数组是具有相同数据类型并且共享同一个名字的一组变量的集合。数组中的元素通过索引数字加以区分。定义数组的语法如下:

    Dim ArrayName (n) A.s Type
    Dim ArrayName (a to b) As Type
    
    

    其中n、a、b是数组中的元素的数目。n表示数组元素为0到n,共n+1个,a表示数组元素最小索引为a,最大为b,元素个数为(b-a+1)个。
    例如,如果要创建保存10个学生名字的数组,可以使用如下语句:

    Dim strstudents (9) As string
    注意,括号中的数字是9而不是10。这是因为在默认情况下,第一个索引数字是0。数组在处理相似信息时非常有用。

    输入和输出

    Sub MyFirstVBAProgram()
        Dim strName As String
        Dim strHello As String
        strName = InputBox("请输入你的名字:")
        strHello = "你好," & strName & " !"
        MsgBox strHello
    End Sub
    

    如果用户单击O或按下Enter键,则 InputBox函数返回文本框中的内容。如果用户单击Cancel,则此函数返回一个长度为零的字符串 ("")。

    控制程序流程

    • 顺序语句:从上到下,由程序的第一行执行到最后一行;
    • 判断分支语句:根据条件跳过部分语句,执行另一部分;
    • 循环语句:循环执行一段语句。

    顺序语句

    顺序语句是最基础的,按照语句一步一步的执行。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-62JQ87H5-1615651551120)(images/VBA基础教程一/image-20210307135851911.png)]

    判断语句

    If...Then..Else语句
    If表达式是根据表达式的值有条件地执行一组语句,如果条件为真,则执行其后的语句,否则到下一个判断条件。其语法为:

    If condition Then [statements][Else elsestatements]
    
    

    或者,可以使用块形式的语法:

    If condition Then
    	[ statements]
    [ElseIf condition-n Then
    [elseifstatements] ...
    [Else
    
    [ elsestatements ] ]
    End If
    
    

    判断条件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHNDC2SD-1615651551122)(images/VBA基础教程一/image-20210228113436731.png)]

    在使用判断语句时,也会使用到以下逻辑运算符。

    1. And运算符:通过“result = expression1 And expression2”使用,如果两个表达式的值都是 True,则result是 True。如果其中一个表达式的值是False,则result是False。
    2. Not运算符:通过“result = Not expression”使用,如果 expression是 Tnue,则返回False,否则返回True。
    3. Or运算符:使用同And运算符,如果两个表达式的值有一个是 Tue,则result是True。如果两个表达式的值都是False,则result是False。

    例子

    Dim Number,Digits,Mystring
    Number = 53
    '设置变量初始值。
    If Number < 10 Then
    	Digits = l
    ElseIf Number < 100 Then
    '若判断结果为True,则完成下一行语句。
    	Digits = 2
    Else
    	Digits = 3
    End If
    
    
    Function Bonus (performance, salary)
        select Case performance
        case l
        Bonus = salary *0.l
        Case 2,3
        Bonus = salary *0.09
        Case 4 To 6
        Bonus = salary *0.07
        Case Is >8
        Bonus = 100
        Case Else
        Bonus = o
        End select
    End Function
    
    --------------
    Sub Discount3 ()
    Dim Quantity As variant
    Dim Discount As Double
    Quantity = InputBox("Enter Quantity: ")
        select Case Quantity
        Case ""
        Exit Sub
        Case 0 To 24
        	Discount = 0.1
        Case 25 To 49
        	Discount = 0.15
        Case 50 To 74
        	Discount = 0. 2
        Case Is >= 75
        	Discount = 0.25
        End select
        MsgBox "Discount: " & Discount
    End Sub
    
    

    循环语句

    For Next语句

    For I = l To 10
    	For J = l To 10
    		For K= l To 10
    			...
    		Next K
    	Next J
    Next I
    
    
    Dim Found,My0bject,MyCollection
    Found = False
    '设置变量初始值。
    For Each Myobject In MyCollection
    '对每个成员作一次迭代。
    	If Myobject.Text = "Hello" Then
    		Found = True
    		′将变量 Found的值设成True。
    		Exit For
    		’退出循环。
    	End If
    Next
    
    

    For Each-Next语句

    在前面的章节中讲过,“集合”是一组相关的对象。例如,Workbooks集合是所有打开的Workbook 对象的集合,还可以使用很多其他的集合。假设要在集合的所有对象上执行某个动作,或要对集合的所有对象求值并在特定条件下采取动作,这些都是使用For Each-Next结构的好机会,因为在使用For Each-Next结构时,不必知道集合中有多少元素。
    For Each-Next结构的语法如下所示:

    For Each element In collection
    [instructions]
    [Exit For]
    [instructions]
    Next [element]
    

    下面的过程在活动工作簿中的 Worksheets集合上使用For Each-Next结构。在执行这个过程的时候,MsgBox 函数显示出每个工作表的Name属性(如果活动工作簿中有5个工作表,就调用MsgBox函数5次)。

    Sub countsheets ()
    Dim Item as worksheet
    For Each Item In Activeworkbook.worksheets
    	MsgBox Item.Name
    Next Item
    End sub
    

    Exit语句

    Exit Do
    Exit For
    Exit Function
    Exit Property
    Exit sub
    
    

    循环中可以在任何位置放置任意个Exit For语句,随时退出循环。**Exit For经常在条件判断之后使用,例如 If…Then,并将控制权转移到紧接在 Next 之后的语句。可以将一个For…Next循环放置在另一个For…Next循环中,组成嵌套循环。不过在每个循环中的counter要使用不同的变量名。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JM4mJJTV-1615651551123)(images/VBA基础教程一/image-20210228121354922.png)]

    With语句

    With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用With语句来给同一个对象的几个属性赋值。

    with MyLabel
        .Height = 2000
        .width = 2000
        .caption = "This is MyLabel"
    End with
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7x9CK3Ca-1615651551125)(images/VBA基础教程一/image-20210307135705978.png)]

    程序一旦进入With 块,object就不能改变。因此不能用一个With语句来设置多个不同的对象。可以将一个With块放在另一个之中,而产生嵌套的With语句。但是,由于外层With块成员会在内层的With 块中被屏蔽住,所以必须在内层的With块中,使用完整的对象引用来指出在外层的With块中的对象成员。

    With语句经常使用在对一个对象或用户自定义类型需要进行反复引用的情况下,特别是在循环中,如果要反复引用某个对象,那么最好通过With语句来引用该对象。

    调试程序

    Debug调试

    Debug对象可以在运行时将输出发送到立即(Immediate)窗口。Debug对象有2个方法: Assert和 Print方法,Assert 判断1条条件语句,如果为False,则挂起执行,暂停在Assert语句的地方,Print语句则向立即窗口输出一段文本,例如以下代码:

    Dim i As Long
        For i = l To 10 step 1
        Debug.Print i
        Debug.Assert i <8
    Next i
    
    

    当程序执行到3行Debug.Print时,程序向立即窗口输出i的值,而当i大于等于8时,Debug.Assert判断的表达式为False,程序挂起。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0fCwsvP-1615651551126)(images/VBA基础教程一/image-20210307123111262.png)]

    IDE调试

    VBA提供了以下几种调试工具供使用。这些工具包括:

    • 立即窗口:可以交互式运行VBA代码;
    • 监视窗口:监视变量、对象的值或内容;
    • 断点:程序执行到此后会进入中断状态,可以单步执行,查看变量对象等;
    • 单步执行代码(F8)

    错误处理

    • On Error Resume如果有运行时刻的错误发生,那么程序将从导致错误发生的语句处重新开始执行;

    • On Error Resume Next如果有运行时刻的错误发生,那么程序就从导致错误发生的语句的下一句继续执行下去。

    Sub debugPrint()
        Dim i As Long
        For i = l To 10 Step 1
            Debug.Print i
    		On Error Resume Next  '暗示下面只要有错误的语句都可以跳过
            a = 8 / 0
            b = 8 / 0
            Debug.Assert i < 8
        Next i
    End Sub
    

    事件触发

    工作簿的事件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glTNUj1h-1615651551128)(images/VBA基础教程一/image-20210313231603781.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgRGRvtf-1615651551129)(images/VBA基础教程一/image-20210313231621287.png)]

    窗体事件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbX6496s-1615651551131)(images/VBA基础教程一/image-20210313231925836.png)]

    OnTime事件

    OnTime事件在一天中的某个特定时刻发生。下面的示例展示了如何进行Excel编程,使其在下午3点发出叫声并显示消息:

    Sub SetAlarm ()
    Application.onTime Timevalue("15:00:00"),"DisplayAlarm"
    End Sub
    Sub DisplayAlarm()
    Beep
    MsgBox "wake up. It's time for your afternoon break ! "
    End Sub
    

    该示例中,SetAlarm过程使用Application对象的OnTime方法来设置OnTime事件。该方法使用了两个参数:时间(在示例中为3 pm)和该时间到来时执行的过程(在示例中为DisplayAlarm过程)。执行SetAlarm过程后,DisplayAlarm过程将会在下午3点被调用,弹出如图19-10所示的对话框。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOFtOtEL-1615651551133)(images/VBA基础教程一/image-20210313232141231.png)]

    如果想要通过相对于当前时间来确定事件的发生时间,例如,从现在开始的20分钟之后,那么可以这样来编写指令:

    Application.onTime Now + TimeValue ( "00:20:00"),"DisplayAlarm"
    

    也可以使用OnTime方法来确定某个特定日期过程发生的时间。下列语句在2010年4月1日上午 12:01运行DisplayAlarm过程。

    Application. OnTime DateSerial (2010, 4,1)+TimeValue ("00:00:01"), "DisplayAlarm"
    
       Dim NextTick As Date
    
    Sub UpdateClock()
    '   Updates cell A1 with the current time
        ThisWorkbook.Sheets(1).Range("A1") = Time
    '   Set up the next event five seconds from now
        NextTick = Now + TimeValue("00:00:05")
        Application.OnTime NextTick, "UpdateClock"
    End Sub
    
    Sub StopClock()
    '   Cancels the OnTime event (stops the clock)
        On Error Resume Next
        Application.OnTime NextTick, "UpdateClock", , False
    End Sub
    
    

    窗体

    窗体是事件驱动类型的。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k8X7TDg4-1615651551134)(images/VBA基础教程一/image-20210307125227582.png)]

    按钮控件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXE4DDQg-1615651551136)(images/VBA基础教程一/image-20210307125438516.png)]

    文本框控件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2cDuYwM-1615651551138)(images/VBA基础教程一/image-20210307125542768.png)]

    双击按钮控件,会生成单机代码,函数名称为cmdHello_Click()(即为按钮控件的名称+事件名称)

    Private Sub cmdHello_Click()  
        Me.txtMsg.Text = "Hello VB!"  'txtMsg即为文本框控件的名称  Me相当于This
    End Sub
    

    excel里面的窗体使用

    最关键的就是插入一个图片或者窗体控件,然后制定宏

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnJwos7J-1615651551139)(images/VBA基础教程一/image-20210307130024180.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SkqkoLwj-1615651551141)(images/VBA基础教程一/image-20210307130040357.png)]

    为其指定宏,就可以点击它控制后面的程序了。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nxUUB3y9-1615651551142)(images/VBA基础教程一/image-20210307130303622.png)]

    展开全文
  • visio教程PDF

    热门讨论 2010-05-17 23:56:22
    7.2.3 使用标准工具栏中Undo控件 7.2.4 使用键盘撤消命令 7.3 使用Redo命令 7.3.1 使用Edit Redo方法 7.3.2 使用标准工具栏中的Redo控制 7.3.3 使用键盘Undo命令 7.4 删除对象 7.4.1 删除对象...
  • 可实现的表单控件有:按钮(Button)、复选框(CheckBox)、单选框(RadioBox)、下拉框(Select)、文本框(Text)、文本区域(TextArea)、密码域(Password)、隐藏域(Hidden)、标签(Remark)、日期(Date)、时间(Time)、查询 ...
  • 14.4使用ADODC控件 14.5数据记录和AutoCAD实体的对应 第15章VBA程序的发布 15.1菜单宏 15.2在工具栏中使用自定义图标 15.3基本图库的实现 15.4在命令行或菜单中执行VBA程序 15.5实现VBA程序的先选择后操作和透明命令...
  • 源码教程 ASP.NET编程技术与交互式网页设计 asp.net亲密接触_带源码 C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员...
  • 3-1-3 导入Excel的工作表 3-1-4 导入文本文件 3-1-5 导入XML文件 3-2 查找与替换数据 3-2-1 查找数据 3-2-2 替换数据 3-3 聪明的字段设定 3-3-1 输入掩码 3-3-2 字段数据验证 3-3-3 整笔记录的验证 3-3-4...
  • 3-1-3 导入Excel的工作表 3-1-4 导入文本文件 3-1-5 导入XML文件 3-2 查找与替换数据 3-2-1 查找数据 3-2-2 替换数据 3-3 聪明的字段设定 3-3-1 输入掩码 3-3-2 字段数据验证 3-3-3 整笔记录的验证 3-3-4...
  • 3-1-3 导入Excel的工作表 3-1-4 导入文本文件 3-1-5 导入XML文件 3-2 查找与替换数据 3-2-1 查找数据 3-2-2 替换数据 3-3 聪明的字段设定 3-3-1 输入掩码 3-3-2 字段数据验证 3-3-3 整笔记录的验证 3-3-4...
  • 3-1-3 导入Excel的工作表 3-1-4 导入文本文件 3-1-5 导入XML文件 3-2 查找与替换数据 3-2-1 查找数据 3-2-2 替换数据 3-3 聪明的字段设定 3-3-1 输入掩码 3-3-2 字段数据验证 3-3-3 整笔记录的验证 3-3-4...
  • 源码教程 ASP.NET编程技术与交互式网页设计 asp.net亲密接触_带源码 C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员...
  • 网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...
  • 同时它还支持报表Excel导出、图表显示及固定表头与左边列的功能。 欢迎加入QQ群交流:(365582678) 目录 开发环境(Development Environment) 安装与部署(Installation & Deployment) 从源代码安装(From ...
  • 5.4 按钮控件(Button,LinkButton,ImageButton) 5.4.1 按钮控件的通用属性 5.4.2 Click单击事件 5.4.3 Command命令事件 5.5 单选控件和单选组控件(RadioButton和RadioButtonList) 5.5.1 单选控件(RadioButton...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    Excel文件的导入和导出操作 主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件查询系统,...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    Excel文件的导入和导出操作 如题。主要的实现在CMyExcel类中。 expclass_src dll库的演示。 fge.1.1.alpha.sdk 精灵系统,一套MFC渲染引擎,含2D/3D等渲染,效果看源码,IFEngine是整个引擎接口,IFSystem是硬件...
  •  2.1 按钮控件典型实例   cc实例043 AVI动画按钮   cc实例044 GIF动画按钮   cc实例045 图文按钮   cc实例046 不规则按钮   2.2 EditBox控件典型实例   cc实例047 为EditBox设置新的系统菜单  ...
  •  2.1 按钮控件典型实例   cc实例043 AVI动画按钮   cc实例044 GIF动画按钮   cc实例045 图文按钮   cc实例046 不规则按钮   2.2 EditBox控件典型实例   cc实例047 为EditBox设置新的系统菜单  ...
  •  2.1 按钮控件典型实例   cc实例043 AVI动画按钮   cc实例044 GIF动画按钮   cc实例045 图文按钮   cc实例046 不规则按钮   2.2 EditBox控件典型实例   cc实例047 为EditBox设置新的系统菜单  ...
  •  2.1 按钮控件典型实例   cc实例043 AVI动画按钮   cc实例044 GIF动画按钮   cc实例045 图文按钮   cc实例046 不规则按钮   2.2 EditBox控件典型实例   cc实例047 为EditBox设置新的系统菜单  ...
  • asp.net知识库

    2015-06-18 08:45:45
    清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup Object Click button only once ...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

excel按钮控件教程