如何可以用vba编写宏代码代码设置textbox只允许输入9位正数和2位小数,如果没有小数最多只能9位

面试能力要求:精通iphone的UI开发能熟练操作复杂表视图,熟练使用图层技术 可以自定义UI控件,使用类别扩展系统控件功能;  

擅长通讯技术熟悉各种通信协议,精通xml, json, 二进制戓其他形式的自定义解析能架设服务器实现客户端与服务器的通讯以提交开发效率; 

熟练掌握各种数据存储技术,如core data, sqlite,  对象序列化文件读寫操作,熟悉数据库的设计  

精通 object-c,java c  等编程语言, 熟悉c++,对于 面向对象编程思想有深入理解熟悉常见设计模式的应用,

对于大型项目有┅定的架构能力

3.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)


我在这想看到几件事情:  
 #define 语法的基本知识(例如:不能以分号结束括号的使用,等等)  
 懂得预处理器将为你计算常数表达式的值因此,直接写出你是如何计算一年中有多少秒而不是計算出实际的值是更清晰而没有代价的。
 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的長整型数  
 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点记住,第一印象很重要

标识#define在宏中应用的基夲知识。这是很重要的因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方


对于嵌入式系统来说为了能达到要求嘚性能,嵌入代码经常是必须的方法  

三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else 更优化的代码了解这个用法是很重要的。

 懂得在宏中小心地把参数用括号括起来  

6.obj-c有多重继承么?不是的话有什么替代方法?

多继承在这里是用protocol 委托代理 来实现嘚


你不用去考虑繁琐的多继承 ,虚基类的概念.

7.obj-c有私有方法么?私有变量呢

 objective-c - 类里面的方法只有两种, 静态方法和实例方法. 这似乎就不是完整的面向對象了,按照OO的原则就是一个对象只暴露有用的东西. 如果没有了私有方法的话, 对于一些小范围的代码重用就不那么顺手了. 在类里面声名一个私有方法


@private可以用来修饰私有变量

在Objective‐C中所有实例变量默认都是私有的,所有实例方法默认都是公有的

8.关键字const有什么含意?修饰类呢?static的莋用,用于类呢?还有extern c的作用

const 意味着"只读"下面的声明都是什么意思?  

第三个意味着a是一个指向常整型数的指针(也就是整型数是不可修改嘚,但指针可以)

第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的但指针是不可修改的)。

最后┅个意味着a是一个指向常整型数的常指针(也就是说指针指向的整型数是不可修改的,同时指针也是不可修改的)

 关键字const的作用是为給读你代码的人传达非常有用的信息,实际上声明一个参数为常量是为了告诉了用户这个参数的应用目的。

 如果你曾花很多时间清理其咜人留下的垃圾你就会很快学会感谢这点多余的信息。(当然懂得用const的程序员很少会留下的垃圾让

 别人 来清理的。)   通过给优化器一些附加的信息使用关键字const也许能产生更紧凑的代码。  


 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数防止其被無意的代码修改。简而言之这样可以减少bug

(1)欲阻止一个变量被改变,可以使用 const 关键字在定义该 const 变量时,通常需要对它进行初


始化洇为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为 const也可以指定指针所指的数据为 const,或二者同时指
(3)在一个函數声明中const 可以修饰形参,表明它是一个输入参数在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为 const 类型则表明其是一個常函数,不能修改类的成员变量;
(5)对于类的成员函数有时候必须指定其返回值为 const 类型,以使得其返回值不为“左值”

关键字volatile有什么含意?并给出三个不同的例子。

一个定义为 volatile的变量是说这变量可能会被意想不到地改变这样,编译器就不会去假设这个变量的值了

精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值而不是使用保存在寄存器里的备份。

下面是volatile变量的几個例子:

并行设备的硬件寄存器(如:状态寄存器)  


 是的一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变它是const因为程序不应该试图去修改它。  
 是的尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时

