代码功能概述

这段VBA代码旨在通过读取Excel文件中的数据,在当前活动模型(ActiveModel)中创建相应的数据库表结构。它首先检查是否有活动模型以及Excel是否安装,然后遍历Excel工作表中的数据行,根据特定列的值来创建表和列,并为其赋予相应的属性。

代码详细解析

  1. 初始化与检查
Option Explicit
Dim mdl ' the current model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
    MsgBox "There is no Active Model"
End If

Dim HaveExcel
Dim RQ
RQ = vbYes 'MsgBox("Is Excel Installed on your machine?", vbYesNo + vbInformation, "Confirmation")
If RQ = vbYes Then
    HaveExcel = True
    ' Open & Create Excel Document
    Dim x1
    Set x1 = CreateObject("Excel.Application")
    x1.Workbooks.Open "xxxxxx.xlsx"
    x1.Workbooks(1).Worksheets("Sheet1").Activate
Else
    HaveExcel = False
End If
  • Option Explicit:强制显式声明所有变量,提高代码的可读性和可维护性。
  • 声明并尝试获取当前活动模型mdl,若模型不存在则弹出提示框。
  • 通过设置RQ = vbYes假设Excel已安装(原本代码中的MsgBox询问被注释掉),若确认Excel已安装,创建Excel应用程序对象x1,打开指定的Excel文件并激活其第一张工作表。
  1. 主处理过程 a
Sub a(x1, mdl)
    Dim rwIndex
    Dim tableName
    Dim colname
    Dim table
    Dim col
    Dim count

    '可根据字段多少修改值(200)的大小
    For rwIndex = 1 To 200 Step 1
        With x1.Workbooks(1).Worksheets("Sheet1")
            'MsgBox "生成数据表结构共计1 ="+CStr(.Cells(2,2).Value ), vbOK + vbInformation, "表"
            '当值为空自加一行rwIndex + 1
            If.Cells(rwIndex, 1).Value = "" Then
                rwIndex = rwIndex + 1
                If.Cells(rwIndex, 1).Value = "" Then
                    Exit For
                End If
            End If
            '当第四列为空时,为表table的name、code、comment赋值,观察我们的excel表格,不难发现正是第一行,占三格。
            If.Cells(rwIndex, 4).Value = "" Then
                Set table = mdl.Tables.CreateNew
                table.Name =.Cells(rwIndex, 1).Value
                table.Code =.Cells(rwIndex, 2).Value
                table.Comment =.Cells(rwIndex, 3).Value
                rwIndex = rwIndex + 1
                count = count + 1
            Else
                colName =.Cells(rwIndex, 1).Value
                Set col = table.Columns.CreateNew
                '字段中文名
                col.Name =.Cells(rwIndex, 1).Value
                '字段英文名
                col.Code =.Cells(rwIndex, 2).Value
                '注解
                col.Comment =.Cells(rwIndex, 3).Value
                '数据类型
                col.DataType =.Cells(rwIndex, 4).Value
            End If
        End With
    Next

    MsgBox "生成数据表结构共计" + CStr(count), vbOK + vbInformation, "表"

    Exit Sub
End Sub
  • 定义多个变量用于循环、存储表和列的相关信息以及计数。
  • For rwIndex = 1 To 200 Step 1:循环遍历Excel工作表的1到200行,可根据实际数据量调整上限。
  • 在循环中,使用With语句简化对Excel工作表单元格的引用。
  • 如果当前行第一列的值为空,将rwIndex自增1,并再次检查该列值,若仍为空则退出循环,这是为了跳过空行。
  • 当第四列的值为空时,在活动模型中创建一个新表,并根据当前行的第一、二、三列的值设置表的NameCodeComment属性,同时更新rwIndexcount
  • 当第四列的值不为空时,在当前表中创建一个新列,并根据当前行的各列值设置列的NameCodeCommentDataType属性。
  • 循环结束后,弹出提示框显示创建的数据表结构数量。

注意事项

  1. Excel文件路径:代码中x1.Workbooks.Open "xxxxxx.xlsx"需替换为实际的Excel文件路径和文件名。
  2. 错误处理:代码中对于Excel文件打开失败、对象创建失败等情况未进行全面的错误处理,在实际应用中可添加相应的错误处理机制,以提高代码的健壮性。
  3. 数据验证:没有对从Excel读取的数据进行有效性验证,例如数据类型是否符合数据库要求等,可能导致创建表结构时出现错误。在实际使用中,应添加必要的数据验证逻辑。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