×

modifymenu 错误

modifymenu(EXCEL运行VB宏定义时产生错误“5”)

admin admin 发表于2023-09-16 17:39:51 浏览32 评论0

抢沙发发表评论

本文目录

EXCEL运行VB宏定义时产生错误“5”

’CommandBars(“Worksheet Menu Bar“).Controls(1).Controls(3).Delete’CommandBars(“Worksheet Menu Bar“).Controls(1).Controls(7).Delete‘小心上面的操作是删除我没有调试,如果你只是不用的话不如用Visible = FalsePrivate Declare Function RegOpenKeyEx Lib “advapi32.dll“ Alias “RegOpenKeyExA“ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As LongPrivate Declare Function RegQueryValueEx Lib “advapi32.dll“ Alias “RegQueryValueExA“ (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Any, ByRef lpcbData As Long) As Long ’ Note that if you declare the lpData parameter as String, you must pass it By Value.Private Declare Function RegOpenKey Lib “advapi32.dll“ Alias “RegOpenKeyA“ (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongPrivate Declare Function RegCloseKey Lib “advapi32.dll“ (ByVal hKey As Long) As LongPrivate Const HKEY_LOCAL_MACHINE = &H80000002Sub ModifyMenu()Dim str, strBuffer As StringDim hKeyBinPath As LongDim lngResult, cb As LongCommandBars(“Worksheet Menu Bar“).Enabled = TrueCommandBars(“Worksheet Menu Bar“).Visible = TrueCommandBars(“Worksheet Menu Bar“).Reset’CommandBars(“Worksheet Menu Bar“).Controls(1).Controls(3).Delete’CommandBars(“Worksheet Menu Bar“).Controls(1).Controls(7).DeleteCommandBars(“Worksheet Menu Bar“).Controls(1).Controls(3).Visible = FalseCommandBars(“Worksheet Menu Bar“).Controls(1).Controls(7).Visible = FalseCommandBars(“Standard“).Enabled = TrueCommandBars(“Standard“).Visible = True’CommandBars(“Standard“).ResetCommandBars(“Visual Basic“).Enabled = TrueCommandBars(“Visual Basic“).Visible = TrueCommandBars(“Visual Basic“).Reset’ find registry keystrKey = “bin“lngResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _ “Software\Baker Atlas\CASE“, _ 0, KEY_ALL_ACCESS, hKeyBinPath) If 0 = lngResult Then ’ read value strBuffer = Space(255) cb = Len(strBuffer) lngResult = RegQueryValueEx(hKeyBinPath, _ strKey, 0, REG_EXPAND_SZ, ByVal strBuffer, cb) If 0 = lngResult Then str = Left(strBuffer, cb - 1) End If End IfstrCasePath$ = str + “\“strSaveFileAction$ = strCasePath$ + “Macros.xls!SaveFile.SaveFile“Set cstmSave = CommandBars(“Worksheet Menu Bar“).Controls(1).Controls.Add(Type:=msoControlButton, Before:=2)With cstmSave.Caption = “Save As “ + strCasePath$ + “Text1.csv and update XTF“.OnAction = strSaveFileAction$End WithEnd Sub调试通过,另附对应名称ID表菜单栏各个IDID,名称1,文件(&F)2,(&E)3,视图(&V)4,插入(&I)5,格式(&O)6,工具(&T)7,数据(&D)8,操作(&C)9,窗口(&W)10,帮助(&H)文件菜单-ID与名称1,新建(&N)...2,打开(&O)...3,关闭(&C)4,保存(&S)5,另存为(&A)...6,另存为网页(&G)...7,保存工作区(&W)...8,文件搜索(&H)...9,权限(&M)...10,权限(&M)11,签出(&E)12,签入(&E)...13,版本记录(&R)...14,网页预览(&B)15,页面设置(&U)...16,打印区域(&T)17,打印预览(&V)18,打印(&P)...19,发送(&D)20,属性(&I)21,此处为最近所用文件的名称(&R)22,此处为最近所用文件的名称(&R)23,此处为最近所用文件的名称(&R)24,此处为最近所用文件的名称(&R)25,此处为最近所用文件的名称(&R)26,此处为最近所用文件的名称(&R)27,此处为最近所用文件的名称(&R)28,此处为最近所用文件的名称(&R)29,此处为最近所用文件的名称(&R)30,签出(&T)31,退出(&X)

