设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 4770|回复: 25
打印 上一主题 下一主题

[窗体] 如何打开一个窗体,所有的单元格都非活动状态

[复制链接]
跳转到指定楼层
1#
发表于 2009-2-20 18:53:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我是新来的

我想打开一个窗体,但是只编辑里面3个单元体以及子窗体。其他的单元格和别的都是非激活状态。

如何用VBA实现呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-2-20 19:00:58 | 只看该作者
不需要用VBA,你只要将想设为非激活状态的对象的“可用”属性设为否就行了
3#
 楼主| 发表于 2009-2-20 19:36:19 | 只看该作者
不好意思,我没有表达清楚哈。

是这样的,
我设置了两个按钮打开这个窗体,一个是打开后全部编辑,而另一个只能修改其中3个单元格及子窗体。我现在在第二个按钮中连接了个宏,通过宏把其他所有的不需要编辑的单元格全部设定为非活动状态。但是这样非常繁索,并且以后每次在窗体中添加单元格,都需要更新宏。因此我想请教一下,是否能够首先将所有单元全部设置为非活动状态,然后再将我需要编辑的单元改为活动状态。

请问要如何实现呢?谢谢
4#
发表于 2009-2-20 20:24:15 | 只看该作者
AllowEdits 属性
请参阅 应用于 示例 特性
使用 AllowEdits 属性可以指定用户是否可在使用窗体时编辑已保存的记录。Boolean 型,可读写。

expression.AllowEdits

expression   必需。返回“Applies To”列表中的一个对象的表达式。

设置
AllowEdits 属性使用以下设置:

设置 Visual Basic 说明
是 True   (默认值)用户可以编辑已保存记录。
否 False 用户不能编辑已保存记录。


可以使用窗体属性表、宏或 Visual Basic 来设置 AllowEdits 属性。

说明
如果要防止更改窗体中显示的现有数据,可以使用 AllowEdits 属性。如果要防止更改特定控件中的数据,可以使用 Enabled 或 Locked 属性。

如果要防止更改已有记录(使窗体只读),可以将 AllowAdditions、AllowDeletions 和 AllowEdits 属性设为“否”。也可以将 RecordsetType 属性设置为“快照”,使记录成为只读。

将 AllowEdits 属性设置为“否”时,“删除记录”或“数据输入”菜单命令对现有记录将不可用。(如果将 AllowAdditions 属性设为“是”,则其对新记录将仍然可用。)

无论 AllowEdits 属性的设置如何,通过编程对字段值进行的更改都会使当前记录可被编辑。如果要防止用户对需要通过编程才能编辑的记录(AllowEdits 为“否”)进行更改,请在所有程序化更改后保存记录;保存完针对当前记录未保存的所有更改后,AllowEdits 属性设置将再次发挥作用。

注意  当使用 OpenForm 操作的“数据模式”参数时,Microsoft Access 可能忽略某些窗体的属性设置。如果 OpenForm 操作的“参数模式”参数设置为“编辑”,Microsoft Access 将按以下属性设置打开窗体:

AllowEdits:是
AllowDeletions:是
AllowAdditions:是
DataEntry:否
要防止 OpenForm 操作覆盖任何现有的属性设置,可以省略“数据模式”参数,使 Microsoft Access 使用窗体定义的属性设置。

示例
下面的示例检查窗体上所有控件的 ControlType 属性,并切换每个标签控件和文本框控件的 SpecialEffect 属性。当标签控件的 SpecialEffect 属性设置为“阴影”,文本框控件的 SpecialEffect 属性设置为“普通”,AllowAdditions、AllowDeletions 和 AllowEdits 属性设置为 True 时,intCanEdit 变量将切换到允许编辑基础数据的状态。

Sub ToggleControl(frm As Form)
    Dim ctl As Control
    Dim intI As Integer, intCanEdit As Integer
    Const conTransparent = 0
    Const conWhite = 16777215
    For Each ctl in frm.Controls
        With ctl
            Select Case .ControlType
                Case acLabel
                    If .SpecialEffect = acEffectShadow Then
                        .SpecialEffect = acEffectNormal
                        .BorderStyle = conTransparent
                        intCanEdit = True
                    Else
                        .SpecialEffect = acEffectShadow
                        intCanEdit = False
                    End If
                Case acTextBox
                    If .SpecialEffect = acEffectNormal Then
                        .SpecialEffect = acEffectSunken
                        .BackColor = conWhite
                    Else
                        .SpecialEffect = acEffectNormal
                        .BackColor = frm.Detail.BackColor
                    End If
            End Select
        End With
    Next ctl
    If intCanEdit = IFalse Then
        With frm
            .AllowAdditions = False
            .AllowDeletions = False
            .AllowEdits = False
        End With
    Else
        With frm
            .AllowAdditions = True
            .AllowDeletions = True
            .AllowEdits = True
        End With
    End If
End Sub
5#
发表于 2009-2-20 20:28:19 | 只看该作者
什么是'单元格'? EXCEL 还是 ACCESS ? ,你用了datagrid 控件?


******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
6#
 楼主| 发表于 2009-2-20 20:47:12 | 只看该作者
Access...

不叫单元格吗?。。。不好意思,我一直用的德语access,表达可能不准确。。

datagrid 控件.....不知道是什么。。。我档次很低的。。
7#
发表于 2009-2-20 21:27:59 | 只看该作者
Access...

不叫单元格吗?。。。不好意思,我一直用的德语access,表达可能不准确。。

datagrid 控件.....不知道是什么。。。我档次很低的。。
jun_er 发表于 2009-2-20 20:47


呵呵,一头雾水了吧?

看看这个《面向初学者的窗体设计集成》你现在要的,和你将要想要的都在其中。
8#
 楼主| 发表于 2009-2-20 21:54:52 | 只看该作者
呵呵,一头雾水了吧?

看看这个《面向初学者的窗体设计集成》你现在要的,和你将要想要的都在其中。
todaynew 发表于 2009-2-20 21:27


不好意思,没找到需要的。。。
是不是我没有说清楚,我需要打开窗体,是allowEdits,但是整个窗体中的所有控件及单元格都是非活动状态,应该是enable为 false。
9#
发表于 2009-2-20 22:02:22 | 只看该作者
本帖最后由 todaynew 于 2009-2-20 22:03 编辑

应该就是控件的锁定与解锁吧?

3、双击班级ID或班级名称时,解锁。
Private Sub 班级ID_DblClick(Cancel As Integer)
Me.班级ID.Locked = False
End Sub

Private Sub 班级名称_DblClick(Cancel As Integer)
Me.班级名称.Locked = False
End Sub

4、失去焦点时,锁定班级ID或班级名称。
Private Sub 班级ID_LostFocus()
Me.班级ID.Locked = True
End Sub

Private Sub 班级名称_LostFocus()
Me.班级名称.Locked = True
End Sub
10#
 楼主| 发表于 2009-2-20 22:19:09 | 只看该作者
应该不是的。。。

是这样的,这个窗体,在一种情况下,工程师打开后,可以全部编辑,这当然没有问题,但是在另一种情况下,工程师只能编辑其中一小部分的内容。因此我需要把其他的内容disable。我现在的解决方案是,通过一个宏打开窗体,并且把不能编辑的内容全部设置为enable= false,但是这样很麻烦,尤其是当我以后需要在窗体里添加新的单元格或控件的时候,都需要更新这个宏。

因此我想请问,有没有什么命令,可以把窗体里的所有控件及内容批量设置为enable= false,这样一来,我只需要单独把需要编辑的单元设置为enable就行了。

不知道说清楚了没。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 23:46 , Processed in 0.099057 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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