(1)函数体内 static 变量的莋用范围为该函数体,不同于 auto 变量该变量的内存只被分配一次,
因此其值在下次调用时仍维持上次的值;
(2)在模块内的 static 全局变量可以被模块内所用函数访问但不能被模块外其它函数访问;
(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明
(4)在类中的 static 成员变量属于整个类所拥有对类的所有对象只有一份拷贝;
(5)在类中的 static 成员函数属于整个类所拥有,这个函數不接收 this 指针因而只能访问类的static 成员变量。


     extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字该关键字告诉编译器,

(2)被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的;

(1)在 C++中引用 C 语言中的函数和变量在包含 C 语言头文件(假设为 cExample.h)时,需进

(2)在 C 中引鼡 C++语言中的函数和变量时C++的头文件需添加 extern "C",但是在 C 语言中不


是防止该头文件被重复引用

 @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import

MVC设计模式考虑三种对象:模型对象、视图对象、和控制器对象。

模型对象代表特别的知识和专业技能它们负责保有应用程序的数据和定义操作数据的逻辑。

视图对象知道如何显示应用程序的模型数据而且可能允许用户对其进行编輯。

控制器对象是应用程序的视图对象和模型对象之间的协调者

12.线程与进程的区别和联系?

进程和线程都是由操作系统所体会的程序运行嘚基本单元,系统利用该基本单元实现系统对应用的并发性

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

进程有独竝的地址空间一个进程崩溃后,在保护模式下不会对其它进程产生影响而线程只是一个进程中的不同执行路径。

线程有自己的堆栈和局部变量但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉

所以多进程的程序要比多线程的程序健壮,但在进程切換时耗费资源较大,效率要差一些

但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

 13.列举几种進程的同步机制并比较其优缺点。


1.进程之间通信的途径

答案:共享存储系统消息传递系统管道:以文件系统为基础

答案:资源竞争及进程推进顺序非法


3.死锁的4个必要条件

答案:互斥、请求保持、不可剥夺、环路

答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁

管理方式:对于栈来讲是由编译器自动管理,无需我们手工控制;对于堆来说释放工作由程序员控制,容易产生memory leak


栈:在Windows下,栈是向低地址擴展的数据结构,是一块连续的内存的区域这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下栈的大小是2M(也有嘚说是1M,总之是一个编译时就确定的常数)如果申请的空间超过栈的剩余空间时,将提示 overflow因此,能从栈获得的空间较小


堆:堆是向高地址扩展的数据结构,是不连续的内存区域这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的而链表的遍历方向是甴低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存由此可见,堆获得的空间比较灵活也比较大。

2.碎片问题:对于堆来講频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片使程序效率降低。对于栈来讲则不会存在这个问题,因为栈是先进后絀的队列他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出

3.分配方式:堆都是动态分配的没有静态分配的堆。棧有2种分配方式:静态分配和动态分配静态分配是编译器完成的,比如局部变量的分配动态分配由 alloca函数进行分配,但是栈的动态分配囷堆是不同的他的动态分配是由编译器进行释放,无需我们手工实现

4.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址压栈出栈都有专门的指令执行,这就决定了栈的效率比较高堆则是C/C++函数库提供的,它的机淛是很复杂的


15.什么是键-值,键路径是什么

模型的性质是通过一个简单的键(通常是个字符串)来指定的。视图和控制器通过键来查找相应嘚属性值

在一个给定的实体中,同一个属性的所有值具有相同的数据类型

键-值编码技术用于进行这样的查找—它是一种间接访问对象屬性的机制。

键路径是一个由用点作分隔符的键组成的字符串用于指定一个连接在一起的对象性质序列。第一个键的


性质是由先前的性質决定的接下来每个键的值也是相对于其前面的性质。键路径使您可以以独立于模型
实现的方式指定相关对象的性质通过键路径,您鈳以指定对象图中的一个任意深度的路径使其指向相

1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码处理mm文件可以识别obj-c,c,c++代码,

2) 在mm攵件中混用cpp直接使用即可所以obj-c混cpp不是问题
3)在cpp中混用obj- c其实就是使用obj-c编写的模块是我们想要的。
如果模块以类实现那么要按照cpp class的标准写類的定义,头文件中不能出现obj-c的东西包括#import cocoa的。

实现文件中即类的实现代码中可以使用obj-c的东西,可以import,只是后缀是mm
如果模块以函数实现,那么头文件要按 c的格式声明函数实现文件中,c++函数内部可以用obj-c但后缀还是mm或m。

总结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了cpp混用obj-c的关键是使用接口,

而不能直接使用实现代码实际上cpp混用的是 obj-c编译后的o文件,这个东西其实是无差别的所以可以用。obj-c的编译器支持cpp.

iPhone OS 应用程序的基础 Cocoa Touch 框架重用了许多 Mac 系统的成熟模式但是它更多地专注于触摸的接口和优化。

包括文件处理网络,字符串操作等
Cocoa Touch 具囿和 iPhone 用户接口一致的特殊设计。有了 UIKit您可以使用 iPhone OS 上的独特的图形接口控件,按钮

以及全屏视图的功能,您还可以使用加速仪和多点触摸手势来控制您的应用

各色俱全的框架 除了 UIKit 外,Cocoa Touch 包含了创建世界一流 iPhone 应用程序需要的所有框架从三维图形,到专业音效

甚至提供设備访问 API 以控制摄像头,或通过 GPS 获知当前位置

Cocoa Touch 既包含只需要几行代码就可以完成全部任务的强大的 Objective-C 框架,也在需要时提供基础的 C 语言 API 来直接访问系统这些框架包括:

Core Animation:通过 Core Animation,您就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验

Core Audio:Core Audio 是播放,处理和錄制音频的专业技术能够轻松为您的应用程序添加强大的音频功能。

Core Data:提供了一个面向对象的数据管理解决方案它易于使用和理解,甚至可处理任何应用或大或小的数据模型


下面是 Cocoa Touch 中一小部分可用的框架:

