如何在Excel VBA中以编程方式移动或调整验证消息框的大小
是否可以调整或移动验证单元格消息框 当一个工作表单元格有一些带有消息的验证规则时,可以调整或移动(使用VBA代码)验证单元格消息框,以便不覆盖其他单元格 谢谢如何在Excel VBA中以编程方式移动或调整验证消息框的大小,excel,vba,Excel,Vba,是否可以调整或移动验证单元格消息框 当一个工作表单元格有一些带有消息的验证规则时,可以调整或移动(使用VBA代码)验证单元格消息框,以便不覆盖其他单元格 谢谢 目前我的邮件非常大,覆盖了重要的单元格不,这是不可能的。解决方法是创建一个用户表单。请查看VBE中的“插入”菜单。不,这是不可能的。解决方法是创建一个用户表单。请查看VBE中的插入菜单。经过几个小时的工作,我想为我自己的问题提出一个解决方案 为此,我以另一个论坛提出的解决方案为基础,尽管有另一个目的。感谢作者们。我真诚地希望你觉得它有用
目前我的邮件非常大,覆盖了重要的单元格不,这是不可能的。解决方法是创建一个用户表单。请查看VBE中的“插入”菜单。不,这是不可能的。解决方法是创建一个用户表单。请查看VBE中的插入菜单。经过几个小时的工作,我想为我自己的问题提出一个解决方案 为此,我以另一个论坛提出的解决方案为基础,尽管有另一个目的。感谢作者们。我真诚地希望你觉得它有用 这是我修改过的代码:
Option Explicit
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent _
As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent _
As Long) As Long
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
Y As Long
End Type
Dim lngCurPos As POINTAPI
Dim TimerOn As Boolean
Dim TimerId As Long
Dim newRange As Range
Dim oldRange As Range
Dim oToolTipHelp As OLEObject 'A label working as tool tip
Dim wb As Workbook
Dim ws As Worksheet
Sub StartTimer()
'Assign values to ws and wb, used in many parts
Set wb = ThisWorkbook
Set ws = wb.Sheets("CALCULOS")
If Not TimerOn Then
TimerId = SetTimer(0, 0, 0.01, AddressOf TimerProc)
TimerOn = True
Else
MsgBox "Timer already On !", vbInformation
End If
End Sub
'---------------------------------------------------------------------------------------
' Procedure : GetToolTipHelp
' Author : INGENIERO
' Date : 30/07/2019
' Purpose : Creates LblToolTipHelp if does not exist
'---------------------------------------------------------------------------------------
'
Function GetToolTipHelp(ws As Worksheet) As Object
Dim shpObj As OLEObject
For Each shpObj In ws.OLEObjects
If shpObj.Name = "LblToolTipHelp" Then
Set GetToolTipHelp = shpObj
Exit Function
End If
Next shpObj
'This part is only for my program. Measures are only for me.
Dim lTop As Single
Dim lLeft As Single
Dim lWidth As Single
Dim lHeight As Single
lTop = ws.Cells(27, 8).top
lLeft = ws.Cells(27, 8).left
lWidth = ws.Cells(1, 18).left - ws.Cells(1, 8).left
lHeight = ws.Cells(31, 1).top - ws.Cells(27, 1).top
'Creates Help Label if does not exist
ws.OLEObjects.Add(ClassType:="Forms.Label.1", Link:=False, _
DisplayAsIcon:=False, left:=lLeft, _
top:=lTop, _
width:=lWidth, _
height:=lHeight) _
.Name = "LblToolTipHelp"
With ws.OLEObjects("LblToolTipHelp")
.Object.BackColor = RGB(255, 255, 192)
End With
Set GetToolTipHelp = shpObj
End Function
Sub TimerProc()
If oToolTipHelp Is Nothing Then
'Creates ToolTip if does not exist
Set oToolTipHelp = GetToolTipHelp(ws)
End If
If oldRange Is Nothing Then
Set oldRange = ws.Cells(1, 1) 'First set of oldRange
Set newRange = ws.Cells(1, 1) 'First set of newRange
Else
GetCursorPos lngCurPos
On Error Resume Next 'oldRange isn't set at first time
Set newRange = ActiveWindow.RangeFromPoint(lngCurPos.x, lngCurPos.Y)
If newRange Is Nothing Then
Exit Sub
Else
If newRange.Address <> oldRange.Address Then
Set oldRange = newRange
End If
End If
End If
ChangeToolTip
End Sub
Sub StopTimer()
If TimerOn Then
KillTimer 0, TimerId
TimerOn = False
Else
MsgBox "Timer already Off", vbInformation
End If
End Sub
Sub ChangeToolTip()
ws.OLEObjects("LblToolTipHelp").Object.Caption = newRange.Row & "," & newRange.Column
End Sub
选项显式
声明函数SetTimer Lib“user32”(ByVal hwnd为Long,ByVal nIDEvent_
只要_
ByVal UELASS As Long,ByVal lpTimerFunc As Long)As Long
声明函数KillTimer Lib“user32”(ByVal hwnd为Long,ByVal nIDEvent_
只要)只要
将函数GetCursorPos Lib“user32”(lpPoint作为POINTAPI)声明为Long
类型POINTAPI
x尽可能长
只要
端型
作为POINTAPI的Dim lngCurPos
作为布尔的Dim TimerOn
暗淡的时光如长
将新范围变暗为范围
将旧范围变暗为范围
Dim OTOLTIPHELP作为OLEObject“一个用作工具提示的标签
将wb设置为工作簿
将ws设置为工作表
亚StartTimer()
'将值分配给ws和wb,用于许多部分
设置wb=ThisWorkbook
设置ws=wb.Sheets(“CALCULOS”)
如果不是TimerOn那么
TimerId=SetTimer(0,0,0.01,TimerProc的地址)
TimerOn=True
其他的
MsgBox“计时器已打开!”,vbInformation
如果结束
端接头
'---------------------------------------------------------------------------------------
'过程:GetToolTipHelp
作者:INGENIERO
日期:2019年7月30日
'目的:如果LBLTOLTIPHELP不存在,则创建LBLTOLTIPHELP
'---------------------------------------------------------------------------------------
'
函数GetToolTipHelp(ws-As工作表)作为对象
将shpObj作为对象进行调整
对于ws.OLEObjects中的每个shpObj
如果shpObj.Name=“LblToolTipHelp”,则
设置GetToolTipHelp=shpObj
退出功能
如果结束
下一个shpObj
“这部分内容只适用于我的节目。这些措施只适用于我。
将lTop设置为单个
单飞
单面暗宽
单曲
lTop=ws.Cells(27,8)。顶部
lLeft=ws.Cells(27,8)。左
lWidth=ws.Cells(1,18).左-ws.Cells(1,8).左
lHeight=ws.Cells(31,1).top-ws.Cells(27,1).top
'如果不存在,则创建帮助标签
添加(类类型:=“Forms.Label.1”,链接:=False_
DisplayAsIcon:=False,左:=lLeft_
顶部:=lTop_
宽度:=lWidth_
高度:=L高)_
.Name=“LblToolTipHelp”
使用ws.OLEObjects(“LblToolTipHelp”)
.Object.BackColor=RGB(255、255、192)
以
设置GetToolTipHelp=shpObj
端函数
子TimerProc()
如果OTOLTIPHELP什么都不是
'如果不存在,则创建工具提示
Set-oToolTipHelp=GetToolTipHelp(ws)
如果结束
如果oldRange不算什么,那么
Set oldRange=ws.Cells(1,1)'第一组oldRange
Set newRange=ws.Cells(1,1)'第一组newRange
其他的
GetCursorPos lngCurPos
出现错误时,第一次未设置“继续下一步”oldRange
设置newRange=ActiveWindow.RangeFromPoint(lngCurPos.x,lngCurPos.Y)
如果newRange什么都不是,那么
出口接头
其他的
如果是newRange.Address oldRange.Address,则
设置旧范围=新范围
如果结束
如果结束
如果结束
更改工具提示
端接头
子停止计时器()
如果是TimerOn那么
KillTimer 0,TimerId
TimerOn=False
其他的
MsgBox“计时器已关闭”,vbInformation
如果结束
端接头
子更改工具提示()
ws.OLEObjects(“LblToolTipHelp”).Object.Caption=newRange.Row&“,”&newRange.Column
端接头
在ChangeToolTip Sub上,您可以发布自己的消息经过几个小时的工作,我想为我自己的问题提出一个解决方案 为此,我以另一个论坛提出的解决方案为基础,尽管有另一个目的。感谢作者们。我真诚地希望你觉得它有用 这是我修改过的代码:
Option Explicit
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent _
As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent _
As Long) As Long
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
Y As Long
End Type
Dim lngCurPos As POINTAPI
Dim TimerOn As Boolean
Dim TimerId As Long
Dim newRange As Range
Dim oldRange As Range
Dim oToolTipHelp As OLEObject 'A label working as tool tip
Dim wb As Workbook
Dim ws As Worksheet
Sub StartTimer()
'Assign values to ws and wb, used in many parts
Set wb = ThisWorkbook
Set ws = wb.Sheets("CALCULOS")
If Not TimerOn Then
TimerId = SetTimer(0, 0, 0.01, AddressOf TimerProc)
TimerOn = True
Else
MsgBox "Timer already On !", vbInformation
End If
End Sub
'---------------------------------------------------------------------------------------
' Procedure : GetToolTipHelp
' Author : INGENIERO
' Date : 30/07/2019
' Purpose : Creates LblToolTipHelp if does not exist
'---------------------------------------------------------------------------------------
'
Function GetToolTipHelp(ws As Worksheet) As Object
Dim shpObj As OLEObject
For Each shpObj In ws.OLEObjects
If shpObj.Name = "LblToolTipHelp" Then
Set GetToolTipHelp = shpObj
Exit Function
End If
Next shpObj
'This part is only for my program. Measures are only for me.
Dim lTop As Single
Dim lLeft As Single
Dim lWidth As Single
Dim lHeight As Single
lTop = ws.Cells(27, 8).top
lLeft = ws.Cells(27, 8).left
lWidth = ws.Cells(1, 18).left - ws.Cells(1, 8).left
lHeight = ws.Cells(31, 1).top - ws.Cells(27, 1).top
'Creates Help Label if does not exist
ws.OLEObjects.Add(ClassType:="Forms.Label.1", Link:=False, _
DisplayAsIcon:=False, left:=lLeft, _
top:=lTop, _
width:=lWidth, _
height:=lHeight) _
.Name = "LblToolTipHelp"
With ws.OLEObjects("LblToolTipHelp")
.Object.BackColor = RGB(255, 255, 192)
End With
Set GetToolTipHelp = shpObj
End Function
Sub TimerProc()
If oToolTipHelp Is Nothing Then
'Creates ToolTip if does not exist
Set oToolTipHelp = GetToolTipHelp(ws)
End If
If oldRange Is Nothing Then
Set oldRange = ws.Cells(1, 1) 'First set of oldRange
Set newRange = ws.Cells(1, 1) 'First set of newRange
Else
GetCursorPos lngCurPos
On Error Resume Next 'oldRange isn't set at first time
Set newRange = ActiveWindow.RangeFromPoint(lngCurPos.x, lngCurPos.Y)
If newRange Is Nothing Then
Exit Sub
Else
If newRange.Address <> oldRange.Address Then
Set oldRange = newRange
End If
End If
End If
ChangeToolTip
End Sub
Sub StopTimer()
If TimerOn Then
KillTimer 0, TimerId
TimerOn = False
Else
MsgBox "Timer already Off", vbInformation
End If
End Sub
Sub ChangeToolTip()
ws.OLEObjects("LblToolTipHelp").Object.Caption = newRange.Row & "," & newRange.Column
End Sub
选项显式
声明函数SetTimer Lib“user32”(ByVal hwnd为Long,ByVal nIDEvent_
只要_
ByVal UELASS As Long,ByVal lpTimerFunc As Long)As Long
声明函数KillTimer Lib“user32”(ByVal hwnd为Long,ByVal nIDEvent_
只要)只要
将函数GetCursorPos Lib“user32”(lpPoint作为POINTAPI)声明为Long
类型POINTAPI
x尽可能长
只要
端型
作为POINTAPI的Dim lngCurPos
作为布尔的Dim TimerOn
暗淡的时光如长
将新范围变暗为范围
将旧范围变暗为范围
Dim OTOLTIPHELP作为OLEObject“一个用作工具提示的标签
将wb设置为工作簿
将ws设置为工作表
亚StartTimer()
'将值分配给ws和wb,用于许多部分
设置wb=ThisWorkbook
设置ws=wb.Sheets(“CALCULOS”)
如果不是TimerOn那么
TimerId=SetTimer(0,0,0.01,TimerProc的地址)
TimerOn=True
其他的