ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yl1991

[已解决] 一个完整的登陆系统DLL封装问题

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-1 17:55 | 显示全部楼层
就差口气,大家研究下嘛!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-1 22:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 灰袍法师 于 2011-8-1 18:37 发表
把 工程1.dll 改名为 reg.dll 即可自动注册

不过还是加载dll失败,估计是你的dll没写好。

你上传的所谓正确 登录.xls,VBA工程带密码,无法查看。

鄙视这个附件的原作者,纯粹炫耀,抄袭了一点狗屁不是的公 ...


类模块在压缩包里需手工加入。

TA的精华主题

TA的得分主题

发表于 2011-8-1 18:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
把 工程1.dll 改名为 reg.dll 即可自动注册

不过还是加载dll失败,估计是你的dll没写好。

你上传的所谓正确 登录.xls,VBA工程带密码,无法查看。

鄙视这个附件的原作者,纯粹炫耀,抄袭了一点狗屁不是的公开技术,然后自己故作神秘。

纯粹浪费大家时间+恶心!

附件是修改好的 VB工程,和VBA代码

楼主你的错误有几个

1 上面说过了, dll 的名称不对,你VBA代码用的是 reg.dll ,所以你要把VB编译出来的 dll 改为这个名称,否则无法找到dll

2 你的VB工程里面,只有窗体模块,没有类模块,所以VBA即使注册了DLL并且引用了DLL,也无法创建对象
附件已经增加一个 myclass 的类模块,并且在该模块写了三个方法,分别显示对应的窗体
这样才可以在引用DLL以后,创建这个类模块的实例对象,然后才可以调用这个对象的对应方法。

3 VBA现在应该可以自动注册这个DLL(即可以运行 shell regsvr32 thisworkbook.path & reg.dll)
但是,依然不能 public myobj as new reg (即无法自动引用)
要人手在VBA菜单的工具--引用里面浏览--添加这个dll文件,才可以用

估计原作者还有一段自动引用DLL的VBA代码,但是没有公布,再次强烈鄙视这样的作者。

说起来,楼主你也是应该被鄙视的,引用别人的附件,但是却不给出原作者的链接,也等于是冒名顶替,看在你新手的份上,这次还是帮你一把,下次你还是这样的话,就自求多福吧。

附件补上了这个自动引用的VBA代码,其实就一句话,根本不算什么狗屁技术。
'自动引用dll
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile (ThisWorkbook.Path & "\reg.dll")
    On Error GoTo 0

本来楼主自己努力一下也可以找到很多资料,求人不如求己嘛。
参考这里:
http://www.accessoft.com/article-view.asp?id=4609

[ 本帖最后由 灰袍法师 于 2011-8-1 20:03 编辑 ]

test.rar

62.83 KB, 下载次数: 790

TA的精华主题

TA的得分主题

发表于 2011-8-1 20:39 | 显示全部楼层
Private Sub CommandButton1_Click() '登陆按纽
Set XLapp = GetObject(, "Excel.Application")
Dim denglu As Boolean '定义类型
Dim last As Integer
'Dim sh As Worksheet
denglu = False '登陆开关关闭
'''''''''''''''''''''''''''''
'检查用户名和密码是否为空   '
'''''''''''''''''''''''''''''
If ComboBox1.Value = "" Then '如果用户名空白
    MsgBox "请选择用户名!", 64, "提示"  '提示选择用户名
        ComboBox1.SetFocus '选择用户名框
    Exit Sub '结束过程,下面不运行
End If

If TextBox1.Value = "" Then '如果没有填写密码
    MsgBox "请填写密码!", 64, "提示"  '提示填写密码
        TextBox1.SetFocus '选择密码框
    Exit Sub '结束过程,下面不运行
End If
'''''''''''''''''''''''''''''
'检查用户名和密码是否相符   '
'''''''''''''''''''''''''''''
last = XLapp.ActiveWorkbook.Sheets("YFGL").[a65536].End(xlUp).Row '取得"YFGL表"A列最下行号
For i = 2 To last '开始检查用户名和密码是否相符
    If XLapp.ActiveWorkbook.Sheets("YFGL").Range("a" & i).Value = ComboBox1.Value And XLapp.ActiveWorkbook.Sheets("YFGL").Range("b" & i).Value = TextBox1.Value Then
        denglu = True '如果用户名和密码相符,登陆开关开启
    End If
Next

