目录

最近用vba编辑Excel自定义功能区,试了很多办法,看了很多文章,过程都很复杂,实现起来难度也比较大。但功夫不负有心人,最终成功突围,也免去了用代码编辑自定义功能区排版布局。

自定义功能区的实现

效果图:
在这里插入图片描述

1.编写执行代码生成.xlam文件,拷贝到%APPDATA%\Microsoft\AddIns\

VBA代码比如:

Sub 删除空行()
    On Error Resume Next
    Dim Rng As Range
    Set Rng = Intersect(ActiveSheet.UsedRange, Selection, Selection.SpecialCells(xlCellTypeBlanks))
    Rng.EntireRow.Delete
End Sub

将以上vba代码另存为.xlam文件,并拷贝到目录%APPDATA%\Microsoft\AddIns\

2.编辑自定义功能区生成Excel.officeUI文件,拷贝到%LOCALAPPDATA%\Microsoft\office\

方法:
(1)通过Excel生成Excel.exportedUI文件;
(2)将Excel.exportedUI文件删除第一行<mso:cmd app=“Excel” dt=“1”/>,另存为Excel.officeUI文件;
(3)将Excel.officeUI拷贝到%LOCALAPPDATA%\Microsoft\office\Excel.officeUI;

(1)通过Excel生成Excel.exportedUI文件,具体步骤如下:
通过Excel添加到自定义功能区
在这里插入图片描述在菜单里会显示如下结果:

在这里插入图片描述
导出自定义功能区为Excel.exportedUI文件。
在这里插入图片描述

(2)将Excel.exportedUI用记事本打开,删除第一行:<mso:cmd app=“Excel” dt=“1” />另存为Excel.officeUI。
(3)拷贝文件,将Excel.officeUI拷贝到%LOCALAPPDATA%\Microsoft\office\Excel.officeUI。

实现可移植自定义功能区的过程

1.制作AddIn.xlam文件,第一次安装时启动excel并加载宏设置为选中,效果如下图:
在这里插入图片描述

Private Sub Workbook_Open()
    On Error Resume Next
    Dim oXL As Object, oAddin As Object
    AddInName = "MyTool.xlam"
    URL = Me.Path & "\"
    Set oXL = Application 
    With oXL
        For i = 1 To .AddIns.Count
            If .AddIns(i).Name = AddInName And .AddIns(i).FullName <> URL & AddInName Then
                .Workbooks(AddInName).Close
                FileCopy URL & AddInName, .AddIns(i).FullName
                .Workbooks.Open (.AddIns(i).FullName)
                .AddIns(i).Installed = True
            End If
        Next
        Set oAddin = .AddIns.Add(URL & AddInName, True)
        oAddin.Installed = True
        .Quit
    End With
    Set oXL = Nothing
End Sub

2.使用bat指令批量处理,生成run.bat,实现功能包括:

运行AddIn.xlam
拷贝MyTool.xlam到%APPDATA%\Microsoft\AddIns\MyTool.xlam
拷贝Excel.officeUI到%LOCALAPPDATA%\Microsoft\office\Excel.officeUI

@echo off
::==========================
::启用管理员模式
setlocal EnableDelayedExpansion
color 3e
::title 添加服务配置
PUSHD %~DP0 & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas
::==========================
::安装程序
echo.
echo 正在安装. . .
::—关闭word、excel—
set p1=excel.exe
set p2=winword.exe
tasklist|findstr /i %p1%&&taskkill /f /im %p1% >nul 2>nul
tasklist|findstr /i %p2%&&taskkill /f /im %p2% >nul 2>nul
::echo —安装—
set errorl=1
echo 1.正在设置加载项. . . 
copy /Y MyTool.xlam %APPDATA%\Microsoft\AddIns\MyTool.xlam >nul 2>nul && echo Excel加载项成功导入!|| IF ERRORLEVEL 1 set errorl=0&echo Excel加载项未导入×
start /b/min/wait AddIn.xlam >nul 2>nul && echo Excel加载项已启用!|| echo Excel加载项未能启用×
::==========================
echo. 
echo 2.正在导入officeUI文件. . .
copy /Y Excel.officeUI %LOCALAPPDATA%\Microsoft\office\Excel.officeUI >nul 2>nul && echo Excel.UI成功导入!|| IF ERRORLEVEL 1 set errorl=0&echo Excel.UI未导入×
::==========================
echo. 
if %errorl%==1 echo 安装成功!
if %errorl%==0 echo 安装不成功,请联系发布者检查未安装项后再重新安装!
echo.
@pause
exit

可将以上文件压缩成自运行压缩包(run.bat、AddIn.xlam、MyTool.xlam、Excel.officeUI),解压包时运行run.bat,就可将自定义功能区内容移植到其他用户excel自定义功能区。

安装成功的效果图:
在这里插入图片描述

希望能给以上困扰的朋友们一些帮助!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