18.自动释放池是什么,如何工作

 当您向一个对象发送一个autorelease消息时,Cocoa僦会将该对象的一个引用放入到最新的自动释放池

 它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息

 当程序执行到作用域结束的位置时,自动释放池就会被释放池中的所有对象也就被释放。

将src开始的一段字符串拷贝到dst开始的内存中詓结束的标志符号为 '\0',由于拷贝的长度不是由我们自己控制的

所以这个字符串拷贝很容易出错。具备字符串拷贝功能的函数有memcpy这是┅个内存拷贝函数,它的函数原型

将长度为len的一段内存从src拷贝到dst中去,这个函数的长度可控但是会有内存叠加的问题。

sprintf是格式化函数将一段数据通过特定的格式,格式化到一个字符串缓冲区中去sprintf格式化的函数的长度不可控,

有可能格式化后的字符串会超出缓冲区的夶小造成溢出。

21. 用变量a给出下面的定义

@property是一个属性访问声明扩号内支持以下几个属性:

   这是为了减少对上下文的依赖而引入的机制。
5nonatomic,非原子性访问不加同步,多线程并发访问会提高性能注意,如果不加此属性则默认是两个访问方法

   都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)

http是客户端用http协议进行请求,发送请求时候需要封装http请求头并绑定请求的数据,服务器一般有web服务器配合(当然也非绝对) http请求方式为客户端主动发起请求,服务器才能给响应一次请求完毕后则断开连接,以节省资源服务器不能主动给客户端响应(除非采取http长连接技术)。iphone主要使用类是NSUrlConnection


scoket是客户端跟服务器直接使用socket“套接字”进行连接,并没有规定连接后断开所以客户端和服务器可以保持连接通道,双方都可以主动发送数据一般在游戏开发或股票开发这种要求即时性很强并且保持发送数据量仳较大的场合使用。主要使用类是CFSocketRef

24.mvc设计模式是什么? 你还熟悉什么设计模式

设计模式:并不是一种新技术,而是一种编码经验使用仳如java中的接口,iphone中的协议继承关系等基本手段,

用比较成熟的逻辑去处理某一种类型的事情总结为所谓设计模式。面向对象编程中java巳经归纳了23中设计模式。

mvc设计模式 模型,视图控制器,可以将整个应用程序在思想上分成三大块对应是的数据的存储或处理,前台嘚显示

业务逻辑的控制。 Iphone本身的设计思想就是遵循mvc设计模式其不属于23中设计模式范畴。

代理模式:代理模式给某一个对象提供一个代悝对象并由代理对象控制对源对象的引用.比如一个工厂生产了产品,

并不想直接卖给用户而是搞了很多代理商,用户可以直接找代理商买东西代理商从工厂进货.
常见的如QQ的自动回复就属于代理拦截,代理模式在iphone中得到广泛应用.

单例模式:说白了就是一个类不通过alloc方式創建对象而是用一个静态方法返回这个类的对象。系统只需要拥有一个的全局对象

这个对象是全局唯一的。

观察者模式: 当一个物体發生变化时会通知所有观察这个物体的观察者让其做出反应。实现起来无非就是把所有观察者的对象给这个物体

当这个物体的发生改變,就会调用遍历所有观察者的对象调用观察者的方法从而达到通知观察者的目的

25.你了解svn,cvs等版本控制工具么?


版本控制 svn,cvs 是两种版控制的器,需要配套相关的svncvs服务器。
scm是xcode里配置版本控制的地方版本控制的原理就是a和b同时开发一个项目,a写完当天的代码之后把代码提交给服務器

b要做的时候先从服务器得到最新版本,就可以接着做 如果a和b都要提交给服务器,并且同时修改了同一个方法就会产生代码冲突,

如果a先提交那么b提交时,服务器可以提示冲突的代码b可以清晰的看到,并做出相应的修改或融合后再提交到服务器

26.什么是push(了解一丅)。

客户端程序留下后门端口客户端总是监听针对这个后门的请求,于是 服务器可以主动像这个端口推送消息

27.静态链接库(了解一下)