If denglu Then '如果登陆开关开启
    XLapp.Application.Visible = True '显示工作簿
        'For Each sh In XLapp.ThisWorkbook.Sheets
            'If sh.Name <> "YFGL" Then
                'sh.Visible = -1 '除"空白"表和"YFGL"表以外所有工作表取消隐藏
                    'End If
                        'Next
                            'Sheets("空白").Visible = 2 '空白表隐藏
                    'XLapp.ActiveWorkbook.Sheets("主莱单").Select '打开"主莱单"表
                XLapp.ActiveWorkbook.Sheets("YFGL").Range("C2").Value = 0 '登陆次数归零
            Unload UserForm4 '窗体关闭
        Else '如果登陆开关没有开启
    XLapp.ActiveWorkbook.Sheets("YFGL").Range("C2").Value = XLapp.ActiveWorkbook.Sheets("YFGL").Range("C2").Value + 1 '登陆次数加1位
End If'●●●●●●这个移到后面

If XLapp.ActiveWorkbook.Sheets("YFGL").Range("C2").Value = 1 Then '如果是第1次登陆
    MsgBox "密码不正确,请重新填写密码,你还有2次机会!", 64, "提示" '提示还有2次机会
        TextBox1.Value = "" '清空密码框
    TextBox1.SetFocus '选择密码框
End If

If XLapp.ActiveWorkbook.Sheets("YFGL").Range("C2").Value = 2 Then '如果是第2次登陆
    MsgBox "密码不正确,请重新填写密码,你还有1次机会!", 64, "提示"  '提示还有1次机会
        TextBox1.Value = "" '清空密码框
    TextBox1.SetFocus '选择密码框
End If

If XLapp.ActiveWorkbook.Sheets("YFGL").Range("C2").Value = 3 Then '如果是第3次登陆
    MsgBox "密码不正确,无权进入系统!", 64, "提示" '提示退出
        Unload UserForm4 '登陆窗体关闭
            If XLapp.Workbooks.Count > 1 Then '如果打开的不止一个工作簿
                    XLapp.ThisWorkbook.Close '关闭当前工作簿
                Else '如果只有一个工作簿
            XLapp.Application.Quit '退出EXCEL
        End If
    End If
end if'●●●●●●上面移到这里
End Sub

[ 本帖最后由 excel333 于 2011-8-1 20:41 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-1 21:12 | 显示全部楼层
非常感谢楼上两位的回复,我在研究下。
1、根据灰袍法师更改DLL名称的意见,改成reg.dll(的确是我的梳忽)。
2、根据excel333 将End If移到末位(好象这个是关键,封装前运行得好好的,为什么要移动,还没搞民懂?)。
3、另外admin登陆时“用户管理”False,经查是我将UserForm4中的“"系统管理员"”改成了“"admin"”,而UserForm3中却没同步更改造成的。

[ 本帖最后由 yl1991 于 2011-8-1 23:25 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-1 23:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 灰袍法师 于 2011-8-1 18:37 发表
把 工程1.dll 改名为 reg.dll 即可自动注册

不过还是加载dll失败,估计是你的dll没写好。

你上传的所谓正确 登录.xls,VBA工程带密码,无法查看。

鄙视这个附件的原作者,纯粹炫耀,抄袭了一点狗屁不是的公 ...


不要生气,VBA工程带密码用工具一秒钟就破解了嘛。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-1 23:35 | 显示全部楼层

封闭未完成登录例子-修改后还有个问题

修改后原问题基本解决,但若不点“确定”进系统而是窗体点击“退出”按钮时则会有“该内存不能为”read” 的错误”报错,虽然不影响使用,但这报错窗体太烦人了,请大家特别是“”excel333 “”和“灰袍法师”再关注下,谢谢!
附源码上传

封闭未完成登录例子-修改后还有个问题.rar

51.23 KB, 下载次数: 204

TA的精华主题

TA的得分主题

发表于 2011-8-2 02:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你的UserForm4里面的退出代码是

    Unload UserForm2 '登陆窗体关闭

应该改为 Unload UserForm4吧???

而且后面的语句也不对

整段改为如下即可
Private Sub CommandButton2_Click() '退出按纽

Unload UserForm4 '登陆窗体关闭
Dim XLwb As Object
Set XLapp = GetObject(, "Excel.Application")
Set XLwb = XLapp.Workbooks
If XLwb.Count > 1 Then  '如果不止一个工作簿
    XLapp.ActiveWorkbook.Close '关闭当前工作簿
Else '如果只有一个工作簿
    XLapp.Application.Quit '退出EXCEL
End If
Set XLapp = Nothing
Set XLwb = Nothing
End Sub

[ 本帖最后由 灰袍法师 于 2011-8-2 02:46 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-2 11:11 | 显示全部楼层
原帖由 灰袍法师 于 2011-8-2 02:11 发表
你的UserForm4里面的退出代码是

    Unload UserForm2 '登陆窗体关闭

应该改为 Unload UserForm4吧???

而且后面的语句也不对

整段改为如下即可
Private Sub CommandButton2_Click() '退出按纽

Un ...

向你学习,非常感谢!!!

[ 本帖最后由 yl1991 于 2011-8-2 11:12 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-8-3 13:22 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 07:59 , Processed in 0.051070 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表