前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >以太坊五周年:从涅槃中苏醒

以太坊五周年:从涅槃中苏醒

作者头像
区块链大本营
发布于 2023-03-31 07:13:24
发布于 2023-03-31 07:13:24
3140
举报
文章被收录于专栏:区块链大本营区块链大本营

来源 | Unitimes

责编 | 晋兆雨

封图 | CSDN 下载自视觉中国

《以太坊协议的史前史》作者:Vitalik Buterin,翻译:喏呗尔 《以太坊5岁啦!》作者:以太坊基金会,翻译:Johnny

庆生

区块链再一次走进普罗大众的视野,并得到科技巨头们前所未有的重视时,以太坊已经成为区块链领域无法被忽视的巨舰。在资本肆无忌惮野蛮增长的混沌时代,以太坊的开发者和社区始终小心翼翼地呵护着这艘小船,把稳方向,一路打怪升级成为一代巨舰。

2020年7月30日,不仅是以太坊五周年的破壳日,同样令人颇具期待的是:数日之后,以太坊2.0的测试网将正式启动,标志着以太坊距离世界计算机跨越了一大步。截止目前,以太坊2.0测试网启动进度已完成超过92%。

劫难

以太坊从诞生至今,从未远离过质疑和嘲笑。作为一台承载逻辑极度复杂的世界信任机器,以太坊曾经遭遇过大量的攻击和运行挑战。最著名的莫过于2016年发生的The DAO事件。

2016年6月17日,以太坊创始人Vitalik在Reddit发布了一篇紧急警告,告知“DAO受到黑客攻击,请各交易平台马上暂停ETH/DAO交易及充值提现”。这场历时1个月的攻防战争最终以以太坊区块链被分裂为ETH(沿用“以太坊”一名)和ETC(以太经典)告终。在经历The DAO事件以后,以太坊在很长一段时间内无法摆脱“中心化”的质疑,并受到来自其他外界社区的围攻。

今天人们的欢庆,仿佛已然忘记昨日的教训。在未来,以太坊最大的敌人不是外部,恰恰来自于内部本身。确保航母每一个细致的模块都运作正常,远比抵御外敌要困难得多。

分别

以太坊诞生以后,创始团队成员逐渐把中心转移到更加宽广的领域,或致力于扩展以太坊的生态,或致力于探索新的技术,成为以太坊的竞争者。如今,除了Vitalik依然专注于以太坊的发展,其他创始人分别致力于以太坊社交框架Akasha(Mihai Alisie)、Jaxx钱包(已离职,Anthony Dilorio)、公有链Cardano(Charles Hoskinson)、Polkadot和Web3基金会(Gavin Wood)。

待续

2017年,Vitalik在他的个人网站https://vitalik.ca写了一篇回顾“以太坊是如何诞生”的文章。乘着以太坊五周年生日之际,我们不妨重新回顾一下这篇《以太坊协议的史前史》。

本文摘自由Vitalik Buterin本人撰写,灵钛科技和独角时代翻译出版的《理·想:以太坊的区块链创世录》。同时诚挚感谢以太坊社区的每一位开发者、翻译者和布道者,只因有你,区块链的世界不再单调。

以太坊协议的史前史

(2017年9月14日)

编者按:本文是维塔利克对以太坊协议发展历程的回忆,讲述了以太坊协议从构思到初次发布、迭代的故事。

尽管当前以太坊协议背后的理念在这两年已经大致稳定下来了,但以太坊当前的构想和完整形式并非一朝一夕形成的。在以太坊区块链面世之后,其协议经历了一系列重大的演变和决策。本文旨在回顾以太坊协议从开始到发布的演变过程。至于Geth、cppethereum、pyethereum以及EthereumJ在协议实现的过程中所做的大量工作,以及关于以太坊生态系统的应用和商业历史,将不在本文讨论的范围内。

同样不在讨论范围内的还有关于Casper以及分片研究的历史。毫无疑问,我们可以写更多的文章来讨论弗拉德(Vlad)、加文(Gavin)、我自己以及其他人曾经提出过并且被舍弃的各种观点,包括工作量证明的证明、轮辅式多链、超立方体、影子链(可以说是Plamsa的前身)、链纤维以及Casper的各种迭代版本,还有弗拉德提出的对在共识协议内参与者的激励机制及其性质进行推理的快速演变思想。这些观点背后的故事本身已经复杂到足以另写一篇文章。因此,暂时不讨论它们。

先从最早的版本说起。这个版本最终成了以太坊,但在当时它甚至还不叫以太坊。我在2013年10月访问以色列的时候,花了很多时间与万事达币团队在一起,甚至还建议他们添加某些功能。再三思考过他们所做的事情以后,我向团队发送了一份提案,提议让他们的协议变得更加通用,并且能够在无需增加庞大而复杂的功能集的情况下支持更多类型的合约:

https://web.archive.org/web/20150627031414/http://vbuterin.com/ultimatescripting.html

需要注意的是,这一版本与以太坊后期更广阔的愿景大相径庭:它纯粹只专注于万事达币当时正在尝试突破的技术,即双方合约。在该合约中,A方和B方共同投入资金,随后双方可以根据合约中指定的某些公式将资金提取出来(例如,赌注内容为“如果X发生了,则把所有的资金都给A;反之,则把所有的资金都给B”)。实现这个合约的脚本语言不是图灵完备的。

万事达币团队对此印象深刻,但是他们并没有兴趣放弃他们所做的一切事情去朝着这个方向发展,而我越发深信这是一个正确的选择。因此,大约在12月,第二个版本面世了:

https://web.archive.org/web/20131219030753/http://vitalik.ca/ethereum.html

在这个版本中,你可以看到完成了大量重构的结果。这些结果很大一部分都是11月份我在旧金山的一次长途漫步时想到的。到那时,我意识到智能合约具有完全通用化的潜力。比起脚本语言只能简单地描述双方关系,合约本身就是完成成熟的账户,并且具有持有、发送和接收资产的能力,甚至可以维持永久存储(在当时,永久存储被称为“内存”,并且唯一的临时“内存”是256寄存器)。只不过语言从基于栈的虚拟机转变为更符合我意愿的基于寄存器的虚拟机。我对此几乎没有异议,除了它看起来似乎更加复杂。

“以太(ether)”的字面意思是醚(即燃料,等同于gas)。在每一个计算步骤完成之后,一笔交易所调用的合约的余额将会减少一些。如果合约的资金耗尽,那么执行过程将会停止。请注意,这个接收者支付机制意味着合约本身必须要求发送者向该合约支付一笔费用。如果这笔费用没有到账,则立即退出执行。这一版本的协议分配了16个免费执行步骤的限额,从而允许合约拒绝不支付费用的交易。

截至此时,以太坊协议还是完全由我一个人构建的。然而,从这时开始,新的参与者开始加入以太坊的阵营。到目前为止,在协议方面表现最突出的是加文,他在2013年12月通过about.me的私信开始与我联系。

杰弗里·威尔克(Jeffrey Wilcke),Go客户端(当时被称为“ethereal”)的首席开发者,也在同一时期联系了我并开始编程。尽管他的贡献更多是在客户端开发而不是协议研究方面。

加文的早期贡献有两个方面。首先,你可能注意到在初始设计中的合约调用模型是异步的:尽管合约A可以创建一笔内部交易给合约B(“内部交易”是以太坊的行话:最初它们仅被称作“交易”,随后又被称为“消息调用”或者“调用”)。在第一笔交易的执行完全完成以前,内部交易的执行不会开始。这意味着交易不能使用内部交易作为从其他合约获取信息的途径;想从其他合约获取信息,只能使用EXTRO操作码(有点像你用来读取其他合约存储的SLOAD),但这个操作码随后在加文和其他人的支持下移除了。

在实现我最初的规范时,加文很自然地同步实现了内部交易功能,他甚至没有意识到两者意图的偏差——也就是说,在加文的实现中,当一个合约调用另一个合约时,内部交易会立即得到执行。一旦该执行完成,虚拟机将返回创建内部交易的合约,并继续执行下一个操作码。对于我俩,这种方法似乎更加出色,因为我们决定把它作为规范的一部分。

其次,是我和他之间的一次讨论(发生在旧金山的一次散步中,因此准确的细节将要永远地消失在历史的洪流中,但也有可能会存在于NSA的深层档案内的一两份副本中)引发了对交易费用模型的重构,从合约支付方式转向发送方支付方式,并且转换到燃料架构。比起最初在每个独立的交易步骤执行后立刻消耗一些以太币,在这一版本中,交易发起者支付一定的费用并被分配一定量的燃料(大致是一个计算步骤的计数器)。与此同时,计算步骤取决于燃料的限额。如果一笔交易花费了所有的燃料,那么这些燃料就被花费了,但整个执行过程将被还原。这似乎是最安全的做法,因为它移除了合约先前需要担心的所有部分执行攻击类型。当一笔交易执行完成时,任何未被使用的燃料所收取的费用将被退还。

加文在很大程度上使以太坊的愿景发生了十分微妙的变化:从一个用于构建可编程货币的平台——平台拥有基于区块链的合约,合约能够持有数字资产并且按照预先设置的规则进行转账——到一个通用的计算平台。这种变化从以太坊的着重点和术语的细微变化开始,后来随着我们对Web 3集成(它将以太坊视为去中心化技术套件的一部分,另外两部分是耳语协议和蜂群协议,图1)的日益强调,这一影响也在不断地增强。

图1

2014年初前后,我们还根据其他人的建议作了一些修改。在安德鲁·米勒(Andrew Miller)等人提出回到基于栈的架构这一想法以后,我们最终还是回去了(图2)。

图2

查尔斯·霍斯金森(Charles Hoskinson)建议我们从比特币的SHA256转换为更新的SHA3(或者更准确地说,是keccak256)。尽管有过一段时间争议,但通过与加文、安德鲁以及其他人进行讨论,我们还是确立了栈中的值的大小应该被限制在32 Byte。而另一种替代方案——无限制整数——则仍在考虑当中,因为该方案存在一个问题,即我们很难计算出执行加法、乘法以及其他操作到底需要多少燃料。

回到2014年1月,我们最初想到的挖矿算法是一个叫匕首 (Dagger) 的东西:

https://github.com/ethereum/wiki/blob/master/Dagger.md

匕首是根据有向无环图 (Directed Acyclic Graph, DAG) 命名的。DAG是一种用在算法中的数学结构,其思想是每隔N个区块,就会有一个新的DAG由种子伪随机生成。并且,DAG的底层将会是一个需要用几十亿字节来存储的节点的集合。然而,在DAG中,生成任意一个独立的值只需要计算计算几千个条目。一次匕首计算包含在这种底层的数据集中的任意位置获得一定数量的值,然后将这些值一起进行哈希运算。这意味着存在一种快速的方式可以进行匕首计算——已经将数据存储在内存中,然后以一种缓慢但不会导致内存紧张的方式——重新从DAG中生成你需要从头开始获取的每一个值。

这个算法的目的就是和当时流行的算法一样拥有相同的内存受限属性,就像Scrypt算法,但是仍然对轻客户端友好。矿工会使用快速的方法,所以他们的挖矿将受限于内存带宽 (理论上,消费者级别内存的优化程度已经足够高了,因此用ASIC对其进行进一步优化十分困难),但轻客户端可以使用内存宽松且缓慢的方式进行验证。快速方法可能只需几微秒,而慢速且内存宽松的方法可能需要几毫秒,所以这对轻客户端依然是可行的。

从这里开始,这个算法伴随着以太坊的发展历程发生了几次变化。接下来的想法是自适应工作量证明。在这个方案中,工作量证明将会涉及执行被随机选出的以太坊合约,并且这里面包含了一个很巧妙的做法去抵抗ASIC:如果ASIC被开发出来了,那么竞争矿工就会有动机去创建并发布该ASIC不擅长执行的合约。没有一种ASIC能够用于通用计算,因为它仅仅是一个CPU。因此,我们可以利用这类对抗激励机制来实现本质上在执行通用计算的工作量证明。

由于一个简单的原因,这个想法后来破碎了。这个原因是长程攻击。攻击者可以从区块 1 开始构建一条链,并且只用简单的合约对这条链进行填充。需要注意的是,攻击者可以为这种简单的合约设计出专门的硬件,从而使攻击链迅速赶超主链。所以......又回到了原点。

下一个算法被称为“随机电路”,具体的描述可以查看其Google文件。这个算法是我和弗拉德·赞菲尔 (Vlad Zamfir) 提出的,并由马修·万普勒·多蒂 (Matthew Wampler-Doty) 和其他人进行分析。这个算法的思路是通过执行伪随机生成电路来模拟挖矿算法中的通用计算。这一次,没有任何确凿的证据表明基于这些原则的东西是行不通的。但我们在2014年接触的计算机硬件专家都对此表示非常悲观。马修·万普勒·多蒂提出了一种基于SAT解决方案的工作量证明,但最终也被拒绝了。

最后,兜兜转转,我们还是提出了Dagger Hashimoto算法,有时简称为Dashimoto。这种算法借鉴了Hashimoto的很多想法。Hashimoto是萨帝厄斯·追亚 (Thaddeus Dryja) 提出的工作量证明机制,它开创了“I/O约束工作量证明”概念。在该机制中,挖矿速度的主要限制因素不是每秒钟哈希运算的速度,而是RAM每秒可访问的兆字节数。然而,Dagger Hashimoto将这种工作量证明机制与匕首算法中对轻客户端友好的DAG所生成的数据集结合了起来。经过我、马修、蒂姆和其他人多次调整以后,这些想法终于融入了我们现在称为“Ethash”的算法中。

到2014年夏天,除了工作量证明大概需要到2015年初才能到达Ethash阶段,这个协议已经相当稳定,并且其半正式规范已经以加文的黄皮书形式面世了。

2014年8月,我开发并引入了叔区块机制。该机制可以使以太坊的区块链具备更短的区块时间以及更高的处理能力,同时减少了中心化的风险。关于叔区块机制的介绍,可以参见PoC6。

在与比特股团队讨论之后,我们考虑使用堆作为头等数据结构——尽管最后由于时间不够没有这样做,并且后来的安全审计和DoS攻击让我们明白:在当时安全地实现这一功能远比想象中更难。

9月,我和加文计划对协议设计进行两处重大的变更。首先,除了状态树和交易树,每一个区块还将包含一颗收据树。收据树将包含由每一笔交易创建的日志的哈希以及中间的状态根。日志将会允许交易创建可以保存在区块链中的输出,并且可被轻客户端访问。然而,未来的状态计算无法访问这些日志。这种方法使得去中心化应用能够很容易地查询时间,如代币转账、购买、正在被创建和被撮合的交易所订单,以及正在进行的拍卖等。

我们还考虑了其他想法,如把默克尔树从一笔交易的完整执行轨迹中抽取出来,以允许任意内容得到证明。在对简单性和完整性进行折中以后,我们选择了使用日志。

其次就是预编译的想法。预编译解决了允许复杂的加密计算在EVM中可用而不必处理EVM开销的问题。我们还提出过许多关于本地合约的雄心勃勃的想法。在这些想法中,如果矿工拥有关于某些合于的更优的实施方法,那么他们就会投票下调这些合约的燃料价格。如此一来,那些大多数矿工都能快速执行的合约自然就拥有更低的燃料价格了。然而,所有这些想法都被拒绝了,因为我们无法提出一种在加密经济学角度足够安全的方式来实现它。攻击者总是可以创建一些合约来执行带有活动门的加密操作,然后将活动门分发给自己和他们的朋友,从而能够更快地执行这个合约。随后,攻击者投票下调燃料价格并利用这一点对网络进行DoS攻击。相反,我们选择了一个不那么雄心勃勃的方法,即在协议中简单地指定较小的预编译数量,用于哈希和签名方案等常用操作。

加文也是最初支持开发协议抽象这一想法的关键人物。所谓协议抽象,就是将协议的众多部分,如以太币余额、交易签名算法、随机数等,作为合约迁移到协议本身中。其理论上的最终目标是要达到整个以太坊协议能够被描述为将函数调用加入到具有特定预初始化状态的虚拟机中的目标。我们没有足够的时间把这些想法都加入到最初的前沿版本中,不过预计这些原则将通过“君士坦丁堡”的一些变化、Casper合约和分片规范慢慢开始被整合。

这些内容都在PoC 7 中实现了。在 PoC 7 之后,该协议并没有真正发生太大的变化,除了一些轻微但在某些情况下十分重要的变动。这些细节将会在通过安全审计后公布。

到2015年初,尤塔·斯坦纳 (Jutta Steiner) 和其他人组织了发布前的安全审计,包括软件代码审计和学术审计。软件代码审计主要是在分别由加文和杰夫瑞主导的C++和Go语言实现上。尽管我的Pyethereum实现也进行了一次简单的审计。在这两次学术审计中,一次由尤塔·埃雅尔 (Ittay Eyal) (因提出“自私挖矿”而成名) 负责进行的,另一次由安德鲁·米勒和Least Authority的其他成员进行。埃雅尔的审计导致了一个轻微的协议变更,即链的总难度值不会包含叔区块。由Least Authority负责的审计更侧重于智能合约、燃料经济学以及帕特里夏树。这次审计也导致了几处的协议变更。其中,比较小的一处变更是使用sha3(addr) 和 sha3(key) 作为树的键值,而不是直接使用地址和键值。这将使得攻击者更难对树发起最坏攻击。

我们讨论的另一个重要的问题是燃料限制投票机制。那时候,我们已经对关于比特币区块大小的争论缺乏进展感到担忧,并希望在以太坊中拥有一个灵活的设计:该设计能够根据需要随时间调整。但面临的挑战是,最佳的限制是什么?我最初的想法是制定一个动态的限制,该限制是实际燃料使用量的长期指数移动平均值的1.5倍。因此,从长远来看,平均区块都会被占用2/3的容量。然而,安德鲁证明了这种限制在某些方面是可以被利用的——具体来说就是,想要提高限制的矿工仅需要把消耗大量燃料却只花费很少处理时间的交易都包含在他们自己的区块中,从而创建出满载区块且不会亏损成本。因此,至少从最终的结果来看,这个机制的安全模型相当于只是让矿工对燃料限制进行投票。

我们没能提出一个更好的燃料限制策略,安德鲁推荐的方案是让矿工明确地对燃料限制进行投票,而且默认的投票策略是1.5倍的EMA。其原因在于,我们还没有想出设置最大燃料限制的正确方法,并且任何具体方法失败的风险都似乎远远高于矿工滥用投票权的风险。因此,不妨简单地让矿工对燃料限制进行投票,并接受燃料限制过高或过低的风险,从而换取灵活性以及矿工联合起来根据需要快速调整燃料限制高低的好处。

在我和加文、杰夫进行了一场迷你黑客松之后,PoC 9终于在3月份推出了。其旨在成为概念证明的最终版本。我们将一个叫作“奥林匹克”的测试网运行了4个月。该测试网用的是将要用在主网中的协议。与此同时,我们还建立了以太坊的长期计划。维纳·古普塔 (Vinay Gupta) 写了一篇文章——《以太坊的发布过程》。这篇文章描述了以太坊主网开发的4个阶段,并相应给出了如今大家耳熟能详的名字:“前沿”、“家园”、“大都会”和“宁静”。

“奥林匹克”测试网运行了4个月。前2个月,我们在各种实施版本中发现了很多漏洞,也发生了共识失败等其他问题。不过在6月前后,网络已经显著稳定下来了。到了7月,我们决定冻结代码;7月30日以太坊主网正式发布。

来自以太坊基金会的庆生

以太坊5岁啦!🎂

5年前的今天,以太坊创世区块的诞生标志着以太坊网络的正式推出。

今天,社区的大多数成员都在思考以太坊接下来要完成的所有工作,但同样重要的是,值此5周年之际,我们也需要意识到以太坊如何令人难以置信地带领我们走了这么远的路途,每个迂回曲折曾是怎样的披荆斩棘,以及我们所有人 (和技术) 又是实现了多大的成长。

曾经,一些人希望协议能够按照预期运行,希望构建人员尝试推出第一批应用程序,且用户会去尝试使用这些应用程序,或者希望某一天有人可能会使用以太坊来创造真正的和积极的影响。

因此,尽管我们的焦点仍将集中在剩余的工作上,但5年前很难想象会有如此多的思想家、实干家、学生、政府、企业和其他创新者今天都在使用以太坊做出真实而有影响力的改变。同样,曾未预料到的所有颠簸、分叉,诸多难以置信的聚会/活动、迷因,以及一场场富有激情的辩论也是如此。如果没有这些“未预料到”的时刻,以太坊社区不可能会实现今天这样的发展😉。

以太坊生态系统早期的每个人都曾等待着第一批合约的上线,而今天我们已经拥有数百万份合约!我们也早已不再追踪有多少应用程序被部署,即使是最忠实的追随者也很难跟踪协议层面的诸多创新。

在这5年时间里,以太坊已经发展为超越了任何建造者、团队或组织的范畴,但希望你一如既往地思如泉涌,继续携手致力于让以太坊实现我们所有人梦寐以求的一切,甚至更多。🦄

––以太坊基金会团队

2020年,是以太坊诞生的第5年,以太坊早已从一个极客社区,成长为真正的「公链之王」。在这一背景下,「2020以太坊技术及应用大会•中国」将再度起航!

以太坊创始人Vitalik Buterin(V神)将继续携众多以太坊核心开发者与大家见面,为开发者带来关于以太坊2.0、以太坊技术解析、挖矿、De-Fi、行业应用、安全等众多热门话题。

在以太坊读懂区块链,在这里读懂以太坊!长按海报二维码,入群获取报名链接及 PPT,或点击原文链接了解更多活动详情!

