精华内容
下载资源
问答
  • 创建调用自定义菜单 列中的空白单元格到向下填充值 HTML 文件中创建的目录等
  • 本例是使用DELPHI来实现VBA技术,功能包括在WORD中添加菜单,然后实现套红头及清稿功能: unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics,...

    本例是使用DELPHI来实现VBA技术,功能包括在WORD中添加菜单及宏,然后实现套红头及清稿功能:

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,comobj;

    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    function trunc2(fval:real):integer;
    var nval:integer;
    begin
       //进一法
       if int(fval)=fval then
          nval:=trunc(fval)
       else
          nval:=trunc(fval)+1;            //整数部分+1
       Result:=nval;
    end;

    function getWordCount(str:string):integer;
    var
    ncount,nzcount,necount:integer;
    fecount:real;
    begin
       ncount:=length(WideString(str));
       nzcount:=length(str)-ncount;
       necount:=ncount-nzcount;
       fecount:=necount/2;
       nzcount:=nzcount+trunc2(fecount);
       Result:=nzcount;
    end;

    function add_menubar(wordapp:variant):boolean; //======显示和隐藏红头的菜单、清稿的菜单及其对应的宏
    var aa,bb,cc : variant;
    i,j,n:integer;
    bfind:boolean;
    begin
      try
        //=====先把之前的宏清空
        n := wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.CountOfLines;
        If n > 0 Then
            wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.DeleteLines(1, n);

        //=====添加显示红头的宏
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(1,   'Sub showRedHead()');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(2,   ' If ActiveDocument.Bookmarks.Exists("红头") Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(3,   '       ActiveDocument.Bookmarks.Item("红头").Range.Font.ColorIndex = wdRed');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(4,   ' End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(5,   ' If ActiveDocument.Bookmarks.Exists("五星") Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(6,   '       ActiveDocument.Bookmarks.Item("五星").Range.Font.ColorIndex = wdRed');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(7,   ' End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(8,   ' If ActiveDocument.Bookmarks.Exists("五角星") Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(9,   '       ActiveDocument.Bookmarks.Item("五角星").Range.Font.ColorIndex = wdRed');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(10,   ' End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(11,   ' ');    //不能为空
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(12,   'Dim k As Integer');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(13,   'For k = 1 To ActiveDocument.Shapes.Count');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(14,   '   If ActiveDocument.Shapes.Item(k).Type = 9 Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(15,   '       ActiveDocument.Shapes.Item(k).Select');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(16,   '       If Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 255, 255) Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(17,   '          Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0)');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(18,   '          Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 0, 0)');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(19,   '      End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(20,   '   End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(21,   'Next');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(22,   'End   Sub ');

        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(23,   '  ');

        //=====添加隐藏红头的宏
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(24,   'Sub hideRedHead()');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(25,   '  If ActiveDocument.Bookmarks.Exists("红头") Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(26,   '       ActiveDocument.Bookmarks.Item("红头").Range.Font.ColorIndex = wdWhite');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(27,   '  End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(28,   '  If ActiveDocument.Bookmarks.Exists("五星") Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(29,   '       ActiveDocument.Bookmarks.Item("五星").Range.Font.ColorIndex = wdWhite');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(30,   '  End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(31,   '  If ActiveDocument.Bookmarks.Exists("五角星") Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(32,   '       ActiveDocument.Bookmarks.Item("五角星").Range.Font.ColorIndex = wdWhite');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(33,   '  End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(34,   '  ');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(35,   'Dim k As Integer');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(36,   'For k = 1 To ActiveDocument.Shapes.Count');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(37,   '   If ActiveDocument.Shapes.Item(k).Type = 9 Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(38,   '      ActiveDocument.Shapes.Item(k).Select');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(39,   '      If Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0) Then');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(40,   '          Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 255, 255)');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(41,   '          Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(42,   '      End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(43,   '   End If');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(44,   'Next');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(45,   'End   Sub ');

        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(46,   '  ');

        //=====添加接受所选修订的宏
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(47,   'Sub acceptSelectdEdit()');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(48,   '  On Error Resume Next');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(49,   '  WordBasic.AcceptChangesSelected');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(50,   'End   Sub ');
       
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(51,   '  ');

        //=====添加接受全部修订的宏
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(52,   'Sub acceptAllEdit()');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(53,   '  On Error Resume Next');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(54,   '  WordBasic.AcceptAllChangesInDoc');
        wordapp.VBE.VBProjects.item('Normal').VBComponents.Item('ThisDocument').Codemodule.InsertLines(55,   'End   Sub ');
      finally
        //======下面添加操作宏的菜单
        try
            //============================================红头与清稿工具栏=====================================================
            try
                bfind:=false;
                for i:=1 to wordapp.CommandBars.Count do
                begin
                    if wordapp.CommandBars.Item[i].name='红头与清稿' then
                    begin
                       //wordapp.CommandBars.Item['红头与清稿'].Delete;        //若已存在,则先删除,以免重复报错
                       bfind:=true;
                       break;
                    end;
                end;
            finally
                if not bfind then    //不存在
                    wordapp.CommandBars.Add(Name:='红头与清稿').Visible := True;     //新建一个栏组
            end;

            //============================================红头设置(&1)菜单=====================================================
            try
                bfind:=false;
                //wordapp.CommandBars('红头与清稿').Controls('红头设置(&1)').Delete;   //若已存在,则先删除,以免重复报错
                for i:=1 to wordapp.CommandBars.Item['红头与清稿'].Controls.Count do
                begin
                    if wordapp.CommandBars.Item['红头与清稿'].Controls[i].caption='红头设置(&1)' then
                    begin
                        //wordapp.CommandBars.Item['红头与清稿'].Controls['红头设置(&1)'].Delete;   //若已存在,则先删除,以免重复
                        bfind:=true;
                        break;
                    end;
                end;
            finally
                if not bfind then    //不存在
                begin
                   //Dim aa As CommandBarPopup
                   //aa:= wordapp.CommandBars('红头与清稿').Controls.Add(Type:=10,Before:=1);
                   aa:= wordapp.CommandBars.Item['红头与清稿'].Controls.Add(Type:=10,Before:=1); //增加菜单
                   aa.Caption := '红头设置(&1)';

                    //Dim bb As CommandBarButton
                   bb := aa.Controls.Add(Type:=1, Before:=1);   //增加按纽
                   bb.Caption := '显示红头(&2)';
                   bb.OnAction := 'showRedHead' ;   //引用宏

                    //Dim cc As CommandBarButton
                   cc := aa.Controls.Add(Type:=1, Before:=2);   //增加按纽
                   cc.Caption := '隐藏红头(&3)' ;
                   cc.OnAction := 'hideRedHead' ;   //引用宏
                end;
            end;

            //============================================我要清稿(&4)菜单=====================================================
            try
                bfind:=false;
                for i:=1 to wordapp.CommandBars.Item['红头与清稿'].Controls.Count do
                begin
                    if wordapp.CommandBars.Item['红头与清稿'].Controls[i].caption='我要清稿(&4)' then
                    begin
                        //wordapp.CommandBars.Item['红头与清稿'].Controls['我要清稿(&4)'].Delete;   //若已存在,则先删除,以免重复
                        bfind:=true;
                        break;
                    end;
                end;
            finally
                if not bfind then    //不存在
                begin
                    aa:= wordapp.CommandBars.Item['红头与清稿'].Controls.Add(Type:=10,Before:=1); //增加菜单
                   aa.Caption := '我要清稿(&4)';

                    //Dim bb As CommandBarButton
                   bb := aa.Controls.Add(Type:=1, Before:=1);   //增加按纽
                   bb.Caption := '接受所选修订(&5)';
                   bb.OnAction := 'acceptSelectdEdit' ;   //引用宏

                    //Dim cc As CommandBarButton
                   cc := aa.Controls.Add(Type:=1, Before:=2);   //增加按纽
                   cc.Caption := '接受全部修订(&6)' ;
                   cc.OnAction := 'acceptAllEdit' ;   //引用宏
                end;
            end;
        finally
        end;
      end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var fExt,sFileName:string;
    msword,wpsapp:variant;
    k,m,n,m_top,m_width,m_height,m_fontsize,nlen,ncount,nlinesize,nlinecount,m_height2,nmoveup,m_subject_pos:integer;
    linesize,linecount:double;
    tmpstr,sendunit,aa,linename:string;
    begin
              try
                msword := CreateOleObject('word.application');

              except
                wpsapp := CreateOleObject('wps.application');

              end;

      msword.Documents.Open(FileName:=edit1.Text, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:='',
                               PasswordTemplate:='', Revert:=False, WritePasswordDocument:='', WritePasswordTemplate:='', Format:=0);//Format:=wdOpenFormatAuto

      sendunit:='XXX各机关单位 XXX各机关单位 XXX各机关单位 XXX各机关单位 XXX各机关单位 XXX各机关单位 XXX各机关单位 XXX各机关单位';
      if msword.ActiveDocument.Bookmarks.Exists('主送') then
        msword.ActiveDocument.Bookmarks.Item('主送').Range.Text:=sendunit;
      if msword.ActiveDocument.Bookmarks.Exists('抄送') then
        msword.ActiveDocument.Bookmarks.Item('抄送').Range.Text:=sendunit;

      //=====================下面调整抄送文本框的高度========

        For k:=1 to msword.ActiveDocument.Shapes.count do
        begin
            If msword.ActiveDocument.Shapes.item(k).type = 17 Then
            begin
                tmpstr := msword.ActiveDocument.Shapes.item(k).TextFrame.TextRange.Text;
                If (pos('主送',tmpstr) > 0)  or (pos('抄送',tmpstr)>0) or (pos('主送与抄送',tmpstr)>0) Then
                begin
                    m_width := msword.ActiveDocument.Shapes.item(k).Width;
                    m_height := msword.ActiveDocument.Shapes.item(k).Height;
                    m_fontsize := msword.ActiveDocument.Shapes.item(k).TextFrame.TextRange.Font.Size;
                    //showmessage(inttostr(m_fontsize));

                    m_top:=msword.ActiveDocument.Shapes.item(k).Top;
                    //======下面是人工计算
                    linesize := (m_width / m_fontsize);     //一行多少个字
                    nlinesize := trunc2(linesize);

                    if copy(tmpstr,length(tmpstr),1)=#10 then
                       tmpstr:=copy(tmpstr,0,length(tmpstr)-1);    //减去换行
                    if copy(tmpstr,length(tmpstr),1)=#13 then
                       tmpstr:=copy(tmpstr,0,length(tmpstr)-1);    //减去回车

                    nlen := getWordCount(tmpstr);
                    If nlen > nlinesize Then
                        ncount := nlen - nlinesize    //除了第一行,还有多少字
                    Else
                        ncount := 0;

                    linecount := ncount / (nlinesize-3) ;        //剩下多少行,悬挂缩进3字符
                    nlinecount := trunc2(linecount);
                    nlinecount:=nlinecount+1;          //加上第一行

                    //=======下面是自动适应高度的方法
                    msword.ActiveDocument.Shapes.item(k).TextFrame.AutoSize := true;
                    sleep(800);//上面的自动调整需要一点时间
                    m_height2 :=msword.ActiveDocument.Shapes.item(k).Height;

                    if(m_height2-m_height<=0) and (nlinecount>1) then
                    begin//说明上面的自动方法不行,只好用人工计算方法
                        m_height2 :=trunc(30 * nlinecount+6)  ;       //得到文本框的高度
                        msword.ActiveDocument.Shapes.item(k).Height := m_height2;
                    end;

                    nmoveup := m_height2 - m_height;       //移动量
                    msword.ActiveDocument.Shapes.item(k).Top :=m_top - nmoveup;

                    break;
                end;
            end;
        end;

       
       //=====================下面调整主题词文本框的位置========
        For k:=1 to msword.ActiveDocument.Shapes.count do
        begin
            If msword.ActiveDocument.Shapes.item(k).type = 17 Then
            begin
                tmpstr := msword.ActiveDocument.Shapes.item(k).TextFrame.TextRange.Text;
                If pos('主题词',tmpstr) > 0 Then
                begin
                    m_subject_pos := msword.ActiveDocument.Shapes.item(k).Top;
                    msword.ActiveDocument.Shapes.item(k).Top := msword.ActiveDocument.Shapes.item(k).Top - nmoveup;

                    break;
                end;
            End;
        end;

        //=====================下面调整主题词下面的那条横线的位置========
        m := 1000;
        linename := '';
        For k:=1 to msword.ActiveDocument.Shapes.count do
        begin
            If msword.ActiveDocument.Shapes.item(k).type = 9 Then
            begin
                n := msword.ActiveDocument.Shapes.item(k).Top - m_subject_pos;
                If n > 0 Then
                begin
                    If Abs(n) < m Then
                    begin
                        m := Abs(n);
                        linename := msword.ActiveDocument.Shapes.item(k).Name;
                    End;
                End;
            End;
        end;

        If linename <> '' Then
        begin
            msword.ActiveDocument.Shapes.item(linename).Top := msword.ActiveDocument.Shapes.item(linename).Top - nmoveup;
        End;

       
        try
            add_menubar(msword);
        finally
            msword.ActiveWindow.ActivePane.View.Zoom.Percentage:=100; //缩放100%
            msword.Visible := True;
        end;
    end;

    end.

    展开全文
  • 加载项增加菜单,便于进行操作
  • VBA自定义菜单和菜单栏

    千次阅读 2013-08-28 20:36:29
    本文着重介绍如何在 Excel 2003版本中通过编程方式自定义菜单和菜单栏方法。其中包含Excel 中管理和自定义菜单栏、菜单、命令、子菜单和快捷菜单,我将通过代码实例分步说明。 与大家分享关于VBA实现菜单栏管

    EXCEL中,我们的操作都是通过工具栏、菜单栏、快捷菜单实现。EXCEL通过菜单给我们提供基本操作功能之外,也为我们提供了扩展自定义功能的接口,即自定义自己的工具栏、菜单栏。

    本文着重介绍如何在 Excel 2003版本中通过编程方式自定义菜单和菜单栏方法。其中包含Excel 中管理和自定义菜单栏、菜单、命令、子菜单和快捷菜单,我将通过代码实例分步说明。

    与大家分享关于VBA实现菜单栏管理与自定义菜单栏功能的实现。

    一、简介

    在 Microsoft Excel 2000以上版本中实现许与自定义菜单栏和菜单相关的常见任务,可以使用“自定义”对话框(见图1.1)。但如果要实现较高级任务或为自定义程序定制菜单栏和菜单,就需要创建 Microsoft Visual Basic for Applications (VBA) 代码。

    有关如何使用“自定义”对话框的更多信息,你可以单击“帮助”菜单上的“Microsoft Excel 帮助”,在“Office 助手”或“搜索向导”中键入自定义菜单栏,然后单击“搜索”查看主题。

    二、命令栏

    在 Microsoft Office 中,所有工具栏、菜单栏和快捷菜单都是被作为“命令栏”这样一种对象以编程方式控制的。下列所有项目在 VBA 中皆用 CommandBar 对象表示:

    l    菜单栏、工具栏和快捷菜单。

    l    菜单栏和工具栏上的菜单。

    l    菜单、子菜单和快捷菜单上的子菜单。

    您可以修改任何内置的菜单栏和工具栏,还可以创建和修改用您自己的 VBA 代码交付的自定义工具栏、菜单栏和快捷菜单。您可以将程序功能以单个按钮的形式放在工具栏上,或以命令名称组的形式放在菜单上。因为工具栏和菜单都是命令栏,所以可以使用同一类型的控件。

     VBA  Microsoft Visual Basic 中,按钮和菜单项用 CommandBarButton 对象表示。显示菜单和子菜单的弹出控件用 CommandBarPopup 对象表示。在以下示例中,名为“Menu”的控件和名为“Submenu”的控件都是用于显示菜单和子菜单的弹出控件,并且这两个控件是各自的控件集中唯一的 CommandBar 对象。

     Microsoft Excel 中,菜单栏和工具栏被视为是同一种可编程对象,即 CommandBar 对象。可以使用CommandBar 对象中的控件来指代菜单、菜单项、子菜单和快捷菜单。可以在 Type 参数中使用一个常量为每个控件指定要用于菜单、子菜单或命令的控件类型。

    三、控件常量

    下面是 Excel 2003 中的各种控件常量的列表,这些常量指定用于特定菜单栏控件的图形控件类型:

     MsoControlActiveX*

     MsoControlAutoCompleteCombo***

     MsoControlButton

     MsoControlButtonDropdown

     MsoControlButtonPopup

     MsoControlComboBox

     MsoControlCustom

     MsoControlDropdown

     MsoControlEdit

     MsoControlExpandingGrid

     MsoControlGauge

     MsoControlGenericDropdown

     MsoControlGraphicCombo

     MsoControlGraphicDropdown

     MsoControlGraphicPopup

     MsoControlGrid

     MsoControlLabel

     MsoControlLabelEx***

     MsoControlOCXDropDown

     MsoControlPane **

     MsoControlPopup

     MsoControlSpinner***

     MsoControlSplitButtonMRUPopup

     MsoControlSplitButtonPopup

     MsoControlSplitDropdown

     MsoControlSplitExpandingGrid

     MsoControlWorkPane**

    表示 Microsoft Excel 2000 中的新增项

    ** 表示 Microsoft Excel 2002 中的新增项

    *** 表示 Microsoft Office Excel 2003 中的新增项

     

    四、菜单栏

    菜单栏是一种命令栏。它是一种可在其中添加菜单、菜单项和子菜单的对象。

    有关如何在 Excel 中管理菜单栏和菜单项的更多信息,请按照下列步骤操作:

     

    1. 启动 Microsoft Visual Basic 编辑器。

    2. 在“帮助”菜单上,单击“Microsoft Visual Basic 帮助”。

    3. 在“Office 助手”框或“应答向导”框中,键入菜单栏,然后单击“搜索”。

    4.  Excel 2003  Excel 2002 中,单击“添加和管理菜单栏和菜单项”。在 Excel 2000 中,单击“关于菜单和工具栏”。

     

    可以在运行时修改菜单栏及该菜单栏上的控件。对菜单栏所做的更改可能会影响菜单栏的外观或位置。可对控件进行的更改取决于控件类型。下表列出了最常见的属性和常用于更改控件的状态、操作或内容的方法:

    属性或方法

    用途

    Add

    添加菜单栏,方法是使用 CommandBars 对象集合的 Add 方法,然后为 Menubar 参数指定 TRUE值。

    Enabled

    如果 Enabled 属性的值为 TRUE,那么用户可以使用 Visual Basic 代码使指定的菜单栏可见。如果Enabled 属性的值为 FALSE,用户就无法让菜单栏可见。不过,菜单栏将出现在可用命令栏列表中。

    Protection

    使您可以通过特定用户操作来保护菜单栏。

    Position

    指定新菜单栏相对于程序窗口的位置。菜单栏相对于程序窗口的位置可以是以下 MsoBarPosition 常量属性之一:msoBarLeftmsoBarTopmsoBarRightmsoBarBottommsoBarFloatingmsoBarPopup(用于创建快捷菜单)或 msoBarMenuBar(仅用于 Apple Macintosh)。

    Visible

    定控件是可见的指,还是隐藏的。

    4.1 Add方法应用于CommandBars对象

    新建一个命令栏并添加到命令栏集合。返回 CommandBar 对象。

    expression.Add ( Name , Position , MenuBar , Temporary )

    l        expression必需。该表达式返回一个 CommandBars 对象。

    l        NameVariant 类型)可选。新命令栏的名称。如果忽略该参数,则为命令栏指定默认名称(例如:Custom 1)。

    l       PositionVariant 类型)可选。新命令栏的位置或类型。可以为下表所列的 MsoBarPosition 常量之一。

    常量

    说明

    msoBarLeftmsoBarTopmsoBarRight msoBarBottom

    指定新命令栏的左侧、顶部、右侧和底部坐标

    msoBarFloating

    指定新命令栏不固定

    msoBarPopup

    指定新命令栏为快捷菜单

    msoBarMenuBar

    仅适用于 Macintosh 

     

    l         MenuBar  (Variant类型)可选。设置为 True 将以新命令栏替换活动菜单栏。默认值为 False

    l         Temporary  (Variant类型)可选。设置为 True 将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删除。默认值为 False

    4.2返回命令栏控件的 ID

    以下代码示例返回活动菜单栏的 ID

    Sub Id_Control ()

    Dim myId as Object

       Set myId = CommandBars("Worksheet Menu Bar").Controls("工具(&T)")

       MsgBox myId.Caption & Chr(13) & MyId.Id

    End Sub

    4.3确定活动菜单栏的名称

    以下代码示例返回活动菜单栏的名称:

    Sub MenuBars_GetName()

       MsgBox CommandBars.ActiveMenuBar.Name

    End Sub

    4.4保存(内置或自定义菜单栏的)活动状态

    您可能需要将 originalMenuBar 变量声明为公共变量,这样,子例程就可以在其他子例程(如 Auto_Close 子例程)中使用该变量。以这种方式声明和使用该变量会将用户的上一个菜单栏重置为初始状态。以下示例宏重置菜单栏:

    Public originalMenuBar as Object

    Sub MenuBars_Capture()

       Set originalMenuBar = CommandBars.ActiveMenuBar

    End Sub

    4.5创建自定义命令栏

    以下代码示例创建名为 My Command Bar 的自定义命令栏:

    Sub MenuBar_Create()

    Application.CommandBars.Add Name:="My command bar"

    End Sub

    您还可以通过使用 Temporary:=True 参数来创建自定义命令栏。Temporary:=True 参数允许命令栏在您退出Excel 时自动重置。以下代码使用 Temporary:=True 参数创建自定义命令栏:

    Sub MenuBar_Create()

    Application.CommandBars.Add Name:="My command bar", Temporary:=True

    End Sub

    4.6显示自定义命令栏

    以下示例创建并显示自定义的“My Custom Bar”菜单栏,然后用它替换内置的菜单栏:

    Sub MenuBar_Show()

    Dim myNewBar As Object

       Set myNewBar = CommandBars.Add(Name:="Custom1", Position:=msoBarFloating)

       '您必须先启用您的自定义菜单栏,然后看见它。

       '使菜单栏添加到自定义对话框列表中的可用菜单栏上。

    '设置菜单属性设置为True取代内置的菜单栏。

       myNewBar.Enabled = True

       myNewBar.Visible = True

    End Sub

    4.7删除自定义命令栏

    以下代码示例删除名为“Custom 1”的自定义菜单栏:

    Sub MenuBar_Delete()

       CommandBars("Custom1").Delete

    End Sub

    4.8隐藏命令栏

    以下代码示例从可用菜单栏列表中删除内置“图表”菜单栏:

    Sub MenuBar_Display()

       CommandBars("Chart").Enabled = False

    End Sub

    4.9显示命令栏

    以下代码示例从可用菜单栏中添加内置“图表”菜单栏:

    Sub MenuBar_Display()

       CommandBars("Chart").Enabled = True

    End Sub

    4.10还原内置命令栏

    还原菜单栏会重置(菜单和菜单项的)默认控件。示例代码还原内置“图表”菜单栏:

    Sub MenuBar_Restore()

       CommandBars("Chart").Reset

    End Sub

    注意:您只能重置内置菜单栏,不能重置自定义菜单栏。

     

     

    五、菜单

    5.1 Add方法用于CommandBarControls对象

    新建一个 CommandBarControl 对象并添加到指定命令栏上的控件集合。

    Expression.Add ( Type , Id , Parameter , Before , Temporary )

    l         expression必需。该表达式返回一个 CommandBarControls 对象。

    l         TypeVariant类型)可选。添加到指定命令栏的控件类型。可以为下列 MsoControlType常量之一:

    常量

    说明

    msoControlButton

    命令按钮

    msoControlEdit

    文本框

    msoControlDropdown

    下拉列表

    msoControlComboBox

    组合框

    msoControlPopup

    弹出菜单

    l         Id Variant 类型)可选。指定内置控件的整数。如果该参数为,或者忽略该参数,将在命令栏中添加一个空的指定类型的自定义控件。

    l         Parameter Variant 类型)可选。对于内置控件,该参数用于容器应用程序运行命令。对于自定义控件,可以使用该参数向 Visual Basic 过程传递信息,或用其存储控件信息(类似于第二个 Tag 属性值)。

    l         BeforeVariant 类型)可选。表示新控件在命令栏上位置的数字。新控件将插入到该位置控件之前。如果忽略该参数,控件将添加到指定命令栏的末端。

    l         TemporaryVariant 类型)可选。设置为True 将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删除。默认值为 False

    5.2向命令栏添加自定义菜单控件

    以下代码示例将您通过编程方式添加的菜单名称添加到“工作表”菜单栏中。例如,此代码会将菜单名称“New Menu”添加到“工作表”菜单栏中。

    注意:您可以根据需要为该菜单指定任何名称。

    Sub Menu_Create()

    Dim myMnu As Object

       Set myMnu = CommandBars("Worksheet menu bar").Controls. _

          Add(Type:=msoControlPopup, before:=3)

       With myMnu

       ' "&" 用以指定快捷键字符 (相当于Alt+M).

          .Caption = "New &Menu"

       End With

    End Sub

    5.3禁用命令栏上的菜单控件

    禁用的菜单控件在命令栏中显示为灰色,并且不可用。以下示例禁用“New Menu”菜单:

    Sub Menu_Disable()

       CommandBars("Worksheet menu bar").Controls("New &Menu").Enabled = False

    End Sub

    5.4启用命令栏上的菜单控件

    以下代码示例启用您在“禁用命令栏上的菜单控件”一节中禁用的 New Menu 菜单:

    Sub Menu_Disable()

       CommandBars("Worksheet menu bar").Controls("New &Menu").Enabled = True

    End Sub

    5.5删除命令栏上的菜单控件

    以下代码示例从“工作表”菜单栏中删除您在“向命令栏添加自定义菜单控件”一节中创建的“New Menu”菜单:

    Sub Menu_Delete()

       CommandBars("Worksheet menu bar").Controls("New &Menu").Delete

    End Sub

    5.6还原命令栏上的菜单控件

    以下代码示例还原“工作表”菜单栏上的内置“图表”菜单栏:

    Sub Menu_Restore()

    Dim myMnu As Object

       Set myMnu = CommandBars("Chart")

       myMnu.Reset

    End Sub

     

    六、命令

    可以对命令进行的修改与控件的类型有关。一般来说,按钮要么被启用,要么被隐藏。而编辑框、下拉列表框和组合框较为灵活一些,因为您可以在列表中添加或删除项目。另外,还可以通过查看在列表中选中的项目的值来确定执行的操作。您可以将任何控件的操作更改为内置函数或自定义函数。

    下表列出了最常见的控件属性和更改控件的状态、操作或内容的方法:

    属性或方法

    用途

    Add

    向命令栏添加命令。

    AddItem

    向下拉列表框或组合框的下拉列表部分添加项目。

    Style

    指定按钮上是显示图标还是显示标题。

    OnAction

    指定用户更改控件值时所运行的过程。

    Visible

    指定控件是可见的,还是隐藏的。

    要了解有关 Excel 2003  Excel 2002 中菜单的更多信息,请按照下列步骤操作:

    1. 启动 Visual Basic 脚本编辑器。

    2. 在“帮助”菜单上,单击“Microsoft Visual Basic 帮助”。

    3. 在“搜索帮助”框中,键入菜单,然后按 Enter

    4. 单击“添加和管理菜单栏和菜单项 (Office)”。

    6.1向菜单控件添加分隔条

    以下代码示例在“插入”菜单上的工作表命令之前添加分隔条:

    Sub menuItem_AddSeparator()

       CommandBars("Worksheet menu bar").Controls("插入(&I)") _

       .Controls("工作表(&W)").BeginGroup = True

    End Sub

    注意:要删除分隔条,请将 BeginGroup 属性设置为 False

    6.2在菜单上创建自定义命令控件

    以下代码示例在“工作表”菜单栏的“工具”菜单上创建名为 Custom1 的新命令,然后,当您单击“Custom1”时,它将运行 Code_Custom1 宏:

    Sub menuItem_Create()

       With CommandBars("Worksheet menu bar").Controls("工具(&T)")

          .Controls.Add(Type:=msoControlButton, Before:=1).Caption = "Custom1"

          .Controls("Custom1").OnAction = "Code_Custom1"

       End With

    End Sub

    6.3在命令控件旁放置选中标记

    以下代码示例在 Custom1 命令未选中的情况下在其旁边放置一个选中标记;如果 Custom1 命令已选中,则将删除该选中标记:

    Sub menuItem_checkMark()

    Dim myPopup as Object

       Set myPopup = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       If myPopup.Controls("Custom1").State = msoButtonDown Then

          ' 删除选中标记旁边的菜单项。

          myPopup.Controls("Custom1").State = msoButtonUp

          MsgBox "Custom1 is now unchecked"

          Else

            '添加复选标记旁边的菜单项。

             myPopup.Controls("Custom1").State = msoButtonDown

             MsgBox "Custom1 is now checked"

        End If

    End Sub

    6.4禁用命令栏上的命令控件

    以下代码示例禁用您在“在菜单上创建自定义命令控件”一节中在“工具”菜单上创建的 Custom1 命令:

    Sub MenuItem_Disable()

    Dim myCmd as Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       myCmd.Controls("Custom1").Enabled = False

    End Sub

    6.5启用命令栏上的命令控件

    以下代码示例启用您在“禁用命令栏上的命令控件”一节中禁用的 Custom1 命令:

    Sub MenuItem_Enable()

    Dim myCmd as Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       myCmd.Controls("Custom1").Enabled = True

    End Sub

    6.6删除菜单上的命令控件

    以下代码示例删除“文件”菜单上的“保存”命令:

    Sub menuItem_Delete()

    Dim myCmd As Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("文件(&F)")

       myCmd.Controls("保存(&S)").Delete

    End Sub

    6.7还原菜单上的内置命令控件

    要还原菜单上的命令控件,必须知道该控件的标识 (ID) 号。要确定 ID 号,请参见“返回命令栏控件的ID”一节。以下示例先删除您在“删除菜单上的命令控件”一节中删除的“保存”命令,然后又将其还原:

    Sub menuItem_Restore()

    Dim myCmd As Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("文件(&F)")

       ' Id 3 为保存子菜单项ID.

       myCmd.Controls.Add Type:=msoControlButton, ID:=3, Before:=5

    End Sub

     

    七、子菜单

    当您单击某个命令时,父菜单的一侧会出现子菜单。作为子菜单控件的命令在其名称右边有一个黑色小箭头。

    7.1添加子菜单

    以下代码示例向“工作表”菜单栏上的“工具”菜单添加名为“NewSub”的新子菜单:

    Sub SubMenu_Create()

    Dim newSub as Object

       Set newSub = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       With newSub

          .Controls.Add(Type:=msoControlPopup, Before:=1).Caption="NewSub"

       End With

    End Sub

    7.2向子菜单添加命令

    以下代码示例向“NewSub”子菜单添加名为“SubItem1”的新命令,然后,当您单击“SubItem1”时,它将运行 Code_SubItem1 宏:

    Sub SubMenu_AddItem()

    Dim newSubItem as Object

       Set newSubItem = CommandBars("Worksheet menu bar") _

       .Controls("工具(&T)").Controls("NewSub")

       With newSubItem

          .Controls.Add(Type:=msoControlButton, Before:=1).Caption = "SubItem1"

          .Controls("SubItem1").OnAction = "Code_SubItem1"

       End With

    End Sub

    7.3禁用子菜单上的命令控件

    以下代码示例禁用您在“向子菜单添加命令”一节中创建的 SubItem 命令:

    Sub SubMenu_DisableItem()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Controls("SubItem1").Enabled = False

    End Sub

     

    以下代码示例启用同一 SubItem 命令:

    Sub SubMenu_DisableItem()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Controls("SubItem1").Enabled = True

    End Sub

    7.4删除子菜单上的命令

    以下示例删除您在“向子菜单添加命令”一节中在“NewSub”子菜单上创建的 SubItem1 命令:

    Sub SubMenu_DeleteItem()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Controls("SubItem1").Delete

    End Sub

    7.5禁用子菜单控件

    以下代码示例禁用您在“添加子菜单”一节中在“工具”菜单上创建的“NewSub”子菜单:

    Sub SubMenu_DisableSub()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Enabled = False

    End Sub

    注意:要启用已禁用的控件,请将 Enabled 属性设置为 True

    7.6删除子菜单控件

    以下代码示例删除您在“添加子菜单”一节中在“工具”菜单上创建的“NewSub”子菜单:

    Sub SubMenu_DeleteSub()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Delete

    End Sub

     

    八、快捷菜单栏

    快捷菜单是在用户右键单击某个对象时出现的浮动命令栏。快捷菜单栏可以包含与命令栏相同的控件类型,而这些控件的作用也和命令栏上控件的作用相同。在大多数程序中,您无法从程序界面创建或修改快捷菜单,因而必须在运行时创建和修改快捷菜单。

    要获取有关Excel 2002Excel 2003中的快捷菜单的更多信息,请按照下列步骤操作:

    1. 启动 Visual Basic 脚本编辑器。

    2. 在“帮助”菜单上,单击“Microsoft Visual Basic 帮助”。

    3. 在“搜索帮助”框中,键入快捷方式,然后按 Enter

    4. 单击“添加和显示快捷菜单”。

    8.1新建快捷菜单栏

    以下代码示例创建名为“myShortcutBar”的快捷菜单栏:

    Sub Shortcut_Create()

    Dim myShtCtBar as Object

       Set myShtCtBar = CommandBars.Add(Name:="myShortcutBar", _

       Position:=msoBarPopup)

       这显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标.

       myShtCtBar.ShowPopup 200,200

    End Sub

    注意:由于没有添加任何控件(菜单项或子菜单),因此快捷菜单栏出现时是空的。

    九、快捷菜单

    当您右键单击特定的 Excel 对象时会出现快捷菜单栏。Excel 有很多快捷菜单栏,其中包含各种菜单。您还可以创建自定义快捷菜单栏和自定义内置菜单栏。

    9.1在快捷菜单栏上创建命令

    以下代码示例在“myShortcutBar”快捷菜单栏上创建名为 Item1 的新菜单命令。当您单击“Item1”时,它将运行 Code_Item1 宏:

    Sub Shortcut_AddItem()

    Dim myBar as Object

       Set myBar = CommandBars("myShortcutBar")

       With myBar

          .Controls.Add (Type:=msoControlButton, before:=1).Caption = "Item1"

          .Controls("Item1").OnAction = "Code_Item1"

       End With

       myBar.ShowPopup 200,200

    End Sub

    9.2禁用快捷菜单栏上的命令控件

    以下代码示例禁用您在“创建快捷菜单上的命令”一节中创建的 Item1 命令:

    Sub Shortcut_DisableItem()

       Set myBar = CommandBars("myShortcutBar")

       myBar.Controls("Item1").Enabled = False

       myBar.ShowPopup 200,200

    End Sub

    注意:要启用已禁用的项目,请将 Enabled 属性设置为 True

    9.3删除快捷菜单栏上的命令

    以下代码示例删除“myShortcutBar”快捷菜单栏上的名为 Item1 的菜单命令:

    Sub Shortcut_DeleteItem()

       Set myBar = CommandBars("myShortcutBar")

       myBar.Controls("Item1").Delete

       myBar.ShowPopup 200,200

    End Sub

    9.4删除快捷菜单栏

    删除快捷菜单栏将导致删除所有菜单项。您无法还原已删除的自定义菜单栏。要还原它,必须重新创建该菜单栏及其所有菜单项和子菜单。

    以下代码示例删除您在“在快捷菜单栏上创建命令”一节中创建的“myShortCutBar”快捷菜单栏:

    Sub Shortcut_DeleteShortCutBar()

       CommandBars("MyShortCutBar").Delete

    End Sub

    9.5还原内置快捷菜单栏上的命令

    以下代码示例还原工作表“单元格”快捷菜单栏上的默认命令:

    Sub Shortcut_RestoreItem()

       CommandBars("Cell").Reset

    End Sub

     

    十、快捷菜单上的子菜单

    可以在快捷菜单栏上创建子菜单。当您单击某个命令控件时,父菜单的一侧会出现子菜单。作为子菜单控件的命令在其名称右边有一个黑色小箭头。

    10.1在快捷菜单栏上新建子菜单

    以下示例在工作表“单元格”快捷菜单上添加名为“NewSub”的新子菜单:

    Sub ShortcutSub_Create()

       CommandBars("Cell").Controls.Add(Type:=msoControlPopup, before:=1) _

       .Caption = "NewSub"

        '显示快捷菜单栏。

        ' 200, 200指的是屏幕上的位置的像素为XY坐标。

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    注意:由于没有添加任何菜单项,因此该子菜单为空。

    10.2在快捷菜单栏的子菜单上创建命令控件

    下面的宏向您在“单元格”快捷菜单上创建的子菜单“NewSub”中添加 SubItem1 命令。然后,当您单击“SubItem1”时,它将运行 Code_SubItem1 宏:

    Sub ShortcutSub_AddItem()

    Dim newSubItem as Object

       Set newSubItem = CommandBars("Cell").Controls("NewSub”)

       With newSubItem

          .Controls.Add(Type:=msoControlButton, before:=1).Caption = "subItem1"

          '点击时subItem1 将运行Code_SubItem1宏。

          .Controls("subItem1").OnAction = "Code_SubItem1"

       End With

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

     

    10.3禁用快捷菜单上的子菜单项控件

    以下代码示例禁用“NewSub”子菜单上的 SubItem1 命令:

    Sub ShortcutSub_DisableItem()

       CommandBars("Cell").Controls("NewSub") _

       .Controls("subItem1").Enabled = False

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    注意:要启用已禁用的项目,请将 Enabled 属性设置为 True

    10.4删除快捷菜单上的子菜单项控件

    以下示例删除“NewSub”子菜单上的 SubItem1 命令:

    Sub ShortcutSub_DeleteItem()

       CommandBars("Cell").Controls("NewSub").Controls("subItem1").Delete

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    10.5禁用快捷菜单上的子菜单控件

    以下代码示例禁用“单元格”快捷菜单栏上的“NewSub”子菜单:

    Sub ShortcutSub_DisableSub()

       CommandBars("Cell").Controls("NewSub").Enabled = False

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    注意:要启用已禁用的项目,请将 Enabled 属性设置为 True

    10.6删除快捷菜单上的子菜单控件

    以下代码示例删除您在“单元格”快捷菜单栏上创建的“NewSub”子菜单:

    Sub ShortcutSub_DeleteSub()

       CommandBars("Cell").Controls("NewSub").Delete

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    展开全文
  • vba自定义菜单和菜单栏Annoyedthat Windows 10 gives you only one setting to change the color of thetaskbar, Start menu, and Action Center all at once? There’s no way to change each color individually, ...
    vba自定义菜单和菜单栏

    vba自定义菜单和菜单栏

    sab_top

    Annoyed that Windows 10 gives you only one setting to change the color of the taskbar, Start menu, and Action Center all at once? There’s no way to change each color individually, but we’ve got a quick Registry hack that will get you part of the way there.

    Windows 10仅提供一种设置来一次更改任务栏,“开始”菜单和“操作中心”的颜色,这让您感到烦恼吗? 没有办法单独更改每种颜色,但是我们有一个快速的Registry hack,可以帮助您融入其中。

    For whatever reason, the Windows 10 Personalization options provide a single option to use an accent color on your taskbar, Start menu, and Action Center all at once instead of letting you choose a color for each. You can apply the color to the title bar of active windows as a separate option and, with another quick Registry hack, even change the color of inactive windows if you want to. But if you’d like keep a black background on your Start menu and Action Center while still using your accent color for your taskbar and window title bars, then read on.

    无论出于何种原因, Windows 10个性化选项都提供了一个选项,可以一次在任务栏,“开始”菜单和“操作中心”上使用强调色,而不必为每种颜色选择一种颜色。 您可以将颜色作为单独的选项应用到活动窗口的标题栏,并且可以通过另一种快速的注册表技巧,甚至根据需要更改非活动窗口的颜色 。 但是,如果您想在“开始”菜单和“操作中心”上保留黑色背景,同时仍将重点色用于任务栏和窗口标题栏,请继续阅读。

    通过编辑注册表使“开始”菜单和操作中心背景保持黑色 (Keep the Start Menu and Action Center Backgrounds Black by Editing the Registry)

    To keep your Start Menu and Action Center backgrounds black, you just need to make an adjustment to one setting in the Windows Registry. Before you get started with the edit, though, go ahead and set your personalization options. Head to Settings > Personalization > Colors. Pick an accent color and turn on at least the “Show color on Start, taskbar, and action center” option.

    要使“开始菜单”和“操作中心”背景保持黑色,您只需要对Windows注册表中的一项设置进行调整。 不过,在开始编辑之前,请继续并设置个性化选项。 转到设置>个性化>颜色。 选择一种强调色,并至少打开“在“开始”,任务栏和操作中心上显示颜色”选项。

    sab_a

    With that done, you’re ready to head into the Registry.

    完成此操作后,您就可以进入注册表了。

    Standard warning: Registry Editor is a powerful tool and misusing it can render your system unstable or even inoperable. This is a pretty simple hack and as long as you stick to the instructions, you shouldn’t have any problems. That said, if you’ve never worked with it before, consider reading about how to use the Registry Editor before you get started. And definitely back up the Registry (and your computer!) before making changes.

    标准警告:注册表编辑器是一个功能强大的工具,滥用它会使您的系统不稳定甚至无法运行。 这是一个非常简单的技巧,只要您按照说明进行操作,就不会有任何问题。 也就是说,如果您以前从未使用过它,请在开始之前考虑阅读有关如何使用注册表编辑器的信息 。 并在进行更改之前一定要备份注册表 (和您的计算机 !)。

    Open the Registry Editor by hitting Start and typing “regedit.” Press Enter to open Registry Editor and give it permission to make changes to your PC.

    通过单击开始并键入“ regedit”来打开注册表编辑器。 按Enter键打开注册表编辑器,并授予其对PC进行更改的权限。

    sab_1

    In the Registry Editor, use the left sidebar to navigate to the following key:

    在注册表编辑器中,使用左侧边栏导航至以下键:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize
    
    sab_2

    On the right side, double-click the ColorPrevalence value to open its properties window.

    在右侧,双击ColorPrevalence值以打开其属性窗口。

    sab_3

    In the value’s properties window, change the value to 3 in the “Value data” box and then click “OK.”

    在值的属性窗口中,在“值数据”框中将值更改为3,然后单击“确定”。

    sab_4

    And you can now close Registry Editor. You won’t need to restart your computer or anything. The changes should be immediate, so just pop open your Start menu or Action Center to make sure the backgrounds are black.

    现在,您可以关闭注册表编辑器。 您无需重新启动计算机或任何其他操作。 更改应该是立即的,因此只需弹出打开“开始”菜单或“操作中心”以确保背景为黑色即可。

    You’ll want to be careful about changing Personalization options after you make this setting. You won’t break anything, but you may reset that Registry value and have to change it again. It works like this:

    进行此设置后,您在更改“个性化”选项时要格外小心。 您不会破坏任何内容,但是可以重置该注册表值,然后再次进行更改。 它是这样的:

    • You can change your accent color any time you want. Doing so will not affect the Registry setting.

      您可以随时更改您的装饰色。 这样做不会影响注册表设置。
    • You can turn on or off the “Show color on title bar” setting without affecting the Registry setting.

      您可以打开或关闭“在标题栏上显示颜色”设置,而不会影响注册表设置。
    • If you turn off the “Show color on Start, taskbar, and action center” setting, the ColorPrevalence value will get set to 0 and all three items will be black. If you turn the option back on, the ColorPrevalence value gets set to 1 and all three items will feature your accent color. You’ll have to go back and set the value to 3 in the Registry again to get the black backgrounds back on your Start menu and Action Center.

      如果关闭“在“开始”,任务栏和操作中心上显示颜色”设置,则ColorPrevalence值将设置为0,并且所有三个项目均为黑色。 如果重新打开该选项,则ColorPrevalence值将设置为1,并且所有三个项目都将具有您的强调色。 您必须返回并再次在注册表中将该值设置为3,才能在“开始”菜单和“操作中心”上重新获得黑色背景。

    Of course, this also means that if you don’t like the setting you’ve made in the Registry, you don’t have to return to the Registry to reset it. You only have to go change that option in your Personalization settings.

    当然,这也意味着,如果您不喜欢在注册表中进行的设置,则不必返回注册表即可将其重置。 您只需要在“个性化设置”中更改该选项。

    下载我们的一键式注册表黑客 (Download Our One-Click Registry Hacks)

    sab_5

    If you don’t feel like diving into the Registry yourself, we’ve created a couple of registry hacks you can use. The “Make Start and Action Center Black” hack changes the ColorPrevalence value to 3. The “Restore Start and Action Center Backgrounds” hack sets the value back to 1. Both hacks are included in the following ZIP file. Double-click the one you want to use and click through the prompts. When you’ve applied the hack you want, restart your computer or toggle one of the color settings to force the change.

    如果您不想自己进入注册表,我们已经创建了两个可以使用的注册表黑客。 “使启动和操作中心为黑色” hack将ColorPrevalence值更改为3。“恢复启动和操作中心背景”为hack的值设置为1。这两个hack都包含在以下ZIP文件中。 双击您要使用的一个,然后单击提示。 应用所需的技巧后,请重新启动计算机或切换颜色设置之一以强制进行更改。

    Start and Action Center Background Hacks

    启动和操作中心背景黑客

    These hacks are really just the Personalize  subkey, stripped down to the ColorPrevalence value we talked about in the previous section and then exported to a .REG file. Running either of the hacks sets that value to the appropriate number.  And if you enjoy fiddling with the Registry, it’s worth taking the time to learn how to make your own Registry hacks.

    这些技巧实际上只是Personalize子项,被简化为上一节中讨论的ColorPrevalence值,然后导出到.REG文件。 运行任何一个hack都会将该值设置为适当的数字。 而且,如果您喜欢使用注册表,则值得花时间学习如何制作自己的注册表黑客

    翻译自: https://www.howtogeek.com/270777/how-to-keep-windows-10s-start-menu-and-action-center-black-while-using-a-custom-accent-color/

    vba自定义菜单和菜单栏

    展开全文
  • excel中用vba加载宏添加菜单和按钮

    千次阅读 2013-05-30 11:27:39
    ‘auto_open方法 文件打开后自动运行 一般放在加载宏文件里(.xla) ’每次使用运行xla文件 就能添加自己设计好的菜单和按钮 Private Sub Auto_Open()  Set cmbar = Application.CommandBars("Worksheet Menu ...

    ‘auto_open方法 文件打开后自动运行 一般放在加载宏文件里(.xla)

    ’每次使用运行xla文件  就能添加自己设计好的菜单和按钮

    Private Sub Auto_Open()
        Set cmbar = Application.CommandBars("Worksheet Menu Bar")
        Set Menu = cmbar.Controls.Add(Type:=msoControlPopup)
        Menu.Caption = "menuName"

        '添加下拉菜单和按钮--------------------------------------------
         With Menu.Controls.Add(Type:=msoControlButton)
                .Caption = "buttonName"
                .OnAction = "buttonAction"
        End With
        With Menu.Controls.Add(Type:=msoControlButton)
                .Caption = "buttonName"
                .OnAction = "buttonAction"
        End With

        '直接添加按钮---------------------------------------------------

        Set btn = cmbar.Controls.Add(Before:=1)
        With btn
         .Caption = "buttonName"
         .Visible = True
         .Width = 70
         .OnAction = "buttonAction"
         .Style = msoButtonIconAndCaption
    End With

    End Sub

    展开全文
  • Sub delMbar() Dim mxlb As String mxlb = Environ("appdata") & "\microsoft\excel\*.xlb" If Dir(mxlb) <> "" Then Kill mxlb End If End Sub
  • EXCEL VBA自定义菜单

    2009-05-05 17:37:00
    怎么自定义一个按钮?首先要确保要更改的工具栏是可见的,再单击“工具栏选项”箭头指向“添加或删除按钮”或用右击...和自定义按钮是差不多的,只是最后一步的操作是将“自定义菜单项”拖拉到你需要的工具栏的位置...
  • VBA 自定义函数

    2013-06-12 21:50:46
    二、自定义函数自定义函数是用户自己编写的函数;一个自定义函数就是一个function过程;编写了一个function过程就相当于编写了一个自定义函数。三、为什么要创建自定义函数1.简化工作,解决需要较多辅助列或使用较长...
  • VBA 创建和使用加载

    千次阅读 2020-08-24 21:58:06
    今天讲点新的东西——创建和使用加载项,不过内容会有点无聊,因为都是文字内容 一、什么是加载项 最有用的功能之一,增加了工作的专业度,提供了一些关键优势。+ 1.和标准工作簿的比较 所有工作簿文件都可以...
  • VBA加载宏基础

    千次阅读 2010-07-04 22:09:00
    一、简介 <br />加载宏可以扩展Excel的功能,与Excel的内置功能一致,是为Excel提供自定义命令或自定义功能的补充程序。某些加载宏还提供了可用于公式中的新的工作表函数。 <br />使用某加载宏必须...
  • VBA加载宏制作攻略

    千次阅读 2013-05-14 20:25:07
    本文所述加载宏是指使用EXCEL VBA制作的加载宏,这类文件的后缀默认为xla,因此又称XLA加载宏。内容划分为五部分,第一部分为概述,简单介绍加载宏的一般知识;第二部分至第四部分介绍制作加载宏函数、过程和事件...
  • 将该xlsm文档保存成xlam(加载宏)后,即可在别的Excel中加载使用。 总结一下,自定义Excel的功能区有以下一些步骤: 1、编写宏,将带有宏的Excel文档保存成xlsm文件; 2、customUI/images文件夹中放入图标...
  • 加载宏

    千次阅读 2014-07-28 14:58:06
    Office VBA Addin加载宏是一种使用VBA编写的程序,它通过加载设置,可以随Office程序启动而自动加载运行,是制作Excel自定义函数、Office菜单和功能区按钮、添加常用辅助功能的常用载体。 在Excel、PPT中都可以编制...
  • VBA自定义工具栏按钮制作方法

    千次阅读 2011-04-02 10:26:27
    在 Excel 中点击菜单 “工具” → “自定义” ,在弹出的对话框中选择 “命令”栏,在左边的“类别”框中选择“”,在右边的“命令”框中左键拖动“自定义按钮”到任意一个工具栏上(自己觉得方便的位置上即可),...
  • 我从论坛找了段代码对我的这种情况比较实用 Sub delMbar() Dim mxlb As String mxlb = Environ("appdata") & "\microsoft\excel\*.xlb" If Dir(mxlb) <> "" Then ...如果只是想暂时关闭的话,从加载项管理
  • AutoCAD VBA添加菜单

    2019-05-31 21:53:00
    # 给cad添加自定义菜单 1 Private Sub AddBar() 2 Dim NewMenuItem As AcadPopupMenuItem 3 Dim TheMacro As String 4 Dim MI As Integer 5 6 On Error Resume Next 7 Dim ...
  • Office由于提供了VBA,为大家开发一些定制功能提供了一种途径。但是如何实现工具栏中的命令与进行绑定,对于初学则来说是一个不小的门槛。  今天,给大家介绍一下在Excel里写完后,如何通过自动生成工具栏。 ...
  • Excel将写好的VBA嵌入菜单

    千次阅读 2018-11-14 16:11:49
    VBA嵌入菜单
  • VBA加载宏求地图分幅 excel有很丰富的功能,而office中的vba更是赋予了其更强大的功能。小白刚学习vba一个月,最近正好遇到了到了地理信息系统考试,其中要考一道地图分幅的题,便用vba做了一个加载宏来应付考试。...
  • Excel VBA 用代码实现自定义功能区写在前面的自定义功能区的实现实现可移植自定义功能区的过程 写在前面的 最近用vba编辑Excel自定义功能区,试了很多办法,看了很多文章,过程都很复杂,实现起来难度也比较大。但...
  • 如何将Mindjet的放到自定义功能区

    千次阅读 2015-05-02 14:51:00
    如何将Mindjet的放到自定义功能区虽然很早就接触了思维软件Mindjet Manager,但最近才用得比较频繁。现在软件已发布到Mindjet15版,官方原版终于支持中文了,但我还是比较习惯11版,原因很简单,15版还没有破解。...
  • 加载宏(Addin)使用方法

    千次阅读 2013-05-06 10:18:53
    Office VBA Addin加载宏是一种使用VBA编写的程序,它通过加载设置,可以随Office程序启动而自动加载运行,是制作Excel自定义函数、Office菜单和功能区按钮、添加常用辅助功能的常用载体。 在Excel、PPT中都可以编制...
  • 花了几个小时,终于找到守柔同学经年老贴:在菜单栏增加自定义按钮以触发运行加载宏 另外,对自定义按钮图标FaceID感兴趣的同学可以自行生成所有编号的图标,以便选择自己喜欢的样式:遍历并生成FaceID PPT2013双击...
  • 本帖最后由 fxl447098457 于 2018-12-22 10:41 编辑今天讲一下怎么在vba里面使用python的自定义函数。在vba板块提下python主要是python的包很多。对于我们来说,直接拿轮子过来用用肯定是很好的事情,复杂的原理,背后...
  • Excel VBA):添加

    2017-02-02 13:57:00
    1、编写,打开VBA,双击ThisWorkbook对当前工作薄进行编写;双击Sheet1,对整个sheet编写; 或者创建模块,在模块里,编写、调试代码。 打开VBA的方法见第一讲,结合常用窗口进行编写、调试。 2、部分对象有...
  • AuToCAD启动自定义加载程序研究(转) AuToCAD启动自定义加载程序研究(转) 2009年06月02日 星期二 下午 12:28 CAD文件加载顺序: acad2006.lsp (AutoCAD使用)  acad.rx (用户...
  • 在Excel或WPS表格中要使用VBA需要先打开“开发工具”菜单,打开方式请在网上度一下: 点击“开发工具”菜单,在“开发工具”工具栏上点击“VB编辑器”: 在“VB编辑器”内添加一模块文件(名称任意),在代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,338
精华内容 535
关键字:

vba自定义菜单加载宏