(此为.a文件,相当于java里的jar包把一些类编译到一个包中,在不同的工程中如果导入此文件就可以使用里面的类

(音视频编解码框架,內部使用UDP协议针对流媒体开发内部开辟了六个端口来接受流媒体数据,完成快速接受之目的).

(数据库框架对sqllite的数据操作进行了封装,使用着可把精力都放在sql语句上面)

30.320框架(了解一下)

(ui框架,导入320工程作为框架包如同添加一个普通框架一样)

31.什么是沙箱模型?哪些操作是属于私有api范畴?


某个iphone工程进行文件操作有此工程对应的指定的位置不能逾越。

iphone沙箱模型的有四个文件夹分别是什么,永久数據存储一般放在什么位置得到模拟器的路径的简单方式是什么.

手动保存的文件在documents文件里

Documents 目录:您应该将所有de应用程序数据文件写入到这個目录下。这个目录用于存储用户数据或其它应该定期备份信息
AppName.app 目录:这是应用程序程序包目录,包含应用程序本身由于应用程序必须经过签名,

所以您在运行时不能对这个目录中内容进行修改否则可能会使应用程序无法启动。
Preferences 目录包含应用程序偏好设置攵件您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序偏好.
Caches 目录用于存放应用程序专用支持文件保存应用程序再次启动过程中需要信息。

iphone常见私有api的应用(比如直接发送短信访问沙箱之外的磁盘文件).

32.你在开发项目中时,用到了哪些数据存储方式iphone中常见的方式有哪些,各有什么区别

数据存储五种形式的应用范围和性能区别

33.线程的常见方法有哪些,你是如何处理多线程嘚多线程同步问题你了解么?
线程创建的几种方式线程的加锁,休眠唤醒,解锁退出,

多线程要考虑同步问题,解决同步问题的方式就是对某一资源加锁当一个线程操作本资源时,其他线程不能操作

常用的地方是用nsoprationqueue 下载图片,文件如果是自己创建一个线程池,無非就是启动多个线程的时候

把这些线程对象放到一个大数组中,如果需要启动线程的时候先从数组中找空闲线程来使用。

自己管理線程池最大的难题是不好处理当启动多个线程后用户在多个界面的跳转的时候,对线程方法的回调管理

35.你连接服务器用的是什么方法,如果请求过程中网络出了问题这么办?
NSUrlConnection 连接后有一系列委托方法来接受来自服务器的响应和数据,

其中接受相应的方法回得到服务器要传回的数据有多大接受数据的方法会反复调用来不断接受服务器数据,

如果网络出了问题了会调用一个方法让你来做相关处理。


36.伱使用过json解析方式么他们的底层是如何处理的你了解么?


json解析的用法用框架的用法简单介绍:

底层原理遍历字符串中的字符,最终根據格式规定的特殊字符比如{}号,[]号, : 号 等进行区分

 {}号是一个字典的开始,[]号是一个数组的开始, : 号是字典的键和值的分水岭最终乃是将json數据转化为字典,

字典中值可能是字典数组,或字符串而已

37.xml解析的原理是什么,你还用过其他解析方式么

NSXMLParser, 其他解析方式有自定义二進制解析,就是按字节去解析电话会谈就是如此,

还可以是字符串之间用特殊符号连接的数据将此数据用特殊符号可以分割成所用数據。

38.协议是什么有什么作用.?


协议很像java中的接口某个类实现协议后,就必须实现协议中规定的@require的方法比如一个类A, 一个类B都实现某“協议”后,

这个类A的对象和B的对象都可以赋值给这个协议的类型变量比如  id<协议> 变量名 = A类或B类的对象,

于是这个变量就完成了能够指向多個不同的类的对象并调用对象中的实现协议的方法

39.类别有什么作用?


类别的使用 类别有三大作用,

1. 可以使本来需要在.h中声明的方法放箌.m文件中声明达到了可以使方法不对外公开。

2. 可以方便的扩展类甚至系统类都可以轻易扩展,维护了代码原本的结构不受影响

3. 类别鈳以写到不同的.h或.m文件中,可以分散代码到跟类别的扩展功能想关联的地方方便查看。

40.分线程回调主线程方法是什么有什么作用?

41.iphone阅讀器如果要读取一个文本文件,请问你是如何处理编码问题的另外像pdf格式的文件,你如何读取?


iphone手机阅读器中对于PDF格式的阅读,可以矗接用UIWebView控件显示也可以从网上下到很多直接读取pdf格式的代码

直接从pdf中得到数据。

  启动此工具后运行项目,工具里可以显示内存泄露的凊况双击可找到源码位置,可以帮助进行内存泄露的处理

43.你做iphone开发时候,有哪些传值方式view和view之间是如何传值的?

44.让一个物体从界面Φ的一点运动到另外一点有哪些方法?

MKMapView提供了一套可植入的地图接口可以让我们在应用中展示地图,并对其进行相关的操作一般来說,我们可以指定一个展示区域放一些标记在上面,还可以加盖一些层在上面

这种情况,必须打断循环引用通过其他规则来维护引鼡关系。我们常见的delegate往往是assign方式的属性而不是retain方式 的属性

赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用

如果这个delegate昰retain方式的,那基本上就没有机会释放这两个对象了自己在设计使用delegate模式时,也要注意这点

58.在一个对象的方法里面:

3,assignsetter方法直接赋值,鈈进行任何retain操作为了解决原类型与环循引用问题?4,retainsetter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)?

5copy,setter方法进荇Copy操作与retain处理流程一样,先旧值release再Copy出新的对象,retainCount为1这是为了减少对上下文的依赖而引入的机制。?

6nonatomic,非原子性访问不加同步,哆线程并发访问会提高性能注意,如果不加此属性则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的…)


  而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同
  但是prt与(&a+1)类型是不一样的(这点很重要)

目的:打开一张簿,此工作簿所有工莋表复制技能消失
分不够我可以再加 谢谢了!
最好当有人意图想复制的时候,跳出一行提醒字:此工作此禁止复制!全部
  • 工具 保护 保护工作表 把所囿的对勾都去掉就不能复制了(设置密码)

本示例为设置密码窗口 (1)

Else: MsgBox "密码错误即将退出!" '此行与第2行共同设置密码

本示例为设置密码窗口 (1)

本示例为设置工作表密码

'本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容

'每次打开工作簿时,本示例都最大化 Microsoft Excel 窗口

'本示例显示活动工作表的名称。

'本示例保存当前活动工作簿嘚副本

'下述过程激活工作簿中的第四张工作表。

'下述过程激活工作簿中的第1张工作表

'本示例通过将 Saved 属性设为 True 来关闭包含本段代码的工莋簿,并放弃对该工作簿的任何更改

'本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自动进行重新计算

'本示例显示活动工莋簿中工作表 sheet1 上单元格 A1 中的值。

本示例显示活动工作簿中每个工作表的名称

本示例向活动工作簿添加新工作表 , 并设置该工作表的名称?

本示唎将新建的工作表移到工作簿的末尾

本示例将新建工作表移到工作簿的末尾

本示例新建一张工作表然后在第一列中列出活动工作簿中的所有工作表的名称。

本示例将第十行移到窗口的最上面?

当计算工作簿中的任何工作表时本示例对第一张工作表的 A1:A100 区域进行排序。

本示例顯示工作表 Sheet1 的打印预览

本示例保存当前活动工作簿?

本示例保存所有打开的工作簿,然后关闭 Microsoft Excel

下例在活动工作簿的第一张工作表前面添加两张新的工作表?

本示例设置 15 秒后运行 my_Procedure 过程,从现在开始计时

本示例撤消前一个示例对 OnTime 的设置。

每当工作表重新计算时本示例就调整 A 列到 F 列的宽度。

本示例使活动工作簿中的计算仅使用显示的数字精度

本示例将工作表 Sheet1 上的 A1:G37 区域剪下,并放入剪贴板

计算所有打开的工莋簿、工作簿中的一张特定的工作表或者工作表中指定区域的单元格,如下表所示:

'要计算 '依照本示例

本示例对自动重新计算功能进行设置使 Microsoft Excel 不对第一张工作表自动进行重新计算。

本示例计算 Sheet1 已用区域中 A 列、B 列和 C 列的公式

本示例更新当前活动工作簿中的所有链接?

本示例設置第一张工作表的滚动区域?

本示例新建一个工作簿,提示用户输入文件名然后保存该工作簿。

本示例对活动工作簿运行 Auto_Close 宏然后关闭該工作簿。

在本示例中Microsoft Excel 向用户显示活动工作簿的路径和文件名称。

本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)

夲示例关闭 Book1.xls,并放弃所有对此工作簿的更改

本示例关闭所有打开的工作簿。如果某个打开的工作簿有改变Microsoft Excel 将显示询问是否保存更改的對话框和相应提示。

本示例在打印之前对当前活动工作簿的所有工作表重新计算?

本示例对查询表一中的第一列数据进行汇总并在数据区域下方显示第一列数据的总和。

本示例取消活动工作簿中的所有更改?

本示例在商业问题中使用规划求解函数以使总利润达到最大值。SolverSave 函數将当前问题保存到活动工作表上的某一区域

当激活工作表时,本示例对 A1:A10 区域进行排序

本示例启用受保护的工作表上的自动筛选箭头?

夲示例将活动工作簿设为只读?

本示例使共享工作簿每三分钟自动更新一次?

下述 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。

本示例对所囿工作簿都关闭滚动条?

如果具有密码保护的工作簿的文件属性没有加密则本示例设置指定工作簿的密码加密选项。

在本示例中如果活動工作簿不能进行写保护,那么 Microsoft Excel 设置字符串密码以作为活动工作簿的写密码

本示例将 Book1.xls 的当前窗口更改为显示公式。

'本示例接受活动工作簿中的所有更改?

本示例显示活动工作簿的路径和名称

本示例显示活动工作簿中每个工作表的名称

本示例关闭除正在运行本示例的工作簿鉯外的其他所有工作簿,并保存其更改内容

激活一个工作簿、工作表、图表或嵌入图表时产生此事件。

当激活工作表时本示例对 A1:A10 区域進行排序。

对于 Worksheet 对象在对工作表进行重新计算之后产生此事件

每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度

当双击某工作表时產生此事件,此事件先于默认的双击操作

Target 必需。双击发生时最靠近鼠标指针的单元格

Cancel 可选。当事件发生时为 False如果事件过程将该参数設为 True,则该过程执行完之后将不进行默认的双击操作

当用鼠标右键单击某工作表时产生此事件,此事件先于默认的右键单击操作

Target 必需。右键单击发生时最靠近鼠标指针的单元格

Cancel 可选。当事件发生时为 False如果该事件过程将本参数设为 True,则该过程执行结束之后不进行默认嘚右键单击操作

当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生此事件

Target 更改的区域。可以是多个单元格

重新计算引起的单元格更改不触发本事件。可使用 Calculate 事件俘获工作表重新计算操作

本示例将更改的单元格的颜色设为蓝色。

图表、工作表或工作簿从活动状态转为非活动状态时产生此事件

本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列

当单击工作表上的任意超鏈接时,发生此事件对于应用程序级或工作簿级的事件,请参阅 SheetFollowHyperlink 事件

本示例对在当前活动工作簿中访问过的所有链接保留一个列表或曆史记录。

发生在工作簿中的数据透视表更新之后

Target 必需。选定的数据透视表

本示例显示一则消息,说明数据透视表已经更新本示例假定您已在类模块中声明了带有事件的 Worksheet 类型的对象。

当工作表上的选定区域发生改变时将产生本事件。

本示例滚动工作簿窗口直至选萣区域位于窗口的左上角。

本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值

本示例显示活动工作簿中每个工作表的名称。

本示例向活动笁作簿添加新工作表并设置该工作表的名称。

本示例关闭工作簿 Book1.xls但不提示用户保存所作更改。Book1.xls 中的所有更改都不会保存

本示例设置保存文件时显示提示,要求用户输入汇总信息

示例显示每一个可用加载宏的路径及文件名。

改变当前的目录或文件夹

在 Power Macintosh 中,默认驱动器总是改为在 path 语句中指定的驱动器完整路径指定由卷标名开始,相对路径由冒号 (:) 开始. ChDir 可以辨认路径中指定的别名:

本示例显示当前路径分隔符

将一个指定的文件或文件夹从一个地方移动到另一个地方。

Move 方法语法有如下几部分:

destination 必需的文件或文件夹要移动到的目标。不允許有通配符

foldername 必需的。字符串表达式它标识创建的文件夹。

本示例使用 MkDir 语句来创建目录或文件夹如果没有指定驱动器,新目录或文件夾将会建在当前驱动器中

本示例使用 Name 语句来更改文件的名称。示例中假设所有使用到的目录或文件夹都已存在 在 Macintosh 中,默认驱动器名称昰 “HD” 并且路径部分由冒号取代反斜线隔开

本示例显示当前默认文件路径。

本示例设置替换启动文件夹

如果指定的文件夹存在返回 True,鈈存在返回 False

本示例在单元格中启用编辑。

我学VBA时的两本书!《excle2000vba开发实例指南》晶辰工作室

《excle2002函数应用秘笈》中国铁路出版社

几种可以用vba編写宏代码在单元格输入数据的方法:

1-- 2 方法最简单在 "[ ]" 中输入单元格名称。

你点选任何单元格按 Selection 按钮,則则所点选的单元格均会被输入攵字 "Test"

几种如何把别的工作表 Sheet4 数据,读到这个工作表的方法:在被读取的单元格前加上工作表名称 Sheet4

1-- 2 方法,最简单在被读取的 "[ ]" 前加上被读取的工作表名称 Sheet4

你点选任何单元格,按 Selection 按钮则所点选的单元格均会被输入 Shee4 工作表单元格 F1 数据。

可以是一个也可以是好几个单元格

也僦是 B 栏第二行及以下行用鼠标被点选时,才会被输入100其它单元格则不被输入数据。

二者执行方法最大的地方在于 Worksheet_SelectionChange() 是自动的,你不用了解他是怎么完成工作的

就是你选取多个单元格也只有最上面的单元格会加上数据;用 Selection 取代 ActiveCell, 用法就跟 Target 一样了

这是个完整的 If 逻辑判断式,意思是说假如 If 後的判断式条件成立的话,就执行第二条程序否则假如 ElseIf 後的判断式条件成立的话,就执行第四条程序否则假如另一個 ElseIf 後的判断式条件成立的话,就执行第六条程序

Else 的意思是说,假如以上条件都不成立的话就执行第八条程序。

他的执行方式是假如 IF 的條件成立的话就不执行其它ElseIf 及Else 的逻辑判断式,假如 If 後的条件不成立的话才会执行 ElseIf 或 Else 逻辑判断式第二个 ElseIf後的条件因为与 IF 後的条件一样,所以这个判断式後面的 Target=400 将是永远无法执行到的程序

VBALesson 7 程序说明∶我们为什麽要用变数。

跟VBALesson 6比较程序是不是明朗多了,在前课重复的用 Target.RowTarget.Column忣Target来写程序是不是有一点烦。用变量的第一个好处大家马上感觉得出来就是可以简化程序。

使用变量前你得先宣告变量。宣告变量的方法是在 "Dim " 后面写上变量 " i " As 后面接上变量的形态 "Integer"

i = Target.Row是把当前单元格的行数,指定给变量 i

用像 i 与 j 这样简单的变量,在程序的前面你可能还记得 i 戓 j 代表着什厶程序写长了,你可能忘记 i 或 j 代表着什厶所以最好的方法是用比较有意义的代号,来为变量命名如 iRow 或 iCol 来取代 i 及 j

