ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 55642|回复: 122

给vba插上翅膀,---在VBA中使用RUBY

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-5-8 09:09 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:脚本语言应用
在VBA中使用RUBY
[编辑本段]Ruby 简介
  Ruby,一种为简单快捷面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada 以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java 平台)、IronRuby(.NET 平台)等其他平台的 Ruby 语言替代品。
[编辑本段]Ruby 的理念
  减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计 Ruby 语言的 Matz 的一个首要的考虑;其次是良好的界面设计。他强调系统设计必须强调人性化,而不是一味从机器的角度设想。
  “ 人们特别是电脑工程师们,常常从机器着想。他们认为:“这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。”实际上,我们需要从人的角度考虑问题,人们怎样编写程序或者怎样使用机器上应用程序。我们是主人,他们是仆人。 ”
  遵循上述的理念,Ruby 语言通常非常直观,按照编程人认为它应该的方式运行。
  Semantics
  Ruby 是完全面向对象的:任何一点数据都是对象,包括在其他语言中的基本类型(比如:整数,布尔逻辑值),每个过程或函数都是方法。
[编辑本段]Ruby 的特点
  完全面向对象
  在Ruby语言中,任何东西都是对象,包括其他语言中的基本数据类型,比如整数
  变量没有类型
  Ruby的变量可以保有任何类型的数据。
  任何东西都有值
  不管是数学或者逻辑表达式还是一个语句,都有值
  命名规则
  Ruby的变量有一定的规则,以$开头的一定是全局变量,以@开头的都是实例变量,而以@@开头的是类变量。常数则以大写字母开头;这种方法,对文本编辑器的命令补全很有帮助,如在vim下先键入$及开头字母,再敲击Ctrl+p,则可专门补全本文件以及关联文件中的全局变量,perl与php亦有此优点。
  已经定义的类可以在运行时修改
  Ruby是动态语言,你可以在程序中修改先前定义过的类。 也可以在某个类的实例中定义该实例特有的方法,这叫做单立方法。
  class MyClass
  def the_method
  "general method"
  end
  end
  mc = MyClass.new
  def mc.the_method
  "special for this instance."
  end
  mc.the_method #special for this instance
  使用Ruby可以写出简短而有功能强大的代码
  #下面的方法用来完成两个矩阵的乘积
  def matrix_mul(matrix1,matrix2)
  result=Array.new
  (0...matrix1.length).each {|i| temp=Array.new;(0...matrix2.length).each{|j| tmp=0; (0...matrix1[0].length).each {|k| matrix1[k].to_f*matrix2[k][j].to_f }; temp<<tmp}; result<<temp}
  return result
  end
  
[编辑本段]Ruby概述
  Ruby是一种功能强大的面向对象的脚本语言,它可以使您方便快捷地进行面向对象编程.有时使用像Smalltalk、Eiffel或C++这样正式的面向对象语言来开发一些小项目显得有点"小题大做",而Ruby刚好可以满足这些面向对象编程的需求.当然了,您也可以使用Ruby进行普通的面向过程编程.
  Ruby的文本处理能力极强,与Perl不分伯仲.同时,Ruby的语法简单,还有异常处理以及迭代器等构造,使编程变得简单明了.
  简而言之,您可以像使用Perl一样方便快捷地进行面向对象的开发.怎么样?赶紧试一试吧!
  Ruby是由松本行弘开发的免费软件.
  Ruby的优点:
  语法简单
  普通的面向对象功能(类,方法调用等)
  特殊的面向对象功能(Mixin,特殊方法等)
  操作符重载
  错误处理功能
  迭代器和闭包
  垃圾回收
  动态载入(取决于系统架构)
  可移植性高.不仅可以运行在多数UNIX上,还可以运行在DOS,Windows,Mac,BeOS等平台上
  Ruby的作者
  松本行弘 matz@netlab.jp
  松本行弘"Matz"(Matsumoto Yukihiro)是Ruby语言的发明人,他从1993年起便开始着手Ruby的研发工作。他一直想发明一种语言,使你既能进行高效开发又能享受编程的快乐。1993年2月24日Ruby诞生了,1995年12月Matz推出了Ruby的第一个版本Ruby 0.95。不久Ruby便凭借其独特的魅力横扫日本,相信在不久的将来,Ruby将走向世界。

windows须安装ACTIVERUBY.才能运行
下载地址  http://www.artonx.org/data/asr/ActiveRuby.msi

[ 本帖最后由 figfig 于 2010-5-9 21:54 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-5-8 09:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 10:06 | 显示全部楼层

设置变量简单

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"
x.eval "aa,bb=2,3"
Debug.Print x.eval("aa+bb")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 10:12 | 显示全部楼层

倒转字符串

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

Debug.Print x.eval("'abcdefg'.reverse")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 10:34 | 显示全部楼层

查2个数组重复和不重复值

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

x.eval ("a = [1, 3, 4, 5, 7] ; b = [2, 3, 5, 7, 9]; c=a & b;")

Debug.Print "重复数,", x.eval("c.join(',')")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 10:38 | 显示全部楼层

数组合并

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

x.eval ("a = [1, 3, 4, 5, 7] ; b = [2, 3, 5, 7, 9]; c=a + b;")

Debug.Print x.eval("c.to_s")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 10:41 | 显示全部楼层

数组排序取唯一值

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

x.eval ("a = [1, 3, 4, 5, 7] ; b = [2, 3, 5, 7, 9]; c=(a | b).sort;")

Debug.Print x.eval("c.join(',')")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 10:43 | 显示全部楼层

数组直接加工(如数组每个元素平方)

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

x.eval ("a = [1, 3, 4, 5, 7] ; c= a.map { |i| i * i }  ")

Debug.Print x.eval("c.join(',')")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 11:47 | 显示全部楼层

数组随意增减

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

x.eval ("c = [0, 1, 2, 3, 4];c.delete_at 2")

Debug.Print x.eval("c.*(',')")

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-8 11:50 | 显示全部楼层

数组插入

Sub yy()

Set x = CreateObject("scriptcontrol")
x.Language = "rubyscript"

x.eval ("ary = %w[ foo bar baz ];ary.insert( 2, 'a', 'b')")

Debug.Print x.eval("ary.*(',')")

End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 11:47 , Processed in 0.040492 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表