欧非资源网:安全、免费、专业放心的资源下载站! 最新软件|软件分类

您的位置:欧非资源网 > Excel专区 > Excel函数 > Excel VBA 窗体之放大镜窗体 实现代码

Excel VBA 窗体之放大镜窗体 实现代码

时间:2020-07-05 12:54作者:admin来源:未知人气:718我要评论(0)

在 Windows 的附件中有一个工具叫放大镜,看着不错有意思。有时候自己动手做一个也很有感觉。那我们就用 VBA 来做一个简陋版的放大镜,看着简陋其实也不错的。

Excel VBA 窗体之放大镜窗体 实现代码

 

 

附件下载:

点击从百度网盘下载

 

操作如下
◾ 在Excel 的VBE窗口中插入一个用户窗体,将其命名为 frmMagnifyingGlass。然后再添加一个模块。在窗体和模块中添加后面所列代码。
◾ 在工作薄中的任意工作表中添加一窗体按钮控件,将指定其设置宏为 btnShowMagnifyingGlass_Click。其供示范之用

 

具体代码:

"mdMagnifyingGlass" 模块代码

Option Explicit
'********************************************
'---此模块为回调函数和工作表中按钮调用程序---
'********************************************
#If Win64 Then '64位
'获取设备数据
Public Declare PtrSafe Function GetDeviceCaps _
Lib "gdi32"( _
ByVal hdc As LongPtr, _
ByVal nIndex As Long) _
As Long
'释放设备场景
Public Declare PtrSafe Function ReleaseDC _
Lib "user32" ( _
ByVal Hwnd As LongPtr, _
ByVal hdc As LongPtr) _
As Long
'获取鼠标指针的当前位置
Public Declare PtrSafe Function GetCursorPos _
Lib "user32" ( _
lpPoint As POINTAPI) _
As Long
'取得设备场景
Public Declare PtrSafe Function GetDC _
Lib "user32" ( _
ByVal Hwnd As LongPtr) _
As LongPtr
'将一幅位图从一个设备场景复制到另一个
Public Declare PtrSafe Function StretchBlt _
Lib "gdi32" ( _
ByVal hdc As LongPtr, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As LongPtr, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, _
ByVal dwRop As Long) _
As Long
'查找窗口
Public Declare PtrSafe Function FindWindow _
Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As LongPtr
Public FHwnd As LongPtr
Public FHdc As LongPtr
#Else
'获取设备数据
Public Declare Function GetDeviceCaps _
Lib "gdi32" ( _
ByVal hdc As Long, _
ByVal nIndex As Long) _
As Long
'释放设备场景
Public Declare Function ReleaseDC _
Lib "user32" ( _
ByVal Hwnd As Long, _
ByVal hdc As Long) _
As Long
'获取鼠标指针的当前位置
Public Declare Function GetCursorPos _
Lib "user32" ( _
lpPoint As POINTAPI) _
As Long
'取得设备场景
Public Declare Function GetDC _
Lib "user32" ( _
ByVal Hwnd As Long) _
As Long
'将一幅位图从一个设备场景复制到另一个
Public Declare Function StretchBlt _
Lib "gdi32" ( _
ByVal hdc As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, _
ByVal dwRop As Long) _
As Long
'查找窗口
Public Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long
Public FHwnd As Long
Public FHdc As Long
#End If
'以下定义类型
Private Type POINTAPI
x As Long
y As Long
End Type
'以下声明常数和变量
Public Const SRCCOPY = &HCC0020
Public Const LOGPIXELSX = &H58
Public FLogPixelsx As Long
Private FPoint As POINTAPI
Private dx As Long
Private dy As Long
'***************************
'---Settimer函数的回调函数---
'***************************
Public Function TimeOutProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As Long
'获得当前鼠标位置
Call GetCursorPos(FPoint)
dx = FPoint.x: dy = FPoint.y
'将位图复制到窗体设备场景
Call StretchBlt(FHdc, 0, 0, frmMagnifyingGlass.InsideWidth * FLogPixelsx / 72, frmMagnifyingGlass.InsideHeight * FLogPixelsx / 72, _
GetDC(0), dx, dy, 150, 150 * frmMagnifyingGlass.InsideHeight / frmMagnifyingGlass.InsideWidth, SRCCOPY)
End Function
'此程序为工作表中按钮调用
Sub btnShowMagnifyingGlass_Click()
'显示窗体(无模式)
frmMagnifyingGlass.Show 0
End Sub

