本类文章的标签为 ‘技巧’

Page 1 of 1112345...Last »

在用户窗体文本框中创建上下文菜单

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

这是Andy Pope贡献的一个示例,能够在用户窗体文本框中使用上下文菜单。如下图所示。

在这个示例中,使用类来为文本框添加上下文菜单。
这个类模块处理上下文菜单指令,捕获文本框中的右击操作,并处理剪切、复制和粘贴行为。类模块使用了用户窗体的ActiveControl对象。这段代码甚至可以处理诸如框架和多页等容器控件里的控件。
下面是用户窗体初始化代码,展示了定义和使用类对象是如此的简单。仅需要声明该对象,然后设置每个想要具有上下文菜单功能的文本框的引用。

Private m_colContextMenus As Collection
 
Private Sub UserForm_Initialize()
 
    Dim clsContextMenu As CTextBox_ContextMenu
 
    Set m_colContextMenus = New Collection
 
    Set clsContextMenu = New CTextBox_ContextMenu
    With clsContextMenu
        Set .TBox = UserForm1.TextBox1
        Set .Parent = Me
    End With
    m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
 
    Set clsContextMenu = New CTextBox_ContextMenu
    With clsContextMenu
        Set .TBox = UserForm1.TextBox2
        Set .Parent = Me
    End With
    m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
 
    Set clsContextMenu = New CTextBox_ContextMenu
    With clsContextMenu
        Set .TBox = UserForm1.TextBox3
        Set .Parent = Me
    End With
    m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
 
    Set clsContextMenu = New CTextBox_ContextMenu
    With clsContextMenu
        Set .TBox = UserForm1.TextBox4
        Set .Parent = Me
    End With
    m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
 
    Set clsContextMenu = New CTextBox_ContextMenu
    With clsContextMenu
        Set .TBox = UserForm1.TextBox5
        Set .Parent = Me
    End With
    m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
 
End Sub

示例下载:

相关文章

让Excel自动响应消息框中的提示

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

这是以前收录的一段程序示例:
使用VBA在调用工作簿中打开被调用工作簿,并运行其中的宏。该宏将弹出一个消息框,如果用户没有响应,那么程序会在指定时间后自动响应。
调用工作簿中的程序代码如下:

Public Declare Function SetTimer& Lib "user32" (ByVal hwnd&, _
    ByVal nIDEvent&, ByVal uElapse&, ByVal lpTimerFunc&)
Private Declare Function KillTimer& Lib "user32" (ByVal hwnd&, _
    ByVal nIDEvent&)
Public Const NV_INPUTBOX As Long = &H5000
 
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
    SendKeys "%Y"
    KillTimer hwnd, idEvent
End Sub
 
Sub test()
 
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
 
    Dim targetworkbook As Workbook
 
    Dim usersave As VbMsgBoxResult
 
    Set targetworkbook = Workbooks.Open("C:\test2.xls", UpdateLinks:=0)
 
    Calculate
    targetworkbook.Activate
    SetTimer 0, NV_INPUTBOX, 1000, AddressOf TimerProc
    Application.Run targetworkbook.Name & "!tester"
 
    targetworkbook.Activate
 
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
 
End Sub

假设被调用工作簿存储在C盘,工作簿名为test2.xls,那么其中的代码如下:

Sub tester()
    TimedMsgBox
End Sub
 
Sub TimedMsgBox()
    Dim cTime As Long
    Dim WSH As Object
 
    Set WSH = CreateObject("WScript.Shell")
    cTime = 5 '5 秒
    Select Case WSH.Popup("Open an Excel file?!", cTime, "Question", vbOKCancel)
        Case vbOK
            MsgBox "你单击了确定"
        Case vbCancel
            MsgBox "你单击了取消"
        Case -1
            MsgBox "超时"
    End Select
End Sub

运行调用工作簿中的程序后,被调用的工作簿test2.xls会被打开,并运行其中的程序,该程序会弹出一个消息框,如果用户没有响应该消息框,那么在5秒后,会自动响应,即弹出一个内容为“超时”的消息框。

相关文章

带有菜单栏的用户窗体

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

今天,给大家分享Jan Karel Pieterse的作品:带有菜单栏的用户窗体。如下图所示。
CreateMenuInUserform
示例文档下载:

相关文章

在一个列表框中显示另一列表框中的具体内容

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

有时,需要选中某列表框的的项目后,在另一列表框中显示该项目的具体内容,如下图1所示。
listboxselect1
图1:两个列表框实现内容匹配
“专业工程”包括“建筑工程、装饰装修工程……”等,当选中项目列表框中的专业工程后,在分类列表框中显示相应的内容。同理,选择项目列表框中的措施项目后,在分类列表框中也会显示相应的内容。
第一步:准备数据
如下图2所示,在工作表Sheet1中输入下列数据。
listboxselect2
图2:基础数据
将A列的数据命名为“项目”,将B列的数据命名为“专业工程”,将C列的数据命名为“措施项目”。注意,B列和C列的名称应与A列的数据相一致。
第二步:准备窗体界面
如图1所示,在用户窗体中放置两个标签控件、两个列表框控件,并将两个列表框控件分别命名为lbxItem和lbxCategory。
第三步:输入代码
在用户窗体代码模块中,输入下列代码:

