随笔21. 条形码为 7 - Code-128类型,引用之为空,条形码不显示

360 阅读5分钟

目录

  1. 设备

  2. 需求

  3. 提前准备

    • 3.1 启用开发工具
    • 3.2 添加条形码控件
  4. 详细步骤

    • 4.1 设置条形码控件的类型
    • 4.2 使用 VBA 控制条形码显示
  5. 总结


1. 设备

硬件与软件要求:

  • 操作系统:Windows 系统
  • 软件:Microsoft Office 365 Solo 或任意支持宏的 Office 版本(例如 Excel 2016 或更高版本)
  • 条形码控件:Microsoft BarCode Control 16.0 或其他支持 Code-128 条形码的控件
  • 提示必须安装 Microsoft Access。这是因为 BarCode Control 属于 Microsoft Office 的一部分,而 Microsoft Access 提供了必要的组件来支持该控件。如果未安装 Access,可能会导致控件不可用的情况。

2. 需求

本需求是实现一个 Excel 文件,其中插入了一个 7 - Code-128 条形码,条形码的数据来源于单元格 A1。当 A1 单元格的值为空时,条形码控件将被隐藏;当 A1 单元格有值时,条形码控件会根据该值生成相应的条形码。


3. 提前准备

3.1 启用开发工具

在 Excel 中操作条形码控件,首先需要启用 开发工具选项卡。以下是启用步骤:

  1. 打开 Excel
  2. 点击 文件 > 选项,打开 Excel 选项窗口。
  3. 在左侧选择 自定义功能区
  4. 在右侧找到 主选项卡,勾选 开发工具,然后点击 确定
  5. 返回 Excel,确认在菜单栏上已经出现 开发工具选项卡。
  6. !!!!记住:当你是再现有的.xlsm文件中修改条形码的时候,记得打开设计模式,否则无法操作条形码

image.png

image.png image.png

3.2 添加条形码控件

接下来,我们需要在工作表中插入 条形码控件。步骤如下:

  1. 点击 开发工具选项卡。
  2. 控件组中,点击 插入
  3. 在下拉菜单中,选择 更多控件(位于 ActiveX 控件部分)。
  4. 在弹出的控件列表中,找到并选择 Microsoft BarCode Control 16.0,点击 确定
  5. 回到工作表,光标会变成十字形,点击工作表任意位置以插入条形码控件。
  6. 调整条形码控件的大小和位置以符合需求。

image.png


image.png

image.png

4. 详细步骤

4.1 设置条形码控件的类型

  1. 右键点击条形码控件,选择 属性

image.png 3. 在 属性窗口中,将 Style 属性设置为 7(代表 Code-128 类型条形码)。

image.png 5. 在属性窗口中找到 LinkedCell 属性,将其设置为 A1,使条形码控件的数据来源于单元格 A1,顺便拷贝一下条形码的名字 ,后面有用 BarCodeCtrl1

image.png

image.png 6. 关闭属性窗口。

此时,条形码控件已经设置完成,且会根据 A1 单元格的值生成 Code-128 类型的条形码。

image.png A1值为0的时候条形码是根据0生成的

image.png A1值为空的时候条形码还是显示,只不过显示的是 7 - Code-128的数据的格式而已,并不是根据数据生成的

4.2 使用 VBA 控制条形码显示

我们希望当 A1 单元格的值为空时,条形码不显示;当 A1 单元格有值时,条形码会根据内容正常显示。接下来通过 VBA 实现这一功能。

!!!!记住:当你是再现有的.xlsm文件中修改条形码的时候,记得打开设计模式,否则无法操作条形码

  1. 打开 VBA 编辑器

    • 按下 Alt + F11 快捷键,打开 VBA 编辑器窗口。
    • 或者选择条形码,右键选择 查看代码

image.png

  1. 编写代码

    • 在左侧 工程资源管理器 中找到目标工作表(例如 Sheet1),并双击打开它的代码窗口。

image.png

image.png 里面原来的代码不用管他,我们直接再后面加上我们需要的方法 - 在代码窗口中输入如下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 检查是否是 A1 单元格发生了变化
    If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
        ' 如果 A1 是空值
        If IsEmpty(Target.Value) Then
            ' 隐藏条形码控件
            Me.OLEObjects("BarCodeCtrl1").Visible = False
        Else
            ' 显示条形码控件
            Me.OLEObjects("BarCodeCtrl1").Visible = True
        End If
    End If
End Sub

image.png 直接CTRL+S保存即可

保存好后点击关闭

image.png

保存好以后要重新打开!!! 重新打开后会要求你启用内容,点击 image.png

二维码隐藏了,因为A1没有数据 image.png

再A1数据数据,条形码显示 image.png

再次测试,清空A1的数据,条形码再次隐藏 image.png 代码说明

  • 该事件处理器在 A1 单元格内容发生变化时触发。
  • 如果 A1 单元格为空,条形码控件隐藏;如果 A1 单元格有值,则条形码控件显示。
  • BarCodeCtrl1 是条形码控件的名称。确保名称正确,若控件名称不同,请修改代码中对应的控件名称。
  1. 保存 VBA 代码与文件

    • 编写好 VBA 代码后,按 Ctrl + S 保存代码。
    • 回到 Excel,点击 文件 > 另存为,选择 Excel 含宏的工作簿 (*.xlsm) 文件格式进行保存。
  2. 测试效果

    • 进入 Excel 修改 A1 单元格的值:

      • 当 A1 为时,条形码控件将不显示。
      • 当 A1 有值时,条形码控件会显示并根据 A1 单元格的值生成条形码。

此处建议新建为excel文件的时候先直接另存为.xlsm 文件,在这样,直接就可以写宏了,不用再到后面写完了再另存.

image.png

image.png

image.png

image.png

5. 总结

通过本次操作,我们成功实现了使用 VBA 控制条形码的显示与隐藏功能。使用了 Microsoft BarCode Control 16.0 的 7 - Code-128 条形码控件,并将其动态链接到 Excel 单元格 A1。当 A1 单元格为空时,条形码自动隐藏;当 A1 单元格有值时,条形码显示并生成相应的条形码。

注意:在开始操作前,必须确保系统中安装了 Microsoft Access,因为条形码控件依赖于 Access 提供的必要组件。如果未安装 Access,可能会导致控件不可用。这一方案适用于自动化管理条形码生成的场景,在 Excel 中可以灵活处理数据与条形码的交互需求。

!!!!记住:当你是再现有的.xlsm文件中修改条形码的时候,记得打开设计模式,否则无法操作条形码