精华内容
下载资源
问答
  • 今日的内容是第一章“初识VBA代码及应用VBA代码”的第四节“如何录制如何利用已经录制好的”,“VBA之EXCEL应用”从简单的录制实现一直讲到窗体的搭建,大家可以非常容易的掌握相关的知识,这套教程面向初学...

    055ee5e6a9240cc47ef0979f2a0c0d93.png

    今日的内容是第一章“初识VBA代码及应用VBA代码”的第四节“如何录制宏及如何利用已经录制好的宏”,“VBA之EXCEL应用”从简单的录制宏实现一直讲到窗体的搭建,大家可以非常容易的掌握相关的知识,这套教程面向初学人员,共三册,十七章,都是我们在利用EXCEL工作过程中需要掌握的知识点,希望大家能掌握利用。

    第四节 如何录制宏及如何利用已经录制好的宏

    大家好,我们今日讲解宏记录器(Macro Recorder),宏记录器是Excel vba中包含的一个非常有用的工具,它可以记录我们使用Excel时执行的每个任务。你所要做的就是记录一次特定的任务,接下来,就可以通过单击按钮来反复执行刚才所记录的任务。

    对刚入门人员来说,往往我们还不知道如何编写特定任务,宏记录器或许是一个很好的帮助。只需在录制任务后打开visualbasic编辑器,查看一下录制的代码,对其进行必要的分析和理解。

    在我的其他教程中我是不希望学员采用录制宏的方法来完成我们的代码的,因为有很多事情你不能用宏记录器来做,例如,不能使用宏记录器循环访问一系列数据;此外,宏记录器使用的代码比所需的多得多,这可能会降低进程的速度;而且,录制宏的工作不利于自己对代码的理解。但对于初学者,我们还是可以利用录制宏,来完成我们一些具体的工作。下面我们来讲解如何录制宏。

    1 在“开发工具”选项卡上,单击“录制宏”

    我们在工作簿界面,点击“开发工具”选项卡上,单击“录制宏”。这时会弹出下面的界面,这个界面上我们要记入以下信息:

    a2a69156aa482efd6f28dbcbf3b12a76.png

    在弹出的对话框中输入名称,这里填入的是“宏1”,表示我们的录制将保存在“宏1”的过程中。同时在“保存在”的下拉列表中选择“当前工作簿”,表示宏将只在当前工作簿中可用。

    635d66676ea8b5186ba3080f7c13ec4c.png
    • 注意:如果将宏存储在“个人宏工作簿”中,则所有工作簿(Excel文件)都可以使用该宏。这是可能的,因为Excel将宏存储在一个隐藏的工作簿中,该工作簿在Excel启动时自动打开。如果将宏存储在新工作簿中,则宏只能在自动打开的新工作簿中使用。

    所以信息设置完成后,我们单击“确定”。

    2 开始录制宏

    在活动单元格(选定单元格)上单击鼠标右键。请不要选择其他单元格!接下来,单击“设置单元格格式”。

    3e052fb2184082258f904b6ab33e7f96.png

    7498ca6096c502a96298b67e2c24bc6f.png

    设置好后,我们单击“确定”。

    最后,单击停止录制。

    261be137e626bcf17616a872d9683c4d.png

    3 运行录制的宏

    现在我们将测试宏,看看它是否可以将数字格式更改为百分比。在测试之前我们先建立一个运行按钮,指向我们刚刚建立录制的“宏1”。

    b746bb78c558084f5550d1529550ed19.png

    我们在工作表中输入一些介于0和1之间的数字,并选择这些数字。

    cded7bd037179887719bfc6ce54f768e.png

    点击“运行”按钮,查看如下的结果:

    b45c11a6a1bc536de812c1e53cd2df49.png

    4 查看已经录制的宏

    要查看宏,请点击visualbasic编辑器,找到“宏1”的代码:

    d093c11705265cd4d1fd059a070b3a4a.png

    这就是我们刚才录制代码的真面目。

    • 注意:宏已放入名为“模块2”的模块中。放在模块中的代码可用于整个工作簿。这意味着您还可以利用这段代码更改其他工作表上单元格数字的格式。而放置在工作表上的代码(及分配给命令按钮)仅适用于该特定的工作表。

    今日内容回向:

    1)如何实现录制宏代码?

    2)宏代码放在哪个模块中呢?

    3) 模块中的代码和工作表中的代码(及分配给命令按钮)作用有什么不同?

    67f73f168456fa35642e67245cd03be7.png

    本讲内容参考程序文件:工作簿01.xlsm

    分享成果,随喜正能量

    VBA的应用范围及学习方法:

    VBA是利用Office实现个人小型办公自动化的有效手段(工具)。这是我对VBA的应用界定。在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属!

    我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了七部VBA专门教程。

    第一套:VBA代码解决方案 是VBA中各个知识点的讲解,教程共147讲,覆盖绝大多数的VBA知识点,提供的程序文件更是一座不可多得的代码宝库,是初学及中级人员必备教程;目前这套教程提供的版本是修订第二版,程序文件通过32位和64位两种OFFICE系统测试。

    第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,适合中级人员的学习。目前这套教程提供的是修订第一版教程,程序文件通过32位和64位两种OFFICE系统测试。

    第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。

    第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。这套教程是第一套教程(修订一版)的视频讲解,视频更易接受。

    第五套:VBA中类的解读和利用是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己VBA理论的提高。这套教程的领会主要是读者的领悟了,领悟一种佛学的哲理。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。

    第六套教程:VBA信息获取与处理,是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。

    第七套教程:VBA之EXCEL应用 这是一部初级教程这部教程共三册,从从创建宏、对话框、工作簿和工作表对象、单元格对象等基础内容讲起,到循环结构、错误处理、字符串操作、日期和时间、事件、数组应用,函数过程等方面,一直讲解到控件和窗体对象的应用都是我们提高自己EXCEL水平的必须。

    以上各教程学习顺序:713265或者743265。其中第四套是对第一套的视频讲解,所以第一和第四只选其一即可。如以提高自己能力为目的可以WWee!CC$hhaatt两个对象: VBA6337(或者NZ9668),两个对象是都是可以的。

    展开全文
  • 目录什么是宏怎样编写宏实例Step1. 特例实现Step2. 替换参数,封装为宏Step3. 调用宏什么是宏SAS中的宏类似于R中的函数,但SAS没有R灵活。就我的理解,SAS中无论是DATA步还是PROC步几乎每个程序都要指定要操作哪一个...

    目录

    • 什么是宏

    • 怎样编写宏

    • 实例

    • Step1. 特例实现

    • Step2. 替换参数,封装为宏

    • Step3. 调用宏

    什么是宏

    SAS中的宏类似于R中的函数,但SAS没有R灵活。就我的理解,SAS中无论是DATA步还是PROC步几乎每个程序都要指定要操作哪一个数据集,这里的数据集就相当于R中的data.frame,也就是说SAS中几乎只有数据集一种数据格式,而R中除data.frame这种数据对象类型外,还有向量、数组、因子、列表等类型,数据类型更丰富也相对灵活。

    那什么是函数呢?回想高中数学的知识,函数是从原象到象的一种映射。我的理解,函数是一种过程,能实现一类功能,给它一个输入,还你一个输出。程序中的函数就是一段可复用的代码。

    怎样编写宏

    我编写宏/函数的一般习惯是,先用某个具体案例,把想要实现的过程实现;接着把可以变动的参数替换为变量,也就是函数参数;封装起来就得到了想要的函数。也即从特殊到一般的思路。

    实例

    climate_3数据集包含一些气象监测数据资料,部分变量存在异常值,例如999999,999900等,可能是由于监测值缺失,数据清理阶段,需要处理这些异常值,本例选择用中位数替换异常值。由于数据集中的变量很多,逐一处理会很麻烦,因此可以借助宏来实现,提高效率。

    Step1. 特例实现

    首先,对climate_3数据集中的max_air_pre变量进行异常值识别与替换。

    `*查看变量max_air_pre的基本情况*;`
    `proc univariate data=climate_3 normal plot;`
     `var max_air_pre;`
    `run;`
    
    

    图片图片

    可见,存在极个别异常值。本例中将距离四分位数超过3倍IQR(四分位数间距)的数据归为异常值。为此需要获得上下四分位数Q1,Q3,IQR(Q3-Q1)和中位数。

    `*查看变量基本情况并保存到数据集a中*;`
    `proc means data=climate_3 n nmiss mean stddev min q1 median q3 max range ;`
     `var max_air_pre;`
     `output out=a mean=mean median=median q1=q1 q3=q3 ;` 
    `run;`
    
    

    数据集a:

    图片

    image.png

    `*计算判断异常值的上下限*;`
    `data a;`
     `set a;`
     `IQR3=(q3-q1)*3;`
     `lower=q1-IQR3;`
     `upper=q3+IQR3;`
     `call symputx('lower',lower); *将数据集a中的lower变量值保存到宏变量lower中*`
     `call symputx('upper',upper);`
     `call symputx('median',median);`
    `run;`
    
    

    *打印宏变量*;
    %put &=lower &=upper &=median;

    
    ![图片](https://mmbiz.qpic.cn/mmbiz_png/yia3SHOSpD1iaS23eH7ZtD8uIrcCzr0CzQ8xpZyVRqJuib7qavibgJwhfN4VI4lxDRCM3rBTrNmLMlsGHkPcpMMHbQ/640?wx_fmt=png)
    
    image.png
    
    

    *替换异常值*;
    data climate_3;
    set climate_3;
    if max_air_pre <&lower. or max_air_pre > &upper then max_air_pre= &median.;
    run;

    `*检查*;`
    `proc univariate data=climate_3 normal plot;`
     `var max_air_pre;`
    `run;`
    
    ```
    
    ![图片](https://img-blog.csdnimg.cn/img_convert/7a8dad050711905b322d89ac844e395d.png)![图片](https://img-blog.csdnimg.cn/img_convert/2b47119c62622c1de969f87a5dd428c2.png)
    
    ### Step2. 替换参数,封装为宏
    
    ```
    `* 用中位数替换离群值 *;`
    `%macro replace_outlier(data,variable);`
     `proc univariate data=&data normal plot;`
     `var &variable;`
     `run;`
     `proc means data=&data;`
     `var &variable;`
     `output out=a median=median q1=q1 q3=q3;`
     `run;`
     `data a;`
     `set a;`
     `IQR3=3*(q3-q1);`
     `lower=q1-IQR3;`
     `upper=q3+IQR3;`
     `call symputx('lower',lower);`
     `call symputx('upper',upper);`
     `call symputx('median',median);`
     `run;`
     `data &data;`
     `set &data;`
     `if &variable. < &lower. or &variable. >&upper. then &variable. = &median.;`
     `run;`
     `proc univariate data=&data normal plot;`
     `var &variable;`
     `run;`
    `%mend;`
    
    ```
    
    ### Step3. 调用宏
    
    像R中调用函数一样,调用宏即可实现将指定数据集的指定变量中异常值替换为中位数。
    
    ```
    `%replace_outlier(climate_3,max_air_pre);`
    `%replace_outlier(climate_3,min_air_pre);`
    
    ```
    
    如果觉得本文有用,别忘记收藏呦~
    
    展开全文
  • libreoffice 我长期以来一直答应撰写有关脚本语言Basic和在LibreOffice中创建的文章。 本文致力于LibreOffice Basic中使用的数据类型,并且在更大程度上致力于变量的描述以及使用它们的规则。 我将尝试为高级用户...

    libreoffice

    我长期以来一直答应撰写有关脚本语言Basic和在LibreOffice中创建宏的文章。 本文致力于LibreOffice Basic中使用的数据类型,并且在更大程度上致力于变量的描述以及使用它们的规则。 我将尝试为高级用户和新手用户提供足够的信息。

    (并且,我要感谢所有对此俄语文章进行评论并提出建议的人,特别是那些帮助回答难题的人。)

    变量命名约定

    以下是正确的变量名称的一些示例:

    
    
    MyNumber = 5

    MyNumber5 = 15

    MyNumber_5 = 20

    _MyNumber = 96

    [ My Number ] = 20.5

    [ 5MyNumber ] = 12

    [ Number,Mine ] = 12

    [ DéjàVu ] = "It seems that I have seen it!"

    [ Моя переменная ] = "The first has went!"

    [ Мой % от зделки ] = 0.0001

    注意:在包含方括号的示例中,如果删除方括号,宏将显示带有错误的窗口。 如您所见,可以使用本地化的变量名。 这样做是否有意义取决于您。

    声明变量

    严格来说,没有必要在LibreOffice Basic中声明变量(数组除外)。 如果您从两行代码中编写宏以处理小型文档,则无需声明变量,因为变量将自动声明为变量类型。 对于较长的宏或将在大型文档中使用的宏,强烈建议声明变量。 首先,它增加了文本的可读性。 其次,它允许您控制可以极大地促进错误查找的变量。 第三,变体类型非常耗资源,并且隐藏转换需要大量时间。 此外,变量类型不会为数据选择最佳变量类型,这会增加计算机资源的工作量。

    如果您喜欢使用匈牙利表示法,则Basic可以通过其前缀(名称中的第一个字母)自动分配变量类型,以简化工作。 为此,使用语句DefXXX XXX是字母类型名称。 带字母的语句将在模块中工作,并且必须在子程序和功能出现之前指定该语句。 有11种类型:

    
    
    DefBool - for boolean variables;
    DefInt - for integer variables of type Integer;
    DefLng - for integer variables of type Long Integer;
    DefSng - for variables with a single-precision floating point;
    DefDbl - for variables with double-precision floating-point type Double;
    DefCur - for variables with a fixed point of type Currency;
    DefStr - for string variables;
    DefDate - for date and time variables;
    DefVar - for variables of Variant type ;
    DefObj - for object variables;
    DefErr - for object variables containing error information.

    如果您已经对LibreOffice Basic中的变量类型有所了解,您可能会注意到该列表中没有Byte类型,但是其中有一个Error类型的怪兽 不幸的是,您只需要记住这一点。 我还没有发现为什么这是真的。 此方法很方便,因为类型是自动分配给变量的。 但是它不允许您在变量名中查找与错字有关的错误。 此外,将不可能指定非拉丁字母; 也就是说,必须明确声明在方括号中需要声明的所有变量名称。

    为了避免在显式使用声明的变量时出现拼写错误,可以使用语句OPTION EXPLICIT 该语句应为模块中的第一行代码。 除注释外,所有其他命令都应放在其后。 该语句告诉解释器,必须显式声明所有变量。 否则,将产生错误。 自然,此语句使在代码中使用Def语句毫无意义。

    使用语句Dim声明变量。 如果用逗号分隔变量名称,则可以同时声明多个变量,甚至可以声明不同的类型。 要使用显式声明确定变量的类型,可以在名称后使用相应的关键字或类型声明符号。 如果在变量后未使用类型声明符号或关键字,则将自动为其分配Variant类型。 例如:

    
    
    Dim iMyVar                      'variable of Variant type
    Dim iMyVar1 As Integer, iMyVar2 As Integer '
    in both cases Integer type
    Dim iMyVar3, iMyVar4 As Integer 'in this case the first variable
                                    '
    is Variant, and the second is Integer

    变量类型

    LibreOffice Basic支持七类变量:

    • 逻辑变量包含以下值之一: TRUEFALSE
    • 包含数值的数值变量。 它们可以是整数,整数正数,浮点数和定点数
    • 包含字符串的字符串变量
    • 日期变量可以包含内部格式的日期和/或时间
    • 对象变量可以包含不同类型和结构的对象
    • 数组
    • 抽象类型变体

    逻辑变量–布尔

    布尔类型的变量只能包含两个值之一: TRUEFALSE 在数值等效中,值FALSE对应于数字0,值TRUE对应于-1 (负1)。 传递给布尔类型变量的除零以外的任何值都将转换为TRUE 也就是说,转换为负数。 您可以通过以下方式显式声明变量:

    
    Dim MyBoolVar As Boolean 
    

    我没有找到一个特殊的符号。 对于隐式声明,可以使用DefBool语句。 例如:

    
    DefBool b 'variables beginning with b by default are the type Boolean 
    

    变量的初始值设置为FALSE 布尔变量需要一个字节的内存。

    整数变量

    有三种类型的整数变量: ByteIntegerLong Integer 这些变量只能包含整数。 当您将带有小数的数字转移到此类变量中时,它们将根据经典算术规则进行四舍五入(而不是如帮助部分所述,移至较大的一面)。 这些变量的初始值为0(零)。

    字节

    字节类型的变量只能包含0到255之间的整数正值。不要将此类型与信息的物理大小(以字节为单位)混淆。 尽管我们可以将十六进制数字记为变量,但是单词“ Byte”仅表示数字的维数。 您可以如下声明此类型的变量:

    
    Dim MyByteVar As Byte 
    

    该类型没有类型声明符号。 没有此类型的语句Def。 由于其尺寸较小,因此这种类型对于循环索引(其值不会超出范围)最方便。 一个字节变量需要一个字节的内存。

    整数

    Integer类型的变量可以包含-32768至32767的整数值。它们便于以整数快速计算,并且适合于循环索引。 是类型声明符号。 您可以通过以下方式声明此类型的变量:

    
    
    Dim MyIntegerVar %
    Dim MyIntegerVar As Integer

    对于隐式声明,可以使用DefInt语句。 例如:

    
    DefInt i 'variables starting with i by default have type Integer 
    

    一个Integer变量需要两个字节的内存。

    长整数

    Long Integer类型的变量可以包含-2147483648到2147483647之间的整数值。当Integer类型的范围不足以实现算法时,Long Integer变量在整数计算中很方便。 是类型声明符号。 您可以通过以下方式声明此类型的变量:

    
    
    Dim MyLongVar &
    Dim MyLongVar As Long

    对于隐式声明,可以使用DefLng语句。 例如:

    
    DefLng l 'variables starting with l have Long by default 
    

    Long Integer变量需要四个字节的内存。

    分数数字

    这些类型的所有变量都可以取带分数的正数或负数。 它们的初始值为0(零)。 如上所述,如果将带分数的数字分配给只能包含整数的变量,则LibreOffice Basic会根据经典算术规则对数字进行四舍五入。

    单个变量可以取正值或负值,范围为3.402823x10E + 38至1.401293x10E-38。 这种类型的变量的值采用单精度浮点格式。 在这种格式下,仅存储八个数字字符,其余以十进制(数字顺序)存储。 在Basic IDE调试器中,您只能看到6个小数位,但这是一个公然的谎言。 使用Single类型变量的计算要比Integer变量花费更长的时间,但是它们比使用Double类型变量的计算要快。 类型声明符号为 您可以通过以下方式声明此类型的变量:

    
    
    Dim MySingleVar !
    Dim MySingleVar As Single

    对于隐式声明,可以使用DefSng语句。 例如:

    
    DefSng f 'variables starting with f have the Single type by default 
    

    单个变量需要四个字节的内存。

    Double类型的变量可以采用正值或负值,范围为1.79769313486231598x10E308至1.0x10E-307。 为什么范围如此奇怪? 在解释器中最有可能导致这种情况的其他检查。 Double类型的变量的值采用双精度浮点格式,可以有15个小数位。 在Basic IDE调试器中,您只能看到14个小数位,但这也是一个公然的谎言。 Double类型的变量适用于精确计算。 与单类型相比,计算需要更多时间。 类型声明符号为 您可以通过以下方式声明此类型的变量:

    
    
    Dim MyDoubleVar #
    Dim MyDoubleVar As Double

    对于隐式声明,可以使用DefDbl语句。 例如:

    
    DefDbl d 'variables beginning with d have the type Double by default 
    

    Double类型的变量需要8个字节的内存。

    货币

    货币类型的变量显示为带固定点的数字,数字的整数部分具有15个符号,而小数则具有4个符号。 值范围包括从-922337203685477.6874到+92337203685477.6874的数字。 货币类型的变量用于精确计算货币值。 类型声明符号为@ 您可以通过以下方式声明此类型的变量:

    
    
    Dim MyCurrencyVar @
    Dim MyCurrencyVar As Currency

    对于隐式声明,可以使用DefCur语句。 例如:

    
    DefCur c 'variables beginning with c have the type Currency by default 
    

    货币变量需要8个字节的内存。

    String类型的变量可以包含字符串,其中每个字符都存储为相应的Unicode值。 它们用于处理文本信息,除了打印的字符(符号)之外,它们还可以包含不可打印的字符。 我不知道该行的最大大小。 Mike Kaganski实验性地将该值设置为2147483638个字符,此后LibreOffice退出。 这相当于将近4 GB的字符。 类型声明符号为$ 您可以通过以下方式声明此类型的变量:

    
    
    Dim MyStringVar$
    Dim MyStringVar As String

    对于隐式声明,可以使用DefStr语句。 例如:

    
    DefStr s 'variables starting with s have the String type by default 
    

    这些变量的初始值为空字符串(“”)。 存储字符串变量所需的内存取决于变量中的字符数。

    日期

    日期类型的变量只能包含以内部格式存储的日期和时间值。 实际上,此内部格式是双精度浮点格式(Double),其中整数部分是天数,而小数部分是一天的一部分(即0.00001157407是一秒)。 值0等于30.12.1899。 基本解释器在输出时会自动将其转换为可读版本,但在加载时不会自动将其转换为可读版本。 您可以使用Dateserial,Datevalue,Timeserial或Timevalue函数快速转换为Date类型的内部格式。 要从日期格式的变量中提取某个部分,可以使用日,月,年,时,分或秒功能。 内部格式允许我们通过计算两个数字之间的差异来比较日期和时间值。 Date类型没有类型声明,因此,如果您明确定义它,则需要使用Date关键字。

    
    Dim MyDateVar As Date 
    

    对于隐式声明,可以使用DefDate语句。 例如:

    
    DefDate y 'variables starting with y have the Date type by default 
    

    Date变量需要8个字节的内存。

    对象变量的类型

    我们可以将LibreOffice Basic的两种变量类型用于对象。

    对象

    对象类型的变量是存储对象的变量。 通常,对象是程序中任何具有结构,属性以及访问和数据处理方法的独立部分。 例如,文档,单元格,段落和对话框都是对象。 它们具有名称,大小,属性和方法。 这些对象又由对象组成,而对象又可以由对象组成。 这种对象的“金字塔”通常称为对象模型,它使我们在开发小对象时可以将它们组合成更大的对象。 通过较大的对象,我们可以访问较小的对象。 这使我们可以处理文档,在从特定文档中提取文档时创建和处理它们。 没有针对Object类型的类型声明,因此对于显式定义,您需要使用Object关键字。

    
    Dim MyObjectVar As Object 
    

    对于隐式声明,可以使用DefObj语句。 例如:

    
    DefObj o 'variables beginning with o have the type Object by default 
    

    对象类型的变量本身并不存储对象,而仅是对其的引用。 这种类型的变量的初始值为Null。

    结构体

    该结构本质上是一个对象。 如果您在Basic IDE调试器中查看,则大多数(但不是全部)是对象类型。 有些不是; 例如,错误的结构具有错误类型。 但是粗略地说,LibreOffice Basic中的结构只是简单地分组为一个对象变量,而无需特殊的访问方法。 另一个重大区别是,在声明结构类型的变量时,必须指定其名称,而不是对象。 例如,如果MyNewStructure是结构的名称,则其变量的声明将如下所示:

    
    Dim MyStructureVar As MyNewStructure 
    

    有很多内置结构,但用户可以创建个人的结构。 当我们需要处理应视为一个整体的异类信息集时,结构会很方便。 例如,要创建一个tPerson结构:

    
    
    Type tPerson
      Name As String
      Age As Integer
      Weight As Double
    End Type

    结构的定义应该放在使用它的子例程和函数之前。

    要填充结构,可以使用例如内置结构com.sun.star.beans.PropertyValue:

    
    
    Dim oProp As New com.sun.star.beans.PropertyValue
    OProp.Name = "Age" 'Set the Name
    OProp.Value = "Amy Boyer" '
    Set the Property

    为了简化结构的填充,可以使用With运算符。

    
    
    Dim oProp As New com.sun.star.beans.PropertyValue
    With oProp
      .Name = "Age" 'Set the Name
      .Value = "Amy Boyer" '
    Set the Property
    End With

    初始值仅适用于结构中的每个变量,并且对应于变量的类型。

    变体

    这是变量的虚拟类型。 自动为要操作的数据选择“变量”类型。 唯一的问题是解释器不需要节省我们的资源,并且它不提供变量类型的最佳变体。 例如,它不知道可以在Byte中写入1,而在Long Integer中写入100000,尽管如果值是从具有声明类型的另一个变量传递来的,则它会复制一个类型。 同样,转换本身也需要大量资源。 因此,此类变量是所有变量中最慢的。 如果需要声明这种变量,则可以使用Variant关键字。 但是,您可以完全省略类型描述。 Variant类型将自动分配。 该类型没有类型声明符号。

    
    
    Dim MyVariantVar
    Dim MyVariantVar As Variant

    对于隐式声明,可以使用DefVar语句。 例如:

    
    DefVar v 'variables starting with v have the Variant type by default 
    

    默认情况下,此变量类型分配给所有未声明的变量。

    数组

    数组是数据集形式的一种特殊类型的变量,让人想起数学矩阵,只是数据可以是不同类型的数据,并允许人们按索引(元素编号)访问其元素。 当然,一维数组将类似于列或行,而二维数组将类似于表。 LibreOffice Basic中数组的一项功能将其与其他编程语言区分开。 因为我们有一个抽象类型的variant,所以数组的元素不需要是同质的。 也就是说,如果存在一个数组MyArray,并且它具有从0到2编号的三个元素,我们将名称写在MyArray(0)的第一个元素中,将年龄写在第二个MyArray(1)中,并将权重写在第三个MyArray(2),我们可以分别具有以下类型值:MyArray(0)的字符串,MyArray(1)的整数和MyArray(2)的Double。 在这种情况下,数组将类似于具有通过其索引访问元素的能力的结构。 数组元素也可以是同质的:LibreOffice Basic中可以使用其他数组,对象,结构,字符串或任何其他数据类型。

    数组必须在使用前声明。 尽管索引空间可以在Integer类型的范围内-从-32768到32767-默认情况下,初始索引被选择为0。您可以通过几种方式声明数组:

    Dim MyArrayVar(5) as string 具有从0到5的6个元素的字符串数组
    Dim MyArrayVar$(5) 与以前一样
    Dim MyArrayVar(1 To 5) as string 具有1到5的5个元素的字符串数组
    Dim MyArrayVar(5,5) as string 包含36个元素的行的二维数组,每个级别都有索引
    从0到5
    Dim MyArrayVar$(-4 To 5, -4 To 5) 具有100个元素的二维字符串数组,每个级别都有索引
    从-4到5
    Dim MyArrayVar() 空数组的变量类型

    默认情况下,您可以使用Option Base语句更改数组的下限(数组的第一个元素的索引)。 在使用子程序,函数和定义用户结构之前必须指定这些参数。 Option Base只能采用两个值,即0或1,必须紧随关键字之后。 该操作仅适用于当前模块。

    学到更多

    如果您只是刚开始编程,那么Wikipedia将提供有关数组 ,结构和许多其他主题的常规信息。

    对于LibreOffice Basic的更深入研究, Andrew Pitonyak的网站以及Basic Programmer's guide都是最重要的资源。 您也可以使用LibreOffice 联机帮助 完整的流行宏可以在The Document Foundation Wiki的“ 宏”部分中找到,您还可以在该主题中找到其他链接。

    有关更多提示或提出问题,请访问Ask LibreOfficeOpenOffice论坛

    翻译自: https://opensource.com/article/18/2/variables-data-types-libreoffice-basic

    libreoffice

    展开全文
  • 编写VS2008代码

    千次阅读 2011-12-13 17:43:13
    下面以一个简单例子说明如何编写宏代码。 1. 建立宏工程。选择“Tool”菜单栏下Macros菜单下的New Macro Project.2. 输入工程名:CloseIntelliSense(关闭智能感知)3. 双击Module1节点,如下:4. 在弹

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

         VisualStudio的一种重要的扩展方式是编写宏代码。下面以一个简单例子说明如何编写宏代码。

     

    1. 建立宏工程。选择“Tool”菜单栏下Macros菜单下的New Macro Project.


    2. 输入工程名:CloseIntelliSense(关闭智能感知)

    3. 双击Module1节点,如下:

    4. 在弹出的Macro IDE中输入下面代码:


     

    Option Strict Off
    
    Option Explicit Off
    
     
    
    Imports System
    
    Imports EnvDTE
    
    Imports EnvDTE80
    
    Imports EnvDTE90
    
    Imports System.Diagnostics
    
     
    
    Enum ISENSE_FLAGS
    
     
    
        ISENSE_NORMAL = 0       'normal(Intellisense On)
    
     
    
        ISENSE_NOBG = &H1       'no bg parsing(Intellisense Updating Off - although NCB file will be opened r/w andrepersisted at shutdown)
    
     
    
        ISENSE_NOQUERY = &H2    'no queries(don't run any ISense queries)
    
     
    
        ISENSE_NCBRO = &H4      'no saving ofNCB (must be set before opening NCB, doesn't affect updating or queries, justpersisting of NCB)
    
     
    
        ISENSE_OFF = &H7        'no bgparsing, no queries, no saving of NCB, ncb will still be opened, however
    
     
    
    End Enum
    
     
    
     
    
    Public Module IntellisenseModule
    
     
    
        SubIntellisense_Off()
    
     
    
            DTE.Properties("TextEditor", "C/C++Specific").Item("IntellisenseOptions").Value= ISENSE_FLAGS.ISENSE_OFF
    
     
    
        EndSub
    
     
    
        SubIntellisense_On()
    
     
    
            DTE.Properties("TextEditor", "C/C++Specific").Item("IntellisenseOptions").Value= ISENSE_FLAGS.ISENSE_NORMAL
    
     
    
        EndSub
    
     
    
    End Module

    5. 编译运行宏代码,如下:


    6. 可以看到Visual Studio宏工程节点下生成了两个子节点,说明宏代码编译成功。如下:


    7. 右键单击工具栏,弹出右键菜单,选择“Customize…”菜单项,如下:


    8.选择命令选项卡,在Categories中选择Macro选项,可以看到新添加的宏命令.


    9. 拖拽在第8步中的对话框宏命令选项,可以把它拖到任何的工具栏或者菜单栏



           如果你想删除该宏,也可以随时拖走。

     

    10. 为宏分配快捷键:“工具->选项->键盘”中选定相应的宏函数,然后分配快捷键。自己完全可以跟根自身的喜好来设定。








    展开全文
  • Excel如何使用宏编写函数

    千次阅读 2015-11-26 13:28:07
    excel支持VBA编程。如果熟悉VB编程,就可以通过编程控制Execl的数据处理。 里面涉及到事件,这个跟delphi有点像。 下面是一个例子:如果当单元格的内容发生变化,在后面第6的单元格复制为1 或者取值为now();...
  • vs.net 编写宏实例

    2015-02-15 01:34:38
    通过研究这个文档,可以学会在。net下如何创建,可以为你的开发节省很多工作,只要你能想到就能做到,这是我为项目团队写的 实例:当我们在浏览器中查看一个页面后,需要打开它的配置文件进行查看或修改
  • 分三点讲解一,编探点程序***********二,编辑加工程序*********三,在EXCEL里添加变量***********第一节编探点程序 1.定原点,找各探点坐标值先在UG软件里定好工件坐标系原点,然后用UG软件将需要探点的位置的点...
  • 前 言 本文主要给大家介绍SV,谈到SV大家应该不会感到陌生,因为大家在做前端设计或验证的时候会用到`define定义,进行条件编译,或者使用宏来定义参数等,做前端验证的工程师会使用`define来定义一些信号路径...
  • 前面两期分别给大家聊了什么是VBA、什么是VBE,今天再给大家聊一下如何编写VBA代码——看我小眼神……这事说起来可有意思了。编写VBA代码常用的方式有三种。第一种方式:复制粘贴耸肩摊手,说这话俺是认真的。要知道...
  • 分三点讲解 一,编探点程序***********二,编辑加工程序*********三,在EXCEL里添加变量*********** 第一节编探点程序 1.定原点,找各探点坐标值先在UG软件里定好工件坐标系原点,然后用UG软件将需要探点的位置的...
  • 许多人在接触3DS MAX进行模型的搭建、渲染以及动画的制作之后,都会接触到MAXScript. MAXScript是3ds MAX内置的脚本语言,几乎能够实现3ds MAX... 下面我将主要讲叙如何在3ds MAX中利用脚本即MacroScript在3ds ...
  • 这些教程解释了如何使用xwiki的渲染架构来实现XWiki。 XWiki渲染(只适用XWiki语法2.0)可以在Java或直接在wiki页面编写: 渲染Java编写教程 渲染在wiki页面编写教程 ...
  • 分类:实习,excel,VBA循环,SQL数据库录入 语言:VBA,SQL 进度:遇到问题,已解决,并非最优解 问题描述:需要对excel某一行中的若干个单元格进行循环读取,因为列标是英文大写字母,存在合并单元格,...
  • Elixir元编程-第四章 如何测试 任何设计良好的程序库背后必定有套完善的测试程序。你已经编写扩充了一些语言特性,也许也编写了一些重要的应用程序。你也见识过了通过宏来编写友好的测试框架。这里还有些知识你没...
  • 定义方法】 方法1: #define SWAP(a,b) \ a= a^b;\ b= a^b;\ a= a^b; 方法2: #define SWAP(a,b) \ a= a + b ;\ b= a - b;\ a= a - b; 【函数实现方法】 方法1:利用指针...
  • 今天以加工中心倒圆弧R例子 (用标准铣刀),比如下图:面对这个零件,不少小师傅不知道如何下手,邹军我再次强调,案例不重要,因为案例到处都有,把编写思路和方法传授给你更重要。因此这篇文章中,你可以学习到以下...
  • VS2010 如何使用添加注释

    千次阅读 2015-09-02 16:57:58
    用VS2010编写代码时可以使用命令快速的给类添加头注释(如下图:)。   首先添加一个:工具————管理器
  • 如何编写PHP扩展

    2013-03-24 00:16:25
    目 录 简 介 ...线程安全资源管理 总 结 词汇表     简 介  PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP
  • 如何编写自己的C语言头文件

    万次阅读 多人点赞 2019-05-23 18:36:00
    头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明,变量声明,常数定义,的定义等等。当使用#include语句将头文件引用时,相当于将...
  • 最近在编写一个项目的代码时,需要在定义中连接多个字符串,具体来说就是,先定义一个软件版本号,然后再定义一个硬件版本号, 然后再将他们拼合起来生成一个综合版本号。这些动作都是在定义中直接完成,提供...
  • 15-如何编写杨辉三角

    2020-11-15 10:55:26
    #include <stdio.h> //杨辉三角解决方法如下四点 ...#define ROW 10 //定义,方便修改行列数 int arr[ROW][ROW]; for(int i=0;i<ROW;i++) { for(int j=0;j<=i;j++) { if(j==0 || i==.
  • 只需要根据configuration wizard的格式来编写我们的配置文件即可。 类似于上图这样,可以直接修改后面的值或者勾选使能匡,就能实现对函数中的参数或者定义进行修改,这样做的目的就是比较直观,简单明了,省的去...
  • 前段时间,有一师傅接了一批零件,其中有一处需要在数车上加工类似曲线的轮廓外形,这师傅在数控这行也干了快10多年了, 眼看没招,不知道程序如何编写程序,因为他不会程序,遇到这种曲线类的零件就傻眼了。...
  • 前段时间,有一师傅接了一批零件,其中有一处需要在数车上加工类似曲线的轮廓外形,这师傅在数控这行也干了快10多年了, 眼看没招,不知道程序如何编写程序,因为他不会程序,遇到这种曲线类的零件就傻眼了。...
  • 编写一个程序 用实现两个数的比较大小 计算机科学里的(Macro),是一种批量批处理的称谓。一般说来,是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应...
  • 如何编写PHP扩展(1)

    2010-01-03 13:02:09
    目 录 简 介.......快速开始.......内存管理.......实例小结.......包裹第三方的扩展.......编写利用资源的第一个PHP函数.......全局变量.......添加自定义INI指令.......线程安全资源管理.... 18 总 结.... 19 词汇表.... 19...
  • 2.8 如何编写U n i c o d e源代码

    千次阅读 2012-06-27 20:12:41
    2.8 如何编写U n i c o d e源代码 M i c r o s o f t公司为U n i c o d e设计了Windows API,这样,可以尽量减少对你的代码的影响。实 际上,你可以编写单个源代码文件,以便使用或者不使用U n i c o d e来对它...
  • 以一个脚本为范例,讲述如何通过EmEditor创建脚本。大家以后可以按照这个方式快速的编写自己想要的脚本。 [脚本] 可以一键实现EmEditor打开的文件中的中文字符全部替换成对应的英文字符。 方便扩展,大家可以在脚本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 681
精华内容 272
关键字:

如何编写宏