请求编写VBA代码:定义名称(Process 1等)并实现自动填充单元格图案功能
VBA解决方案:零件工序判定与自动格式设置
1. 创建包含零件编号的定义名称(Defined Name)
以下代码会根据指定单元格范围创建Process 1、Process 2、Process 3三个定义名称。你需要根据截图里的零件编号实际位置修改代码中的范围引用:
Sub CreateProcessNames() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") ' 替换为你的目标工作表名称 ' 清除已存在的同名定义名称,避免重复创建 On Error Resume Next ThisWorkbook.Names("Process 1").Delete ThisWorkbook.Names("Process 2").Delete ThisWorkbook.Names("Process 3").Delete On Error GoTo 0 ' 创建Process 1的定义名称,示例范围为A2:A15,需替换为截图中的实际范围 ThisWorkbook.Names.Add _ Name:="Process 1", _ RefersTo:=ws.Range("A2:A15"), _ Visible:=True ' 创建Process 2的定义名称,示例范围为B2:B15,需替换为截图中的实际范围 ThisWorkbook.Names.Add _ Name:="Process 2", _ RefersTo:=ws.Range("B2:B15"), _ Visible:=True ' 创建Process 3的定义名称,示例范围为C2:C15,需替换为截图中的实际范围 ThisWorkbook.Names.Add _ Name:="Process 3", _ RefersTo:=ws.Range("C2:C15"), _ Visible:=True MsgBox "定义名称创建完成!" End Sub
2. 自动判定工序并设置单元格格式
使用工作表Change事件,当单元格输入零件编号时,自动匹配对应的定义名称,判定所属工序,并将单元格填充为75%灰色图案:
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Dim processName As String Dim isMatch As Boolean ' 仅处理单个单元格输入,避免批量操作卡顿 If Target.Cells.Count > 1 Then Exit Sub ' 仅处理指定列(示例为A列,可根据需求修改目标列) If Target.Column <> 1 Then Exit Sub ' 清空单元格原有填充格式 Target.Interior.Pattern = xlNone ' 遍历三个工序定义名称,匹配输入的零件编号 isMatch = False For Each processName In Array("Process 1", "Process 2", "Process 3") If Not IsError(Application.Match(Target.Value, ThisWorkbook.Names(processName).RefersToRange, 0)) Then ' 设置75%灰色图案填充 Target.Interior.Pattern = xlGray75 isMatch = True Exit For End If Next processName ' 可选:未匹配到工序时弹出提示 If Not isMatch Then MsgBox Target.Value & " 未匹配到任何工序!" End If End Sub
使用步骤
- 打开VBA编辑器(按下
Alt + F11); - 插入标准模块:右键点击工程资源管理器中的工作簿名称 → 插入 → 模块,粘贴第一部分的
CreateProcessNames代码; - 双击需要实现自动判定的工作表(如Sheet1),在右侧代码窗口粘贴第二部分的
Worksheet_Change代码; - 修改第一部分代码中的单元格范围,确保与截图里的零件编号位置一致;
- 运行
CreateProcessNames宏(按下F5),完成定义名称的创建; - 在指定列输入零件编号,单元格会自动填充75%灰色(若匹配到对应工序)。
内容的提问来源于stack exchange,提问作者Syazwan Zuhaizi
相关产品推荐
相关产品推荐

