
简介Visual Basic 3.0 英文版完整开发环境资源包面向想了解微软早期 RAD 编程工具、经典 Windows 桌面应用开发以及 VB 语言演进历史的学习者与开发者。包内汇集 VB3.0 主程序、示例工程、数据库管理演示、源码文本、窗体定义、图像素材和帮助文档等借助事件驱动编程、拖放式界面设计、ActiveX 控件与 ODBC 数据库集成等特性可完整经历从创建界面、编写逻辑到调试运行的开发流程是体验 VB3.0 开发方式的直观样本。资源共 1146 个文件压缩包仅 7.71MB文件类型以窗体工程和图形资源为主线包括 109 个 .frm 窗体、36 个 .mak 工程、16 个 .exe 示例、452 个 .ico 图标、249 个 .bmp 位图、13 个 .hlp 帮助文件以及 .bas 代码、.frx 二进制资源等这些不同格式共同体现了 20 世纪 90 年代 Windows 程序中界面、代码与资源分离的组织方式便于按界面、代码、资源和文档分模块研读。已有 429 人学习下载适合希望快速上手 VB3.0、理解早期 Windows 编程思想并获得经典工程结构参考的入门到进阶读者。 看到“真正visual basic 3.0 (VB3.0 English)”这个标题还能点进来的我猜你多半是这两类人中的一类一类是骨灰级老玩家想找回九十年代初在Windows 3.1上拖控件写程序的快感另一类正在Excel里被VBA报错折腾得焦头烂额一路搜索“visual basic for applications 编译错误变量未定义”之类的关键词结果搜着搜着就撞见了这个比VBA老祖宗还老的Visual Basic 3.0。不管你是哪一类这期内容都值得看完。我会把这几个看起来不相干实际上纠缠很深的东西全部串起来讲VB3.0到底是个什么来头、它为什么值得被单独拎出来提一嘴、它和Excel 2010里的VBA是什么亲戚关系、以及那些在网上高频出现的“变量未定义”“For r To s”到底踩了什么坑。最后还会给一套我在虚拟机里跑真正的VB3.0英文原版的实操流程想怀旧或者做老项目考古的朋友可以直接照着抄。1. 先搞清楚VB3.0到底是哪一年的东西1.1 九十年代初的“拖控件写Windows程序”Visual Basic 3.0诞生于1993年是微软在Windows 3.1时代推出的第三代BASIC开发工具。那个年代你想在Windows上写个带窗口、带按钮、带输入框的程序通常得抱着C语言和Windows SDK啃上几个月还要自己处理消息循环、窗口类注册这些劝退无数人的底层细节。VB3.0干了一件非常“不讲武德”的事把窗口和按钮变成了能直接用鼠标拖到窗体上的控件双击控件就能写代码一运行就是原汁原味的Windows程序。从版本命名就能看出来这是微软在Visual Basic这条产品线上第一次真正“成熟”的版本。VB1.0和2.0多少还带点实验性质到了VB3.0才把标准版、专业版的体系建立起来而且全面转向16位Windows环境运行库也固定成了后来老程序员都很熟的VBRUN300.DLL。很多老项目、老教程里说的“VB3开发数据库前端”用的就是这一代。专业版里带了一堆VBX控件还能通过ODBC连Access、FoxPro这些数据库这在当时已经是非常“现代化”的桌面开发体验了。这里插一个技术细节VB3.0生成的EXE不是完全独立运行的程序运行时必须带上VBRUN300.DLL这个运行库效果很像今天很多人见过的“缺少DLL无法运行”的经典场景。所以在那个年代发布一个用VB3.0写的程序通常要把运行库一起带上或者写个安装脚本帮你拷到Windows\System目录。这点和现代程序动不动打包一个几百MB运行时是一个道理只是当年这个库只有几百KB。1.2 为什么要强调“English原版”和“真正”标题里这两个词特别有意思。先说“真正”——现在网上打着“VB3.0”旗号的东西不少是拿VB4、VB5改名骗下载量的甚至还有挂羊头卖狗肉的压缩包病毒。真正的VB3.0英文原版安装程序是SETUP.EXE安装到最后会在Windows\System里释放VBRUN300.DLL软件本身只有十几张1.44MB软盘的大小标准版六张左右专业版十几张。你要是下载到一个几十MB甚至几百MB所谓“VB3.0”那基本可以断定不是原版。再说“English原版”。那个年代的软件国际化没有现在这么成熟VB3.0确实有日文版等本地化版本但流传最广、资料最全、兼容性最好的还是英文版。我自己在虚拟机里装过几次英文原版无论是安装过程还是IDE界面都比某些汉化版本要干净得多。而且VB3.0这种老软件用的是16位安装程序这在现代的64位Windows上直接没法跑稍后我会专门讲虚拟机的方案。提示如果你只是想在Excel里把宏写明白根本不需要回头装VB3.0。但如果你想研究Windows桌面开发的历史或者需要维护一个上世纪的老系统VB3.0是你绕不开的一站。2. VB3.0、VBA、VB6三个容易被绕晕的名字2.1 Excel 2010里那个VBA和VB3.0是什么关系很多搜“excel2010”、“microsoft visual basic for applications报错”搜到这里的朋友其实想问的是我在Excel里写的宏和那种可以独立生成EXE的VB到底是什么关系一句话版VBA是VB的嵌入式亲儿子语法高度相似但VBA不能独立运行必须寄生在Excel、Word这些宿主程序里。Excel 2010里那个VBA的版本从血缘上讲对应的应该是VB6时代的产物。VB3.0是1993年的东西VB4是1995年VB5是1997年VB6是1998年Office 97开始内置VBAExcel 2010里的VBA已经是VB6/VBA 7.0这条线了。也就是说大家平时在Excel里写的代码年龄上都比VB3.0晚了好几年语法上更接近VB6。这里做一个对比表方便大家定位对比项VB3.0VB6Excel 2010 VBA发布年代1993年1998年2010年内置VBA 7.0独立生成EXE可以可以不可以运行环境16位Windows 3.1/9532位Windows 9x/NT/XP宿主是Excel进程类模块不支持支持支持智能提示几乎没有有基础提示比较完善运行库VBRUN300.DLLMSVBVM60.DLL无独立运行库所以你要是因为Excel里的VBA报错搜到了VB3.0方向其实带点偏。但也没完全偏——因为VBA的语法基础包括For循环、If判断、变量声明、MsgBox弹窗这些在VB3.0时代就已经定型了。理解了VB3.0你再看VBA会顺眼很多。2.2 从VB3.0到VB6语法很像心态完全不同用VB3.0写代码和用VB6写代码表面上看都是那个熟悉的IDE左边是工具箱中间是窗体设计器右边是属性窗口。但真正上手会明显感觉到代差。VB3.0没有代码自动补全没有成员列表你打一个点的后面不会弹出属性方法列表所有东西全凭脑子记。变量忘记声明也不会有人提醒你因为那个年代默认Option Explicit是关着的随便写个变量名就能用写错了也只是把它当新变量处理程序跑出来结果不对排查起来相当痛苦。这个“变量不声明也能用”的设定恰恰是很多Excel VBA新手遇到的“编译错误变量未定义”的反向根源。等到了VB6和VBA时代微软开始强调显式声明工具→选项里有了“要求变量声明”这个开关一旦打开每个变量都得先Dim一把否则直接给你编译错误。这个体验对从VB3.0时代过来的人来说刚开始甚至会觉得多余后来才会明白这是多少前辈用血泪踩出来的教训。3. 在虚拟机里跑起一套真正的VB3.0环境3.1 为什么不建议在现代系统直接安装VB3.0是16位程序安装程序SETUP.EXE和IDE本身都是16位PE格式这在现代的64位Windows上基本没有直接运行的可能。更麻烦的是它的运行库VBRUN300.DLL也是16位DLL就算强行把它放到System32目录里64位进程也加载不了16位库。想在今天重新体验VB3.0最稳妥的办法是用虚拟机装一个Windows 3.1或Windows 95然后在里面安装VB3.0。我在VirtualBox里实测过装Windows 3.1然后在里面跑VB3.0整个流程非常顺。虚拟机的好处是隔离干净老系统随便折腾崩了也不影响宿主机。你现在看到网上大多数VB3.0的演示截图基本都是这么跑出来的。老系统的安装过程不展开细讲了重点是装完系统后怎么装VB3.0。准备阶段你只需要勾选好软驱、设置好内存Windows 3.1给8MB到16MB就够用把系统盘引导起来装好鼠标驱动和显卡驱动就能进Program Manager了。3.2 安装流程与第一个Windows程序的体验进入Windows 3.1后把VB3.0的第一张安装盘放进虚拟机软驱然后在Program Manager的“文件→运行”输入框里敲A:\SETUP.EXE回车安装程序就会启动。整个过程就是一路Next中途会让你填用户名和公司随便填一个就行然后选择安装目录默认是C:\VB不建议改这个目录名短后面省事。安装完成后Program Manager里会出现一个“Visual Basic 3.0”程序组里面有一个VB的图标双击就能进IDE。下面我以实际使用顺序走一遍新建项目File→New Project默认会有一个Form1窗体。左侧工具箱里找到CommandButton按钮图标在窗体上用鼠标拖一个按钮出来。VB3.0的按钮拖出来默认叫Command1。双击这个按钮IDE会自动打开代码窗口并且已经把事件过程的骨架给你生成好了Private Sub Command1_Click() End Sub在两行之间写一行代码MsgBox Hello, VB3.0!按F5运行。窗口弹出来用鼠标点一下那个按钮就会弹出一个消息框内容就是那句问候。就这一套流程放在今天可能让人觉得“就这”但在1993年这已经是从“买一本书啃三个月”到“二十分钟跑通第一个图形界面程序”的跨越。整个IDE的反应速度非常快点一下按钮就出窗口完全没有现代大型IDE的启动加载焦虑。这里有一个小白容易忽略的点VB3.0的IDE没有代码自动缩进没有括号匹配高亮你写了If就必须自己记得写End If写了For就必须自己写Next。写错了一个单词运行时不一定会立刻报错可能等程序跑到那块逻辑才炸。所以那年代写代码特别强调心细。注意在虚拟机里使用老软件鼠标和键盘要先点击虚拟机窗口获取焦点否则你的操作会落到宿主机桌面上。第一次用VB3.0的时候我因为没切焦点代码打在记事本里浪费了半天时间。4. 顺着热搜词VBA“变量未定义”和For循环到底怎么治4.1 “编译错误变量未定义”的常见原因在Excel 2010里按下AltF11打开VBA编辑器然后写了这样一段代码Sub Test() For i 1 To 10 MsgBox i Next i End Sub一按F5VBA编辑器提示“编译错误变量未定义”并且把代码里的变量名i高亮选中。很多人第一反应是这代码这么简单怎么会报错实际上这个报错的原因通常只有一个模块顶部有Option Explicit语句或者VBA编辑器里勾选了“要求变量声明”选项。只要存在这个条件所有变量都必须先用Dim声明否则编译直接不通过。这里的i是临时用的循环变量完全没有声明所以报错。解决办法很简单把代码改成Sub Test() Dim i As Long For i 1 To 10 MsgBox i Next i End Sub这样一个Dim就把问题解决了。顺便说明一下为什么推荐用Long而不是Integer。Integer在16位时代和VB3.0里是2字节范围-32768到32767在循环量不大的时候够用。但到了32位系统Long是4字节范围大得多而且在现代Excel VBA里运行速度上Long往往还更快因为没有整数溢出转换的额外开销。这个知识点同样适用于VBA里所有数组下标的声明直接Long就好了。如果你不想每次新建模块都手动加Dim可以在VBA编辑器里点“工具→选项→编辑器”把“要求变量声明”勾选上。这样以后每次新建模块都会自动在顶部生成Option Explicit帮你把变量声明这件事堵死等于从源头杜绝“变量未定义”这类报错。虽然刚开始会觉得麻烦但对项目维护是长期收益。4.2 For r To s这种循环写法错在哪另外一个高频搜索词“visual basic 函数for r to s”我盲猜很多人想问的是For循环参数里那两个变量怎么定义、怎么赋值。比如有朋友写了Sub TestLoop() For r 1 To s Debug.Print r Next r End Sub如果此时报“变量未定义”那问题跟前面一样需要先声明r和sSub TestLoop() Dim r As Long Dim s As Long s 5 For r 1 To s Debug.Print r Next r End Sub除了变量定义For r To s这种写法本身还要注意三件事。第一s必须有值如果s没有赋值默认等于0循环一次都不会执行。第二如果循环变量r在循环体里被重新赋值循环次数会变得非常诡异这在VBA和老版本VB里都不会报错属于典型的逻辑bug。第三如果要倒着循环比如从10到1必须要写Step -1不写的话默认Step 1循环直接不执行。写一个更贴近实际Excel操作的例子把数字填到表格里Sub FillNumbers() Dim r As Long For r 1 To 10 ThisWorkbook.Worksheets(Sheet1).Cells(r, 1).Value r Next r End Sub这段代码会把A1到A10依次填上1到10。这个示例在Excel 2010里可以直接跑和VB3.0时代的For循环写法可以说是一模一样。从这里你就能看出来VB3.0虽然UI老旧但底层的语言基础放到今天照样是活着的遗产。4.3 从VB3.0时代带出来的好习惯和坏习惯在QBASIC和VB3.0的年代变量不声明就用几乎是所有人的习惯。因为VB3.0的IDE默认没有强制声明选项很多老程序员写出来的代码变量满天飞一个变量名拼错程序不会报错只会把错误值到处传最后结果和预期对不上调试起来非常崩溃。从我的个人经验出发现代写VBA甚至写Python都应该反向学习这个教训任何变量用到之前先想清楚它是什么类型、什么时候初始化、生命周期到哪结束。在VBA里就一句话模块顶部写Option Explicit所有变量全部Dim。你只要坚持这个习惯至少能消灭一半的“玄学报错”。这里也给一个荷兰式命名法的小参考从VB3.0时代一直沿用到VBA按钮cmd开头比如cmdOK、cmdCancel文本框txt开头比如txtName标签lbl开头比如lblTitle模块mod开头比如modDatabase这套命名不是微软官方强制的但好处是看代码一眼就能知道控件类型老项目里非常常见。如果你想维护老代码看到cmd、txt、lbl这些前缀心里要有数千万别给它们改名——老代码里很多地方是靠控件名字引用控件的一改全崩。5. 写在最后这些老古董还值得折腾吗我在虚拟机里重新把VB3.0跑起来的时候最直观的感受不是“哇好厉害”而是“哇好不方便”。没有智能提示、没有调试断点可视化、没有变量监视窗口代码写错了只能靠眼睛一行行扫。但恰恰是这种不方便让你更能理解现代开发工具的可贵明白为什么今天我们要坚持变量声明、坚持代码规范、坚持单元测试。如果你是被Excel VBA报错搜到这里来的我的建议很明确不要再往VB3.0这个方向深挖了回到Excel 2010的VBA编辑器里去先打开“要求变量声明”然后把自己所有的变量写清楚那些“编译错误变量未定义”基本就能好一大半。For r To s这类循环问题无非就是变量没声明、变量没赋值、Step方向不对这三板斧对着检查就行了。如果你是想考古、研究编程历史或者像我一样单纯怀旧那VB3.0值得你装一次虚拟机好好玩一玩。从VB3.0到Excel里的VBA表面上是两套东西骨子里其实是同一套Basic语言的不断演化。当年那些在386机器上拖控件的人和现在在Excel里写宏处理报表的人用的语法其实一直没变过。最后再分享一个我踩过的小坑VB3.0在Windows 3.1虚拟机里写代码时如果代码窗口里出现了中文注释在某些显卡驱动下会显示成乱码。所以建议你在虚拟机里就用英文写注释或者干脆不写。老系统就是老系统别用现代字符集的标准去要求它能跑起来就是胜利。本文还有配套的精品资源点击获取