更多阅读推荐

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 区块链大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
使用VBA复制、插入、移动、删除和控制图片3
Z-顺序位置不能直接设置。首先,将图片发送到后台,然后通过循环向前移动图片。继续循环,直到图片达到正确的Z顺序位置。
fanjy
2023/08/29
1.3K0
使用VBA复制、插入、移动、删除和控制图片3
使用VBA复制、插入、移动、删除和控制图片2
图片能够被链接到单元格或者命名区域,这样可以使图片是动态的,当单元格中的内容变化时图片也随之变化。
fanjy
2023/08/29
3950
使用VBA复制、插入、移动、删除和控制图片2
VBA技术:你需要知道的一些VBA操作形状的代码
在Excel中,可以通过功能区“插入”选项卡“插图”组中的“形状”库按钮在工作表中插入形状。可以使用形状来可视化数据、在形状中添加文本、作为执行宏代码的按钮,等等。
fanjy
2023/02/24
5K0
VBA技术:你需要知道的一些VBA操作形状的代码
VBA实战技巧34:使用VBA组织图形1
引言:本文的代码整理自mrexcel.com,一个很好的令人兴奋的示例,有兴趣的朋友可以仔细研究。
fanjy
2021/09/22
1.7K0
VBA实战技巧03: 精确追踪工作表中我们关注的形状
有些Excel用户喜欢在工作表中绘制形状,以实现其目的。例如,如下图1所示,绘制一个矩形方框来强调这些单元格中的数据。
fanjy
2020/03/27
1K0
VBA实战技巧35:使用VBA组织图形2
引言:本文的代码与昨天发表的《VBA实战技巧34:使用VBA组织图形1》一样,都整理自mrexcel.com,一个很好的令人兴奋的示例,有兴趣的朋友可以仔细研究。
fanjy
2021/09/22
1.8K0
VBA专题01:操作形状的VBA代码
Excel提供了多种多样的形状类型,如下图1所示。本文主要讲述VBA操作形状的基础操作。
fanjy
2019/07/19
6K0
用 VBA 在 PPT 中批量插入图片
网上用 VBA 操作 EXCEL的 示例很多,但用 VBA 操作 PPT 的示例很少,而且通常有不少错误或者版本老旧的地方。
用户6021899
2023/08/09
1.3K1
用 VBA 在 PPT 中批量插入图片
ChatGPT与Excel结合_编写VBA宏
⭐Excel VBA宏(Visual Basic for Applications)是一种用于在Microsoft Excel中自动化和扩展功能的编程语言。VBA允许用户编写自定义的脚本或宏,以便通过执行一系列指令来自动完成特定任务。
天天Lotay
2023/10/15
9370
ChatGPT与Excel结合_编写VBA宏
VBA专题09:基本的Excel图表编程代码
图表是数据可视化的一种常用呈现方式,VBA代码可以帮助我们自动化创建图表及对图表进行相关的操作,特别是当工作表中有大量图表需要进行重复修改时,VBA十分有用。
fanjy
2020/02/18
5.2K0
VBA技巧:自动给每个工作表添加相同大小和位置的按钮并指定相同的宏
Q:我有一个工作簿,包含有多个工作表,我想在这些工作表的同一位置都添加一个按钮,并对这些按钮指定相同的宏过程,如何实现?
fanjy
2024/05/22
7230
VBA技巧:自动给每个工作表添加相同大小和位置的按钮并指定相同的宏
VBA应用示例:根据工作表中的信息制作带图像的人员卡片(扩展版)
在《VBA应用示例:根据工作表中的信息制作带图像的人员卡片》中,我们使用一些代码,根据工作表中人员的图像、姓名、年龄等信息,自动制作相应的人员卡片。
fanjy
2024/06/04
2080
VBA应用示例:根据工作表中的信息制作带图像的人员卡片(扩展版)
Excel实战技巧:基于单元格的值显示相应的图片
选择零件号,显示相应的零件图;选择员工姓名,显示该员工相片,等等,都是选择单元格中的值而显示相应的图片的例子,也就是说基于单元格的值查找并显示对应的图片,单元格的值改变,图片也自动改变。效果如下图1所示。
fanjy
2023/02/24
9.9K0
Excel实战技巧:基于单元格的值显示相应的图片
问与答118:如何使用VBA将多个工作表数据复制到PPT中?
遍历每个工作表,如果工作表的单元格S1中的值为“1”,则将该工作表的“Print_Area”(打印区域)复制并粘贴到一张空白幻灯片中。
fanjy
2021/05/07
5.6K1
使用VBA快速给所选择的多个单元格区域绘制矩形边框
首先,选取想要绘制边框的所有单元格区域,可以在选择单元格区域的同时按住Ctrl键,从而选取多个单元格区域。然后,运行下面的代码,VBA会自动给所选单元格区域的周边绘制红色的边框,效果如下图1所示。
fanjy
2023/08/30
8510
使用VBA快速给所选择的多个单元格区域绘制矩形边框
VBA实用小程序:将Excel中的内容输入到PowerPoint
在将Excel中的内容输入到Word中时,可以利用Word的书签功能,而将Excel中的内容输入到Powerpoint要困难得多,因为它没有书签,甚至不允许为幻灯片上的对象命名,那么,怎么办呢?可以在代码中对其进行寻址。
fanjy
2023/02/14
2K1
使用VBA自动化处理表的代码大全5
下面的代码检查是否表已经存在于工作簿。注意,可以根据实际情况修改tblName变量来满足你的需要。
fanjy
2023/08/30
4890
使用VBA自动化处理表的代码大全5
庆国庆VBA画一红旗
Sub 画国旗(L, T, W, H) 'Dim s1 As Shape Dim oWK As Worksheet Set oWK = Excel.ActiveSheet '插入一个半径为25Point的圆 s1_L = L + (W / 30) * 5 s1_T = T + (H / 20) * 5 Set s0 = oWK.Shapes.AddShape(msoShapeRectangle, L, T, W, H)
哆哆Excel
2022/10/25
1.7K0
庆国庆VBA画一红旗
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.3K0
PowerPoint VBA参考代码库2
fanjy
2023/08/30
5500
PowerPoint VBA参考代码库2
推荐阅读
相关推荐
使用VBA复制、插入、移动、删除和控制图片3
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档