"frmMagnifyingGlass" 窗体代码

Option Explicit
'***********************
'------窗体过程代码------
'***********************
'以下声明API函数
#If Win64 Then '64位
'用来设置Settimer过程。
Private Declare PtrSafe Function SetTimer _
Lib "user32" ( _
ByVal Hwnd As LongPtr, _
ByVal nIDEvent As LongPtr, _
ByVal uElapse As Long, _
ByVal lpTimerfunc As LongPtr) _
As LongPtr
'结束Settimer过程
Private Declare PtrSafe Function KillTimer _
Lib "user32" ( _
ByVal Hwnd As LongPtr, _
ByVal nIDEvent As LongPtr) _
As Long
'以下定义变量
Private FTID As LongPtr
#Else
'用来设置Settimer过程。
Private Declare Function SetTimer _
Lib "user32" ( _
ByVal Hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerfunc As Long) _
As Long
'结束Settimer过程
Private Declare Function KillTimer _
Lib "user32" ( _
ByVal Hwnd As Long, _
ByVal nIDEvent As Long) _
As Long
'以下定义变量
Private FTID As Long
#End If
Private Sub UserForm_Initialize()
'取得窗口句柄
FHwnd = FindWindow(vbNullString, Me.Caption)
'取得窗体设备场景
FHdc = GetDC(FHwnd)
'取得每英寸所包含的像素
FLogPixelsx = GetDeviceCaps(GetDC(0), LOGPIXELSX)
'设置Settimer 过程
FTID = SetTimer(FHwnd, 0, 100, AddressOf TimeOutProc)
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'结束Settimer过程
If FTID <> 0 Then Call KillTimer(FHwnd, FTID)
'释放设备场景,记住一定要释放
Call ReleaseDC(FHwnd, FHdc)
End Sub

Excel VBA 窗体之放大镜窗体 实现代码的下载地址:
  • 本地下载

  • 相关阅读 Excel有哪些常用的数学函数?​Excel取消表格中虚线的两种方法Excel最常见的「错误值」,这些含义你都知道吗?实现快速找出Excel表格中两列数据不同内容的3种方法!如何利用Excel一键提取身份证的这些重要信息,公式直接套用!Excel如何制作动态红绿灯,工作可不要亮红灯哦Excel身份证号大探索excel如何根据日期按月汇总计算公式Excel浪漫表白公式,发给心仪的她/他Excel表格如何自动求和

    文章评论
    发表评论

    热门文章 excel 两表数据快速对比,高手都是这样做,四种方法随你选.xlsm是什么文件格式,以及xlsm文件怎么打开的方法excel if函数如何多个条件并列excel中计算加权平均数的公式:用SUMPRODUCT和SUM函数计算加权平均

    最新文章 Excel有哪些常用的数学函数?​Excel取消表格中虚线的两种方法 Excel最常见的「错误值」,这些含义你都知道吗?实现快速找出Excel表格中两列数据不同内容的3种方法!如何利用Excel一键提取身份证的这些重要信息,公式直接套用!Excel如何制作动态红绿灯,工作可不要亮红灯哦

    人气排行 excel 两表数据快速对比,高手都是这样做,四种方法随你选.xlsm是什么文件格式,以及xlsm文件怎么打开的方法excel if函数如何多个条件并列excel中计算加权平均数的公式:用SUMPRODUCT和SUM函数计算加权平均excel中IF条件函数10大用法完整版,全会是高手,配合SUMIF,VLOOKUPexcel中COUNTIFS函数9种高级用法详解,条件统计重复值,告别加班涨工如何解除Excel VBA工程密码excel 如何根据身份证号码提取户籍所在省份地区函数公式

    盖楼回复X

    (您的评论需要经过审核才能显示)