Private Sub lbxItem_Change()
    Dim rngCategory As Range
 
    Set rngCategory = Sheet1.Range(Me.lbxItem.Value)
 
    Me.lbxCategory.List = rngCategory.Value
End Sub
 
Private Sub UserForm_Initialize()
    Dim rngItem As Range
 
    Set rngItem = Sheet1.Range("项目")
 
    Me.lbxItem.List = rngItem.Value
End Sub

运行后的最终效果如图1所示。当然,您可以在A列添加更多的项目数据,然后在C列、D列……添加相应的内容并以A列的数据命名,从而扩展本实例。
(注:网站空间被删前的文章,有一定的学习意义,故找出来重新贴出之)

相关文章

细品RibbonX(57):示例—在Excel 2007的功能区中添加中文选项卡和控件

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

由于Office 2007 CustomUI Editor并不支持中文,因此不能使用这个方便的工具来定制Ribbon,只能使用修改Office 2007文件格式的方法来解决了。此外,还可以使用Visual Studio来自定义中文选项卡。
步骤1 在桌面上创建一个名为customUI的文件夹。
步骤2 打开记事本,并在其中输入下面的XML代码:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="rxtabCustom"
           label="我自已的选项卡"
           insertBeforeMso="TabHome">
          <group idMso="GroupFont"/>
          <group idMso="GroupZoom"/>
          <group id="myGroup" label="我的组">
              <button id="b1" 
                      imageMso="HyperlinkInsert" 
                      size="large" 
                      label="启动网站" 
                      onAction="surf"/>
              <button id="b2" 
                      imageMso="HappyFace" 
                      label="微笑图标" 
                      onAction="smile"/>
              <button id="b3" 
                      imageMso="FormatPainter" 
                      label="格式刷图标" 
                      onAction="paint"/>
              <button id="b4" 
                      imageMso="AutoFilterClassic" 
                      label="筛选图标" 
                      onAction="filter"/>
           </group>
     </tab>
   </tabs>
  </ribbon>
</customUI>

该XML文件在Excel的“开始”选项卡前创建了一个名为“我自已的选项卡”的选项卡,并添加了三个组,前两个为Excel内置的组“字体”和“显示比例”,第三个为名为“我的组”的自定义组,其中包括四个自定义的按钮“启动网站”、“微笑图标”、“格式刷图标”和“筛选图标”,并分别定义了onAction属性。
步骤3 将该文件命名为customUI并以.xml为扩展名保存在customUI文件夹中,并关闭该文件。在保存时注意选择“编码”下拉框中的编码为UTF-8,如下图所示。
SaveAsUTF8Format
步骤4 在桌面上新建一个启用宏的Excel文件,并命名为MyCustomUI.xlsm。因为在自定义的XML中,包含了产生回调的onAction属性,所以创建的Excel文件需要启用宏。
步骤5 在MyCustomUI.xlsm中,按Alt+F11组合键打开VBE,并插入一个标准模块,添加下面的代码供回调使用:

'Callback for b1 onAction
Sub surf(control As IRibbonControl)
    ActiveWorkbook.FollowHyperlink _
      Address:="http://www.excelperfect.com", _
      NewWindow:=True
End Sub
'Callback for b2 onAction
Sub smile(control As IRibbonControl)
    MsgBox "您单击了微笑图标!呵呵..."
End Sub
'Callback for b3 onAction
Sub paint(control As IRibbonControl)
    MsgBox "您单击了格式刷图标!"
End Sub
 
'Callback for b4 onAction
Sub filter(control As IRibbonControl)
    MsgBox "您单击了筛选图标!"
End Sub

步骤6 关闭工作簿MyCustomUI.xlsm。
步骤7 在MyCustomUI.xlsm图标上单击右键,选择“重命名”,在文件名后添加“.zip”扩展名,使其变为一个压缩文件。如下图所示。
changeextendnameforzip
步骤8 双击该压缩文件,打开压缩包,将customUI文件夹拖到该压缩包中,如下图所示。
customuitozip
步骤9 将压缩包中的_rels文件夹拖至桌面。
步骤10 打开桌面中的_rels文件夹,然后用记事本打开其中的.rels文件,如下图所示。
relsfile
步骤11 在.rels文件的最后一个之前,添加下面的XML:

<Relationship Id="customUIRelID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>

步骤12 保存该.rels文件并关闭。
步骤13 将修改后的_rels文件夹拖回MyCustomUI压缩包中。如果出现提示,则选择是,覆盖原文件。关闭压缩包。
步骤14 将MyCustomUI.xlsm.zip的.zip扩展名删除。
步骤15 双击MyCustomUI.xlsm文件,打开工作簿,此时在Excel内置选项卡“开始”的前面添加了一个自定义选项卡,在该选项卡中添加了两个内置组和一个自定义组,如下图所示。
MyCustomUIResult1
看看吧,都是中文的,成功!

相关文章

Page 1 of 1112345...Last »