文章目录

  • VBA基础
  • 一.了解VBA
    • 1.进入vba
    • 2.认识宏
  • 二. VBA编程
    • 1.hello world
    • 2.调出立即窗口和本地窗口
    • 3.debug显示
    • 4.注释
    • 5.数据类型
    • 5.变量的生命周期和定义域
    • 6.判断语句
    • 7.不等于<> , switch case 条件判断
    • 8.循环
      • do while
      • 退出循环的语句 exit for
      • 退出循环的语句 exit do
    • 9.数组
  • 10.二维数组
    • 11.操作单元格
  • 实战
  • 自定义vba脚本生成sql
    • 见证奇迹的时刻(如何使用脚本)

最近公司有个需求,提前让数据库表结构在excel模板中设计,然后再建对应的数据库DB。字段少好说,无脑录入即可,但是,我遇到个100多个字段的,实在忍不了,最终入门了VBA编程,自己写脚本生成了sql语句。减少了需要无用重复劳动。

VBA基础

首先学习下vba的基础。

一.了解VBA

1.进入vba

alt + f11

文件 - 选项 - 自定义功能区 - 勾选开发工具

2.认识宏

  • 录制宏

  • 使用相对应用录制宏

二. VBA编程

1.hello world

双击某个sheet页, 把鼠标放在 窗口里面,点击工具栏的插入,选择过程,随便起个过程名,比如 class就生成了代码:

Public Sub class()
End Sub

写个hello world程序:

Sub class()Dim namename = "Hello World"name = "胡老师好"MsgBox name
End Sub

2.调出立即窗口和本地窗口

在工具栏中选择 选择立即窗口,和本地窗口。

3.debug显示

Sub class()Dim namename = "Hello World"Debug.Print namename = "胡老师好"MsgBox nameDebug.Print name
End Sub

4.注释

注释有2种形式,一种是rem。一种是 ’ (单引号)

5.数据类型

variant 代表任意类型

single double decimal 代表 小数、

rem 代表注释关键字

Const 常量关键字


Sub class()Rem variant是任意类型Dim name As Variantname = "Hello World"Rem debugDebug.Print namename = "胡老师好"Debug.Print nameRem 定义常量Const num As Integer = 123Debug.Print numEnd Sub

5.变量的生命周期和定义域

  • 定义域: public 和 private
  • static 是静态变量
Sub class1()
Dim x As Integer
Rem static 是静态变量
Static y As Integer
x = x + 1
y = y + 1
Debug.Print "x=" & x
Debug.Print "y=" & y
End Sub

6.判断语句

Sub class3()
Dim number As Integer
number = 1
If number > 100 ThenDebug.Print "优秀"
ElseIf number > 95 ThenDebug.Print "良好"
ElseDebug.Print "一般"
End If
End Sub

7.不等于<> , switch case 条件判断

  • <> 不等于
Sub class3()
Dim number As String
number = "匹配"
If number > "匹配" ThenDebug.Print "优秀"
ElseIf number <> "匹配" ThenDebug.Print "良好"
End If
End Sub
  • switch case

Sub class4()Dim number As Stringnumber = "匹配"Select Case numberCase "匹配"Debug.Print "匹配"Case "不匹配"Debug.Print "不匹配"End SelectEnd Sub
  • boolean类型的使用
Sub class5()Dim count As IntegerDim if_f As Booleancount = 11if_f = (count = 10)MsgBox if_f
End Sub

8.循环

  • 最简单的循环
Sub class()
Rem 演示循环
Dim count As IntegerFor count = 1 To 10Debug.Print countNextDebug.Print "count 循环结束之后的值是 " & count
End Sub

  • 循环控制单元格属性

    Sub class()
    Rem 演示循环
    Dim count As IntegerFor count = 2 To 10If count Mod 2 = 0 ThenRem rang函数代表选中的某列单元格Rem Interior代表单元格内部的对象Range("T" & count).Interior.ColorIndex = 1ElseRange("T" & count).Interior.ColorIndex = 3End IfNextDebug.Print "count 循环结束之后的值是 " & count
    End Sub
    

  • 循环控制单元格求和

    Sub class()
    Rem 演示循环
    Dim COUNT As Integer
    Dim score As Double
    For COUNT = 2 To 20Rem cells的参数 第一个参数代表横行,第2个参数代表竖行Cells(COUNT, 8) = "=sum(rc[-1]:rc[-6])"
    Next
    End Sub
    

  • 循环单元格操作+if
Sub class()
Rem 演示循环
Dim COUNT As Integer
Dim score As Double
For COUNT = 2 To 20Rem cells的参数 第一个参数代表横行,第2个参数代表竖行Cells(COUNT, 8) = "=sum(rc[-1]:rc[-6])"score = Cells(COUNT, 8)If score > 700 ThenCells(COUNT, 9) = "秀儿"ElseIf score > 650 ThenCells(COUNT, 9) = "良好"ElseCells(COUNT, 9) = "小垃圾"End If
Next
End Sub

do while

Sub class()Rem do while 演示Dim count As Integercount = 20Do While count > 10Debug.Print countcount = count - 1Debug.Print countLoopRem do .. loop 条件 不演示了Do        Loop While count > 10End Sub

退出循环的语句 exit for

使用for循环的时候退出用 exit for

Sub class1()Dim count As IntegerFor count = 1 To 10If count = 5 ThenDebug.Print "count 退出循环的值是: " & countExit ForEnd IfDebug.Print countNext
End Sub

退出循环的语句 exit do

使用fo while循环的时候退出用 exit do

Sub class1()Dim count As IntegerDo While Truecount = count + 1If count > 5 ThenDebug.Print "此时退出循环的值是: " & countExit DoEnd IfLoop
End Sub

9.数组

Sub class()Dim arr(2) As VariantDim i As Integerarr(0) = "小明"arr(1) = 2arr(2) = TrueFor i = 0 To 2Debug.Print arr(i)Next
End Sub

  • 下标越界

    Sub class()' Const i As Integer = 10' Dim arr(i) As VariantRem  可以指明数组的范围奥 起始开始限制了也是下标越界Dim arr(2 To 5) As Variantarr(1) = 1Debug.Print arr(1)End Sub
    

10.二维数组

Sub class()Dim arr(2 To 5, 3 To 6) As Variantarr(2, 3) = 1Debug.Print arr(2, 3)
End Sub

  • 遍历循环

    Sub class()Dim arr(2 To 5, 3 To 6) As Variantarr(2, 3) = 1'Debug.Print arr(2, 3)For x = 2 To 5For y = 3 To 6Debug.Print arr(2, 3)NextNextEnd Sub
    

11.操作单元格

2中方式,一种是range,一种是cells

range

cells

实战

现在掌握了上面的基础知识,基本上可以满足我们最开始的需求
解决思路: 循环方式获取单元格中的内容,拼接成 sql 的创建脚本语句即可

自定义vba脚本生成sql

  • 原来的excel模板内容:
  • 目标:输出sql创建表的语句:

    具体实现的脚本:
Public Sub class()Rem 声明字段row的开始行号Const startRow As Integer = 13Rem 声明字段row的结束行号Const endRow As Integer = 28Rem 声明表名Dim tableName  As StringtableName = Range("E" & 6)Rem 声明主键Dim primaryKey  As StringprimaryKey = Range("F" & 13)Rem 声明表名注释Dim tableComment As StringtableComment = Range("E" & 7)Rem 声明字段名对应列 英文序号Dim filedMetaNo As StringfiledMetaNo = "F"Rem 声明字段注释对应对应列 英文序号Dim commentMetaNo As StringcommentMetaNo = "C"Rem 声明字段备注 对应列的 英文序号Dim comment2MetaNo As Stringcomment2MetaNo = "U"Rem 声明类型 对应列的 英文序号Dim typeMetaNo As StringtypeMetaNo = "G"Rem 声明字长 对应的列的英文序号Dim lengthMetaNo As StringlengthMetaNo = "H"Rem 最终要拼接的sqlDim sqlStr As StringsqlStr = "CREATE TABLE " & Range("E" & 6) & Chr(13)sqlStr = sqlStr & "(" & Chr(13)For count = startRow To endRowRem 拼接 字段名sqlStr = sqlStr & Replace(Range(filedMetaNo & count).Text, " ", "")Rem 拼接  字段类型(字段长度)sqlStr = sqlStr & "   " & Range(typeMetaNo & count)If IsEmpty(Range(lengthMetaNo & count)) = False ThensqlStr = sqlStr & "(" & Range(lengthMetaNo & count) & ")  "End IfRem 如果是主键,设置NOT NULL COMMENTIf primaryKey = Range(filedMetaNo & count) ThensqlStr = sqlStr & " NOT NULL COMMENT "ElseRem 拼接  DEFAULT NULL COMMENT  '字段名称注释(字段备注)'sqlStr = sqlStr & " DEFAULT NULL COMMENT "End IfsqlStr = sqlStr & "'" & Range(commentMetaNo & count)If IsEmpty(Range(comment2MetaNo & count)) = False ThensqlStr = sqlStr & "(" & Range(comment2MetaNo & count) & ")"End IfsqlStr = sqlStr & "'"sqlStr = sqlStr & "," & Chr(13)NextsqlStr = sqlStr & "PRIMARY KEY (" & primaryKey & ")" & Chr(13)sqlStr = sqlStr & ")ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='" & tableComment & "'" & Chr(13)Debug.Print sqlStrEnd Sub

显示结果:

在navicat中运行

显示已经把mysql数据库的表结构导入数据库了。

见证奇迹的时刻(如何使用脚本)

脚本只需要改一个地方:

对应这里的行号:

即可。

以上即是用脚本生成的4张表效果图。


个人微信公众号:
搜索: 怒放de每一天
不定时推送相关文章,期待和大家一起成长!!


excel VBA编程入门,自定义excel数据库模板生成sql语句相关推荐

  1. 编程隐藏child指定列_简单的Excel VBA编程问题解答——完美Excel第183周小结

    学习Excel技术,关注微信公众号: excelperfect 下面是2020年11月12日发布的一些简单的ExcelVBA问题的答案,是不是和你想的一样. 1.表达式11mod 3的计算结果是什么? ...

  2. 数据库如何生成sql语句

    以SQL SERVER 2008为例子. 1.启动客户端管理器,连接到要生成脚本的数据库. 2.在左边的"对象资源管理器"中,右键选择该数据库打开菜单.选择"任务&quo ...

  3. Excel VBA编程常用语句300句

    Excel VBA编程常用语句300句 ************** * VBA 语句集 * * (第 1 辑) * ************** **************** * 定制模块行为 ...

  4. Excel VBA 编程的常用代码

    强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中. 声明常数 用来代替文字值. Const ' 常数的默认状态就是 Private. Const My = 456 ...

  5. Excel VBA 实现Ribbon自定义功能区

    Excel VBA 实现Ribbon自定义功能区 2022.12.3修改 目录 自定义功能区的实现 1.编写执行代码生成.xlam文件,拷贝到%APPDATA%\Microsoft\AddIns\ 2 ...

  6. 小福利,用Excel VBA编程制作一个变色小游戏

    小福利,用Excel VBA编程制作一个变色小游戏 设计思想:在正方形的四条边上都是设置循环函数,不断改变颜色和单元格里面的数值. Option ExplicitSub 按钮1_Click() Dim ...

  7. 视频教程-EXCEL VBA编程(excel办公高手必经之路)-Office/WPS

    EXCEL VBA编程(excel办公高手必经之路) Office培训讲师,51CTO金牌讲师,从2005开始从事Office培训至今.擅长Excel.Word.PowerPoint等软件的应用,著有 ...

  8. 陈表达VBA笔记-Excel VBA 编程-在表格做自动筛选的功能

    Excel VBA 编程,在表格做自动筛选的功能 下面的例子是自动筛选85列的内容,筛选内容为处方 Private Sub CommandButton11_Click()     '筛选处方     ...

  9. tp5循环查询语句_如何用Excel快速生成SQL语句,用过的人都说好

    Excel的公式自动生成想必大家都知道了,就是写好一个公式后直接往下拖,就可以将后面数据的公式自动生成. 今天我们就用这个功能来快速生成SQL语句. 导入Excel数据 Excel的数据有多种方式,这 ...

  10. 如何用Excel快速生成SQL语句,用过的人都说好

    导读:Excel的公式自动生成想必大家都知道了,就是写好一个公式后直接往下拖,就可以将后面数据的公式自动生成. 今天我们就用这个功能来快速生成SQL语句. 作者:丶平凡世界 来源:SQL数据库开发(I ...

最新文章

  1. eclipse 的快捷键
  2. 派生类的赋值运算符重载【C++继承】
  3. ​【Python基础】告别枯燥,60 秒学会一个 Python 小例子(文末下载)
  4. 学习总结:机器学习(六)
  5. openstack 之 控制节点物理机备份
  6. 【算法分析与设计】汉诺塔问题
  7. Fedora16 下更改多系统、多内核的默认启动项
  8. python 僵尸进程孤儿进程
  9. Spring RedisTemplate 批量获取值的2种方式
  10. 当Java遇上机密计算
  11. 开源项目-绩效管理系统
  12. ChemDraw怎么激活?ChemDraw激活教程
  13. 验证集到底有什么作用
  14. 使用css将彩色图片转换为黑白图片
  15. 选定进行压缩的卷可能已损坏,请使用Chkdsk修复
  16. java四则运算思路_java四则运算
  17. 美团大规模微服务通信框架及治理体系OCTO核心组件开源
  18. 1135 mysql_mysql中一个普通ERROR 1135 (HY000)错误引发的血案
  19. JavaWeb开发分享:WRO
  20. 论文阅读笔记:Towards Fine-Grained Reasoning for Fake News Detection

热门文章

  1. 【JY】力荐佳作《结构地震分析编程与应用》
  2. 关于AVOD, 你需要知道的事
  3. 简述多媒体计算机的特点,多媒体技术的主要特点
  4. php批量修改怎么实现,PinPHP购物分享系统2.2后台批量采集修改实现方法
  5. Linux 字符设备驱动及一些简单的Linux知识
  6. 2019java后端面试集合篇最值得收藏的(一)
  7. 现金支票打印模板excel_施工表格填写不规范?500套最全施工资料表格模板,可直接套用|面层|分项...
  8. 计算机控制技术微课,课程名称:微型计算机控制技术课程
  9. Norton企业版防毒服务器
  10. m6000查看端口状态_M6000常用维护命令