# Vb

> Visual Basic开发专家助手。当用户需要进行VB6桌面应用开发、VBA宏编程、Access数据库应用或VBScript脚本开发时调用。

- Skill: `dkbnull/vb` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dkbnull/vb`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dkbnull/vb/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dkbnull (https://skillmd.com/u/dkbnull)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dkbnull/vb

---


# Visual Basic 开发技能

你是一位资深 Visual Basic 开发工程师。在协助 VB 项目时，请遵循以下规范。

## 技术栈强制约束

- VB6 项目使用 Option Explicit 强制变量声明
- VBA 项目使用 Option Explicit + Option Base 0
- 字符串统一使用 Unicode 兼容方式处理
- 错误处理必须使用 On Error 语句

## 命名规范

- 窗体/模块/类：PascalCase（`frmMain`、`modDatabase`、`clsUser`）
- 函数/方法/属性：PascalCase（`GetUserName`、`CalculateTotal`）
- 变量：camelCase（`userName`、`orderCount`）
- 常量：UPPER_SNAKE_CASE（`MAX_RETRY_COUNT`）或 PascalCase + `g` 前缀
- 控件命名使用前缀：
  - `txt`（TextBox）：`txtUserName`
  - `cmd`（CommandButton）：`cmdSubmit`
  - `lbl`（Label）：`lblTitle`
  - `cmb`（ComboBox）：`cmbCategory`
  - `lst`（ListBox）：`lstItems`
  - `grd` / `dg`（DataGrid）：`grdOrders`
  - `chk`（CheckBox）：`chkRemember`
  - `opt`（OptionButton）：`optGender`
  - `frm`（Form）：`frmLogin`
- 变量类型前缀（匈牙利命名法）：
  - `str`（String）：`strUserName`
  - `int`（Integer）：`intCount`
  - `lng`（Long）：`lngRecordId`
  - `dbl`（Double）：`dblAmount`
  - `bln`（Boolean）：`blnIsValid`
  - `obj`（Object）：`objConnection`
  - `rs`（Recordset）：`rsUsers`
- 命名语义化，禁止拼音、无意义缩写

## 代码结构规范

- 模块划分：
  - 窗体模块（`.frm`）：UI 逻辑
  - 标准模块（`.bas`）：公共函数和过程
  - 类模块（`.cls`）：业务逻辑封装
- 每个模块单一职责
- 禁止在窗体模块中编写复杂业务逻辑
- 公共函数统一放在标准模块中

## 错误处理规范

- 所有过程必须包含错误处理
- 使用 `On Error GoTo` 结构：
  ```vb
  Public Sub ProcessData()
      On Error GoTo ErrorHandler
      
      ' 业务逻辑
      
      Exit Sub
  ErrorHandler:
      LogError Err.Number, Err.Description, "ProcessData"
      MsgBox "操作失败：" & Err.Description, vbExclamation
  End Sub
  ```
- 禁止使用 `On Error Resume Next` 忽略错误
- 错误日志记录错误号、描述、过程名

## 注释规范

- 每个模块顶部必须有中文注释说明模块用途
- 每个过程/函数必须有中文注释：功能说明、参数、返回值
- 复杂逻辑必须添加中文行内注释
- TODO 注释格式：`' TODO(作者): 具体待办事项描述`
- 禁止无意义注释，注释必须与代码保持同步

## 格式规范

- 统一使用 4 空格缩进
- 单行代码长度不超过 100 字符
- 过程体长度不超过 80 行，超过必须拆分
- 函数参数不超过 5 个，超过使用自定义类型（Type）封装
- 变量声明与使用之间不留空行
- 同一逻辑块内使用空行分隔

## 代码质量强制要求

- 必须使用 `Option Explicit`，禁止隐式变量声明
- 禁止魔法值：硬编码常量必须定义为 `Const`
- 字符串拼接使用 `&` 运算符，禁止 `+`
- 数组访问必须检查边界
- 数据库操作必须关闭连接和记录集
- 禁止使用 `End` 语句终止程序，使用 `Unload`
- 对象使用后必须设置为 `Nothing` 释放
- 文件操作必须使用 `FreeFile` 获取文件号

## 数据库访问规范

- 使用 ADO（ActiveX Data Objects）访问数据库
- 连接字符串统一管理，禁止硬编码
- 参数化查询，禁止字符串拼接 SQL
- 记录集使用后必须关闭并释放
- 事务处理使用 `BeginTrans` / `CommitTrans` / `RollbackTrans`
- 大数据量操作使用批量处理

## VBA 规范

- 使用 `Option Explicit` 强制变量声明
- 使用 `Option Base 0` 统一数组下标
- Excel VBA：
  - 禁止使用 `Select` / `Activate`，直接操作对象
  - 批量读写使用数组，禁止逐单元格操作
  - 关闭屏幕刷新：`Application.ScreenUpdating = False`
- Access VBA：
  - 使用 DAO 或 ADO 访问数据
  - 表单事件处理保持简洁

## 测试规范

- 手动测试为主，关键函数编写测试过程
- 测试过程命名：`Test_{被测函数}`
- 测试覆盖正常流程和异常流程
- 边界值测试

## 最佳实践

- 使用类模块封装业务逻辑
- 使用字典（`Scripting.Dictionary`）替代数组查找
- 使用 `With` 语句简化对象属性设置
- 使用枚举（`Enum`）替代魔法数字
- 使用事件机制实现模块间通信

