如何编写控件以减少VBA代码模块中的单元格值

伊格德拉西尔

我有一个代码模块,可以在其中按下特定键创建一个文本框,并通过在文本框中插入的数量减少当前选定的单元格值。我到了创建文本框的地步。现在,我需要访问工作表模块外部的文本框的事件。我发现我可以使用WihtEvents属性创建一个类模块。不幸的是,这似乎不起作用。这里是执行控件的代码:

Dim objControl As BankingEventSink

Private Sub ReduceCell()
    If IsNumeric(ActiveCell.Text) Then
        Dim value As Double
        value = CDbl(ActiveCell.Text)
        ActiveSheet.Shapes.AddOLEObject(ClassType:="Forms.TextBox.1").Name = "ReduceCellTextBox"
        With ActiveSheet.OLEObjects("ReduceCellTextBox")
            .Top = ActiveCell.Top + ActiveCell.Height
            .Left = ActiveCell.Left
        End With
        ActiveSheet.OLEObjects("ReduceCellTextBox").Activate
        Set objControl = New BankingEventSink
        objControl.Init (ActiveSheet.OLEObjects("ReduceCellTextBox").Object)
    Else
        RethrowKeys ("{BS}{-}")
    End If
End Sub

类模块的代码:

Dim WithEvents objOLEControl As MSForms.TextBox

Public Sub Init(oleControl As MSForms.TextBox)
    Set objOLEControl = oleControl
End Sub

Private Sub ReduceCellTextBox_Change()
    MsgBox "Changed"
End Sub

Private Sub ReduceCellTextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
                                   ByVal Shift As Integer)
    MsgBox "Key down: " & KeyCode
End Sub

我在文本框中输入的内容不会触发任何事件。错误在哪里?

悉达思·劳特

要从VBA用户窗体中删除标题栏,您需要使用API​​的FindWindowSetWindowLongGetWindowLongSetWindowPos这里是我一站式API的地方

创建您的用户窗体并在其中放置一个文本框。例如

在此处输入图片说明

接下来,将此代码粘贴到用户表单中。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long

Private Declare Function SetWindowPos Lib "user32" ( _
ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_BORDER = &H800000

Private Enum ESetWindowPosStyles
    SWP_SHOWWINDOW = &H40
    SWP_HIDEWINDOW = &H80
    SWP_FRAMECHANGED = &H20
    SWP_NOACTIVATE = &H10
    SWP_NOCOPYBITS = &H100
    SWP_NOMOVE = &H2
    SWP_NOOWNERZORDER = &H200
    SWP_NOREDRAW = &H8
    SWP_NOREPOSITION = SWP_NOOWNERZORDER
    SWP_NOSIZE = &H1
    SWP_NOZORDER = &H4
    SWP_DRAWFRAME = SWP_FRAMECHANGED
    HWND_NOTOPMOST = -2
End Enum

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Dim FrmWndh  As Long, lStyle As Long
Dim tR As RECT

Private Sub UserForm_Activate()
    FrmWndh = FindWindow(vbNullString, Me.Caption)

    lStyle = GetWindowLong(FrmWndh, GWL_STYLE)

    lStyle = lStyle And Not WS_CAPTION
    SetWindowLong FrmWndh, GWL_STYLE, lStyle

    SetWindowPos FrmWndh, 0, tR.Left, tR.Top, _
    tR.Right - tR.Left, tR.Bottom - tR.Top, _
    SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED Or WS_BORDER

    Me.Repaint
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 27 Then Unload Me
End Sub

现在运行用户窗体时,它将看起来像这样。由于我们已经删除了用户窗体的标题栏,所以我添加了代码,以便当您ESC从文本框中按下时,用户窗体将被卸载。您可以将其更改为您喜欢的任何(合理的)值。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何快速减少tableView单元格中的代码

来自分类Dev

VBA:如何更改函数中单元格的值?

来自分类Dev

如何在excel VBA中验证单元格值

来自分类Dev

如何编写VBA代码根据行和列的选择复制单元格数据

来自分类Dev

是否可以编写VBA代码以仅从突出显示的单元格中删除重复项?

来自分类Dev

将VBA嵌入到工作表中以根据单元格的值显示/隐藏表单控件

来自分类Dev

Excel VBA:格式控件下拉列表填充单元格中的唯一值

来自分类Dev

将VBA嵌入到工作表中以根据单元格的值显示/隐藏表单控件

来自分类Dev

比较VBA中单元格的值

来自分类Dev

比较VBA中单元格的值

来自分类Dev

如何在Excel中编写VBA多行核心响应单元格If语句

来自分类Dev

如何在反应中减少单元格或行的高度?

来自分类Dev

我如何编写 VBA 代码,让我在按下 Enter 键时从一个单元格跳到另一个单元格

来自分类Dev

在运行VBA代码时更新单元格值

来自分类Dev

Excel VBA:如何在VBA代码中重复双击/单元格编辑操作

来自分类Dev

如何在Excel表单元格中更改值而不在VBA中指定单元格引用

来自分类Dev

如何在Excel表单元格中更改值而不在VBA中指定单元格引用

来自分类Dev

VBA代码未从文件中获取单元格的正确值

来自分类Dev

根据查询表中的单元格值使整个行变为粗体的VBA代码

来自分类Dev

Excel VBA / 如果单元格的值与参考单元格中的值不符,则删除单元格

来自分类Dev

如何通过VBA代码使Excel单元格等于空

来自分类Dev

减少Excel中的单元格数量

来自分类Dev

减少Excel中的单元格数量

来自分类Dev

如果单元格包含VBA / Excel中的特定值,如何从范围中删除列

来自分类Dev

如何使用VBA在Excel中的错误单元格中获取基础值

来自分类Dev

如何在VBA中的字符串中引用单元格值?

来自分类Dev

如何使用VBA在Excel中的错误单元格中获取基础值

来自分类Dev

如何根据填充颜色在单元格中显示值 - Excel VBA 中的事件

来自分类Dev

如何在 VBA 中的 sharepoint 上引用存储在 Excel 文件中的单元格值

Related 相关文章

  1. 1

    如何快速减少tableView单元格中的代码

  2. 2

    VBA:如何更改函数中单元格的值?

  3. 3

    如何在excel VBA中验证单元格值

  4. 4

    如何编写VBA代码根据行和列的选择复制单元格数据

  5. 5

    是否可以编写VBA代码以仅从突出显示的单元格中删除重复项?

  6. 6

    将VBA嵌入到工作表中以根据单元格的值显示/隐藏表单控件

  7. 7

    Excel VBA:格式控件下拉列表填充单元格中的唯一值

  8. 8

    将VBA嵌入到工作表中以根据单元格的值显示/隐藏表单控件

  9. 9

    比较VBA中单元格的值

  10. 10

    比较VBA中单元格的值

  11. 11

    如何在Excel中编写VBA多行核心响应单元格If语句

  12. 12

    如何在反应中减少单元格或行的高度?

  13. 13

    我如何编写 VBA 代码,让我在按下 Enter 键时从一个单元格跳到另一个单元格

  14. 14

    在运行VBA代码时更新单元格值

  15. 15

    Excel VBA:如何在VBA代码中重复双击/单元格编辑操作

  16. 16

    如何在Excel表单元格中更改值而不在VBA中指定单元格引用

  17. 17

    如何在Excel表单元格中更改值而不在VBA中指定单元格引用

  18. 18

    VBA代码未从文件中获取单元格的正确值

  19. 19

    根据查询表中的单元格值使整个行变为粗体的VBA代码

  20. 20

    Excel VBA / 如果单元格的值与参考单元格中的值不符,则删除单元格

  21. 21

    如何通过VBA代码使Excel单元格等于空

  22. 22

    减少Excel中的单元格数量

  23. 23

    减少Excel中的单元格数量

  24. 24

    如果单元格包含VBA / Excel中的特定值,如何从范围中删除列

  25. 25

    如何使用VBA在Excel中的错误单元格中获取基础值

  26. 26

    如何在VBA中的字符串中引用单元格值?

  27. 27

    如何使用VBA在Excel中的错误单元格中获取基础值

  28. 28

    如何根据填充颜色在单元格中显示值 - Excel VBA 中的事件

  29. 29

    如何在 VBA 中的 sharepoint 上引用存储在 Excel 文件中的单元格值

热门标签

归档