delphi菜单项

通常在应用程序的主窗体中,利用鼠标左键点击左上角的图标,会弹出一个菜单,称之为“系统菜单”,在窗体中并没有系统菜单对应的组件,所以有时需要定制系统菜单时就比较麻烦。可以通过下面的步骤实现: 1) 在系统菜单上添加所需的菜单项。 2) 为新添加的菜单项定义OnClick 事件的处理过程。 在该例程中,在系统菜单中添加了一个“前端显示( A )”菜单项,通过该菜单项,可以使窗体始终显示在最前端或为普通窗体模式。具体实现过程如下: 1) 通过菜单File | New Application 创建一个新的工程。 2) 添加窗体Form1 的OnCreate 事件的处理过程如下: procedure TForm1.FormCreate(Sender:TObject);begin //设置系统菜单 AppendMenu(GetSystemMenu(Handle,False),MF_SEPARATOR,0,’’); AppendMenu(GetSystemMenu(Handle,False),MF_STRING,200,’前端显示(&A)’);3)在文件Unit1.pas的uses语句中增加如下代码:usesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,Menus;...4)在TForm1的类型定义中,添加系统菜单中新建菜单项的OnClick事件的处理过程的声明:typeTForm1=class(TForm)procedureFormCreate(Sender:TObject);procedureSystemMenuCommand(varMsg:TWMMENUSELECT);messageWM_SysCommand;private5)手工添加系统菜单中新建菜单项的OnClick事件的处理过程如下:procedureTForm1.SystemMenuCommand(varMsg:TWMMENUSELECT);beginifMsg.IDItem=200thenbeginifForm1.FormStyle=fsNormalthenbegin//将窗体设置为总在前端显示Form1.FormStyle:=fsStayOnTop;//重新设置系统菜单AppendMenu(GetSystemMenu(Handle,False),MF_SEPARATOR,0,’’);AppendMenu(GetSystemMenu(Handle,False),MF_STRING,200,’前端显示(&A)’);//在新添加的菜单项前增加一个选中标志ModifyMenu(GetSystemMenu(Handle,False),200,MF_CHECKED,200,’前端显示(&A)’);endelsebegin//将窗体设置为普通模式Form1.FormStyle:=fsNormal;//重新设置系统菜单AppendMenu(GetSystemMenu(Handle,False),MF_SEPARATOR,0,’’);AppendMenu(GetSystemMenu(Handle,False),MF_STRING,200,’前端显示(&A)’);end;end;inherited;end;

如何用SetMenuItemInfo实现ModifyMenu的功能

’SetMenuItemInfo用法Private Const MFT_RADIOCHECK = &H200&Private Const MIIM_TYPE = &H10Private Const MIIM_SUBMENU = &H4Private Type MENUITEMINFO  cbSize As Long  fMask As Long  fType As Long  fState As Long  wID As Long  hSubMenu As Long  hbmpChecked As Long  hbmpUnchecked As Long  dwItemData As Long  dwTypeData As String  cch As LongEnd TypePrivate Declare Function GetMenu Lib “user32“ (ByVal hwnd As Long) As LongPrivate Declare Function GetMenuItemInfo Lib “user32“ Alias “GetMenuItemInfoA“ (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpmii As MENUITEMINFO) As LongPrivate Declare Function SetMenuItemInfo Lib “user32“ Alias “SetMenuItemInfoA“ (ByVal hMenu As Long, ByVal uItem As Long, ByVal fByPosition As Long, lpmii As MENUITEMINFO) As LongPrivate Declare Function GetSubMenu Lib “user32“ (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate Sub Form_Load()    ’URL: