如何在 Excel 中插入模块?

动作需求 · 2499 次浏览
长于舟 创建于 15天13小时前

通过office软件辅助能直接运行一个宏或函数


但有时几个宏是相互关联的,需要插入模块,将代码复制进去后再运行、调用。比如:

' 声明全局变量存储撤销数据(需放在模块顶部)
Dim UndoSource As Range
Dim UndoSourceData As Variant
Dim UndoTarget As Range
Dim UndoTargetData As Variant


Sub QuickMoveWithUndo()
    Dim src As Range, dst As Range
    
    ' 使用当前选区作为源区域
    Set src = Selection
    If src Is Nothing Then Exit Sub
    
    ' 获取目标起始单元格
    On Error Resume Next
    Set dst = Application.InputBox("请点击目标起始单元格", "目标位置", Type:=8)
    If dst Is Nothing Then Exit Sub
    
    ' ==== 核心操作 ====
    ' 1. 备份源数据和目标区域原始数据
    Set UndoSource = src
    UndoSourceData = src.Value
    Set UndoTarget = dst.Resize(src.Rows.Count, src.Columns.Count)
    UndoTargetData = UndoTarget.Value
    
    ' 2. 执行移动操作
    src.ClearContents
    UndoTarget.Value = UndoSourceData
End Sub

Sub UndoLastMove()
    If UndoSource Is Nothing Then Exit Sub
    
    ' 还原操作
    Application.ScreenUpdating = False
    UndoSource.Value = UndoSourceData  ' 还原源数据
    UndoTarget.Value = UndoTargetData  ' 还原目标区域原始数据
    Application.ScreenUpdating = True
    
    ' 清空撤销缓存
    Set UndoSource = Nothing
    Set UndoTarget = Nothing
End Sub

Sub Auto_Open()
    Application.OnKey "^+X", "QuickMoveWithUndo"  ' Ctrl+Shift+X 移动
    Application.OnKey "^+Z", "UndoLastMove"       ' Ctrl+Shift+Z 撤销
End Sub

上面这段vba需要插入模块中再运行,Quicker能实现快捷插入模块并运行吗?

 

长于舟 最后更新于 2025/3/17

回复内容
CL 15天10小时前
#1

quicker里没有这个功能,可能得手动加了。

长于舟 回复 CL 15天8小时前 :

那有没有可能整一个呢,这可是提升生产力的需要呀,很有意义的

长于舟 回复 长于舟 14天12小时前 :


长于舟 最后更新于 14天12小时前
长于舟 回复 CL 14天12小时前 :

我找到方法了,这里用Quicker可能确实不太好。

假设Quicker能实现,那需要在每个新工作簿都插入一遍,保存时还会提醒【是否保存为启用宏的工作簿】,比较麻烦,建议用 Excel 加载项:

【有道云笔记】Excel 加载项、个人宏工作簿(PERSONAL.XLSB)

https://note.youdao.com/s/dwxv1npd

回复主贴