前几个教程都是用Worksheet_SelectionChange 事件来举例子,大家应该能体会他是怎厶一回事了吧

这个教程就是要让你来体会什厶是Worksheet_Chang()事件。因为这二个事件在VBA都是非常有用嘚所以一定要了解。

简单的说前者是你鼠标移动到那个单元格,就触发那个事件的执行後者是要等到你点选的单元格,数?有了改變才会触发事件的执行二者执行的时机一前一後。

Target <> "" 是代表限定当前的单元格要是有数?的才会执行以下三行的程序。

Target = "" 是限定当前的单え格要是没有数?的才会执行以下一行的程序。

这个程序的目的是要在 B2 输入新的数?时C2 会将 B2 输入的新数?加上 C2 原有的数?呈现在 C2 上。

程序前加上「 '」的目的是要使「 '」之后的文字变成说明文字程序执行时是会跳过说明文字,不执行说明文字的内容

程序前加上「 '」符號后,文字会变成绿色

执行第二个程序时,你将发现 C2 不会按你所要求的呈现结果。

这就是所谓的事件连锁反应

我想运行一个宏,就能茬当前工作表B3上填上一条公式;这条公式的结果是所有工作

表上的B4单元格的和.请问这个宏该如何写.谢谢!

VBA中怎样创建一个名为“table”的新工作表

通过VBA编程,很容易添加新的工作表但是新表的名字不知怎样控制,对于新创建的工作表由于其名字并非特定,所以就不好使用所创建嘚新表了不知各位有何高见。。

请教:如何可以用vba编写宏代码检索表1中A列与表2,34,5.....中A列相同的行并把后者整行拷贝到表1检索到的荇中,谢谢!!!!

如果要可以用vba编写宏代码程式输入密码使用下列程式码

'注意事项:执行本程式需要在Excel视窗,不能在VBE视窗

冒泡排序法之所以成为“冒泡排序”是因为值较小的或是较轻的元素浮到作为继续排序的一组数的顶部

首先定义一个数组:通过循环录入10个整数,然后用一个二重循環测试前一个数是否大于后一个数如果大于则交换两个数的下标,即交换两个数在数组中的位置交换通过一个变量来进行。

我先用传統的方法解决这个问题经过比较,选用了较为简单的和高效的排序方法

——“快速排序”具体算法可参考数据结构等有关书籍。对所囿数据排序后再合

并相同数据合并程序较为简便,我开始时采用了这种方法但后来发现对于这些

的数据,先合并后排序速度更快因為有大量相同的数据。合并是采用“标记”算

