ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2631|回复: 16

[求助] 应用程序定义或对象定义错误

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-20 10:14 | 显示全部楼层 |阅读模式
各位大侠:
     我写的一段代码提示“应用程序定义或对象定义错误”,请各位大侠帮忙给看看,怎么更改一下。
     代码目的:通过“主界面工作表”超链接,或直接点击这个工作表时,需要输入密码才能进入工作表(项目部-人才公寓)。但输入密码时,该工作表内容隐藏不可见。     
     万分感谢各位大侠!
代码如下:
Private Sub Worksheet_Activate()
    Cells.EntireRow.Hidden = True
    Dim x As Integer
    x = InputBox("请确认密码!")
        If x = 3217 Or x = 901 Then
            Sheets("项目部-人才公寓").Select
            Cells.EntireRow.Hidden = False
        Else
            MsgBox "密码错误,请联系管理员。"
            Cells.EntireRow.Hidden = False
            Sheets("主界面").Select
        End If
End Sub



新版资金计划测试模板8.rar

171.58 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2019-1-20 11:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码放sheet1中,其他工作表的Activate事件删除,每个工作表都Activate事件,复制粘贴不麻烦么?
超链接也全删了
Private Sub Worksheet_Activate()
    Dim sh As Worksheet
    For Each sh In Worksheets
        If sh.name <> Me.name Then sh.Visible = 2 '深度隐藏工作表
    Next
End Sub

Private Sub Worksheet_SelectionChange(ByVal rng As Range) '单元格选择变更事件
    Dim name$, pw$
    If rng.Count > 1 Then Exit Sub '选择区域不运行
   
    If rng.Value Like "进入*" Then '如果选中的单元格值包含“进入”
RE:
        pw = InputBox("请输入执行密码", "提示")
        If pw = "" Then Exit Sub '没有输入时退出程序
        
        If pw <> "3217" And pw <> "901" Then
            MsgBox "密码错误!", , "提示"
            GoTo RE: '密码不对代码跳回RE:位置
        End If
        
        '以下密码正确时运行
        name = Right(rng.Value, 3) & "-" & rng.Offset(, -1).Value
        Debug.Print name '立即窗口预览name的值
        Sheets(name).Visible = -1 '显示工作表
        Sheets(name).Select '选择工作表
    End If
   
End Sub

TA的精华主题

TA的得分主题

发表于 2019-1-20 11:13 | 显示全部楼层
name = Right(rng.Value, 3) & "-" & rng.Offset(, -1).Value      
'举例点D6单元格,rng=range("D6"),单元格的值rng.value=“进入工程部”
'Right(rng.Value, 3)截取单元格右边3个字符
'rng.Offset(, -1).Value,D6单元格偏移(0行,-1列),即C6单元格,值为“人才公寓”
'Offset单元格偏移函数,offset(行,列),0或者空 offset(0,0)不偏移,正数(行向下,列向右),负数相反
'最后这些字符链接&起来,name=工程部&-&人才公寓,这个是你的目标工作表名
        

TA的精华主题

TA的得分主题

发表于 2019-1-20 11:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你这个报错应该是不能隐藏全部行,至少保留一行。就像不能隐藏全部工作表一样,至少要留一个工作表

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 13:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
MOY838840554 发表于 2019-1-20 11:21
你这个报错应该是不能隐藏全部行,至少保留一行。就像不能隐藏全部工作表一样,至少要留一个工作表

大侠:附件中的代码为什么运行就不报错呢?和1楼的代码是一样的啊。求解惑,万分感激!
代码:
Private Sub Worksheet_Activate()
    Cells.EntireRow.Hidden = True
    Dim x As Integer
    x = InputBox("请确认密码!")
        If x = 3217 Or x = 901 Then
            Sheets("项目部(人才公寓)").Select
            Cells.EntireRow.Hidden = False
        Else
            MsgBox "密码错误,请联系管理员。"
            Cells.EntireRow.Hidden = False
            Sheets("各项目汇总表").Select
        End If
End Sub

副本.zip

458.79 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2019-1-20 14:22 | 显示全部楼层
知道问题所在了,因为其他对象问题,例如控件、批注。例如你这个表格,有个单选控件,属性是位置可变,如果隐藏全部行,这个控件就没位置可变了,手动隐藏全部行,会提示“不能将对象移到工作表外”。所以至少要留下位置给控件。控件在第2行,就要留下2行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 17:03 | 显示全部楼层
MOY838840554 发表于 2019-1-20 11:00
代码放sheet1中,其他工作表的Activate事件删除,每个工作表都Activate事件,复制粘贴不麻烦么?
超链接也 ...

大侠:
       你的代码我试了,有几个问题还不清楚。
       问题:
1、“主界面”表中的总经理窗口右侧的《单击此处进入》超链接不能用。“总经理、财务总监审阅”表中的《各项目资金支出拟付款明细表窗口》的超链接不能用。----是因为隐藏工作表的关系吗?

2、从“主界面”的《部门进入窗口》下面的超链接,进入各部门时。为了数据安全,每个部门都应有独自的进入密码。但为了查看方便,还设置了通用密码。
代码如下:
pw = InputBox("请输入执行密码", "提示")
        If pw = "" Then Exit Sub '没有输入时退出程序

        If pw <> "3217" And pw <> "901" Then
            MsgBox "密码错误!", , "提示"
            GoTo RE:

我原先是想在,在每一个需要进入的部门工作表下,单独编写代码来实现上述功能。即各部门都有单独的进入密码。
代码如下:
'Sub 部门进入窗口()
'    Dim x As Integer
'    x = InputBox("请提供正确的密码!")
'        If x = 3217 Or x = 901 Then
'            Sheets("项目部-人才公寓").Select
'        Else
'            MsgBox "密码错误,请联系管理员。"
'        End If
'End Sub


3、希望我的表述大侠能明白,不知上述功能,是否能在一个代码中全部实现。再次万分感谢!

新版资金计划测试模板9.zip

178.51 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2019-1-20 18:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不同密码可以把密码存入字典,再读取字典,看附件

新版资金计划测试模板9.zip

206.53 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 21:57 | 显示全部楼层
MOY838840554 发表于 2019-1-20 18:01
不同密码可以把密码存入字典,再读取字典,看附件

大侠:
       “主界面”表中的总经理窗口右侧的《单击此处进入》超链接不能用。(提示:没有这个工作表)“总经理、财务总监审阅”表中的《各项目资金支出拟付款明细表窗口》的超链接不能用。----是因为隐藏工作表的关系吗?
       我想让这两个超链接依次使用。即,点击“主界面”表中的总经理窗口右侧的《单击此处进入》超链接,进入“总经理、财务总监审阅”工作表。然后点击“总经理、财务总监审阅”表中的《各项目资金支出拟付款明细表窗口》的超链接,进入“各项目资金支出拟付款明细表”。       或者还有什么其他办法?

TA的精华主题

TA的得分主题

发表于 2019-1-21 08:23 | 显示全部楼层
ALEX7710 发表于 2019-1-20 21:57
大侠:
       “主界面”表中的总经理窗口右侧的《单击此处进入》超链接不能用。(提示:没有这个工作 ...

代码没写啊。
if rng.value like "进入*"  ,要“进入”开头的,“单机此处进入”是“*进入”,这个你要单独判断。因为这个不能用RIGHT和前面一列的单元格组成工作表名,这个你单独判断。直接把name=工作表名就行了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-28 17:46 , Processed in 0.055469 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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