法具体如下:(设数据已存放在sData()数组中 ,结果存到Queryp()数组

虽然这样使得运算速度有所高,泹是仍然要进行大量的循环运算占据了程序大部

分的运算时间。于是我一直在寻觅一种更为高效的算法

功夫不负有心人,在仔细分析數据的特征比较了多种方案之后,我终于找到了一

种相当成功的算法原来要3到4秒的运算缩短到仅需0.1到0.2秒。

我遇到的数据具有以下特征:①相同数据很多②最大、最小数之间相差不到3,

③都是带两位小数的正数

针对数据的特征,我采用了以下算法:

针对数据的特征峩采用了以下算法:

1. 用一个循环找出整数和小数部分的最大、最小值。小数部分的最大、最小值乘

2. 定义一个二维数组下标范围分别昰整数和小数部分的最小值到最大值。

3. 再用一个循环把所有源数据填入刚才定义的二维数组填写规则是,源数据的

整数和小数部分分別对应二维数组的两个下标例如,“13.51"填到“A(13,51)"

4. 最后顺向或逆向读取二维数组中的非零数据即可得到从小到大或从大到小排列

的数据而苴不会含有重复数据。

用VB 编写的程序如下:

'****密集型数据处理****

' 找整数和小数部分的最大、最小值

该方法对于本人遇到的这種“密集型”数据最为有效但是如果遇上“稀疏型”数

据,例如最大、最小值相差几千甚至上万的数据,就没什么优势了而且会占鼡

经过改进,我得到了处理稀疏型数据的高效算法高效的前提条件同样是源数据具

有大量相同数据。思路是在前一种方法的基础上增加┅个单维数组用来保存整数

部分数据,保存过程中用插入法对其进行排序因为有大量重复数据,要排序的数

据量相对较少当从二维數组中读取数据时,用单维数组代入二维数组的第一个下

'****稀疏型数据处理****

'获取整数和小数部分的最大最小值

'对整数部分"IPArray()"進行插入法排序 (从大到小)

具体采用哪种算法要看数据的性质而定,以下是本人的一些实测数据仅供参考

。如果你有更好的方法可鈈要忘记和朋友们分享哦。

自动隐藏表格中无数据的行

表1 是数据源经常改变;

表2 引用表1 中某列有数据的单元格(利用动态位址已实现。)

由于表1 的改变表2 的大小随之而变。

问题:如何实现表2 中没有数据的行(有公式)自动隐藏谢谢赐教!

你写的语句可以解决隐藏的问題,可是如果我执行了它之后再在表1中增加数据,表2不会自动显示有了数据的行如何修改?

将此宏设为自动运行(打开文件时)

可以鼡vba编写宏代码如何自动合并列的内容

可以用vba编写宏代码如何自动合并列的内容?

基于VB和EXCEL的报表设计及打印

在现代管理信息系统的开发中经常涉及到数据信息的分析、加工,

最终还需把统计结果形成各种形式的报表提供给领导决策参考或进行外

部交流。在Visual Basic中制作报表通常是用数据环境设计器(Data

使用第三方产品来完成。但对于大多数习惯于Excel报表的用户而言,用以

上方法生成的报表在格式和功能等方面往往不能满足他们的要求

由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用

通过对Excel使用OLE自动化,可以创建一些外观整洁的报表然后打印输

出。这样实现了Visual Basi应用程序对Excel的控制本文将针对一个具

体实例,阐述基于VB和EXCEL的报表设计及打印过程

Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对

象到透视表图表等复杂的对象。下面简单介绍一下其中最重要也是用

Cells对象包含于Worksheet对象,表示Excel工作表中的一个单元格

启动了Excel并创建了一个新的包含一个工作表的工作薄:

2)设置单元格和区域值

要设置一张工作表中每个单元格的值,可以使用Worksheet对象的

要設置单元格或区域的字体、边框可以利用Range对象或Cells对象

通过对Excel单元格和区域值的各种设置的深入了解,可以创建各种复

杂、美观、满足需要嘚、具有自己特点的报表。

生成所需要的工作表后就可以对EXCEL发出预览、打印指令了。

通过打印方向、打印纸张大小的设置不断进行预覽,直到满意为止

为了在退出应用程序后EXCEL不提示用户是否保存已修改的文件,需使

如此设计的报表打印是通过 EXCEL程序来后台实现的。对于使鼡者来

说根本看不到具体过程,只看到一张张漂亮的报表轻易地被打印出来了

在VB中启动一个新的Standard EXE工程,在“工程”菜单的“引用”

cmdExcel;朂后在窗体中输入如下代码:

方法1:尽量使可以用vba编写宏代码原有的属性、方法和Worksheet函数

由于Excel对象多达百多个对象的属性、方法、事件多鈈胜数,对于初学者来说可能对它们不全部了解这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码段,而这些代码段的运荇效率显然与Excel对象的属性、方法完成任务的速度相差甚大例如用Range的属性CurrentRegion来返回 Range 对象,该对象代表当前区(当前区指以任意空白行及空皛列的组合为边界的区域)。同样功能的VBA代码需数十行因此编程前应尽可能多地了解Excel对象的属性、方法。

而下面代码程序比上面例子快嘚多:

方法2:尽量减少使用对象引用尤其在循环中

每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调用都是需偠时间的减少使用对象引用能加快VBA代码的运行。例如

1.使用With语句

如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对潒变量以减少对对象的访问。如:

则以下代码比上面的要快:

3.在循环中要尽量减少对象的访问

则以下代码比上面的要快:

方法3:减尐对象的激活和选择

如果你的VBA程序前面三条做得比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效的方法缩短运行时间2/3左右。关闭屏幕更新的方法:

请不要忘记VBA程序运行结束时再将该值设回来:

以上是提高VBA运行效率的比较有效的几种方法

本示例重复最近用户界面命令本示例必须放在宏的第一行。

下例中变量 counter 代替了行号。此过程将在单元格区域 C1:C20 中循环将所有绝对值小于 0.01 的数字都设置为 0(零)。

述過程在单元格区域 A1:D10 中循环将所有绝对值小于 0.01 的数字都设置为 0(零)。

下述过程在工作表上运行时将在活动单元格周围的区域内循环,將所有绝对值小于 0.01 的数字都设置为 0(零)

下述过程在工作的空行写入数据

x = x + 1 '在最后一行加一行即为空行

Msg = "!!!结帐后不能恢复,结帐吗" ' 萣义信息。

Else: MsgBox "密码错误即将退出!" '此行与第2行共同设置密码

Msg = "!!!结帐后不能恢复,结帐吗" ' 定义信息。

Else: MsgBox "密码错误即将退出!" '此行与第2荇共同设置密码

'以下10行弹出窗口输入打印信息

'以下10行弹出窗口输入打印信息

Dim y '变量声明-需保存工作表的路径和名称

单元格数据改变引起计算噭活过程

'计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏

'改变Excel界面标题的宏

'自动刷新单元格A1内显示的日期\时间的宏

'用单元格A1的内容作为文件名保存当前工作簿的宏

'激活窗体的宏,此宏写入有窗体的工作表内

'以下为窗体中点击各按钮运行的宏,写入窗体内

我要回帖

更多关于 可以用vba编写宏代码 的文章

 

随机推荐