Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2926|回复: 12

[已解决]怎样达到这样效果

[复制链接]
发表于 2010-2-10 14:37 | 显示全部楼层 |阅读模式

A1=1,A2=2

唯一改变A1、A2的值的方式是:选择A1(即A1的值由1变为2),同理A2。谢谢!

PS:之所以用“唯一”,是不希望用手工输入或修改、复制 ... 等操作,怕说漏情况,才这么说的[em04]

最佳答案
2010-2-10 15:13

Dim TempAdd As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Temp
    If Target.Count > 1 Then Exit Sub
    Select Case TempAdd & Target.Address
        Case "$A$1$A$2"
            Sheet1.Unprotect
            Cells.Locked = False
            [A1:A2].Locked = True
            [A1] = 2
            [A2] = 1
            Sheet1.Protect
        Case "$A$2$A$1"
            Sheet1.Unprotect
            Cells.Locked = False
            [A1:A2].Locked = True
            [A2] = 2
            [A1] = 1
            Sheet1.Protect
        Case Else
            TempAdd = Target.Address
    End Select
End Sub
发表于 2010-2-10 14:43 | 显示全部楼层
回复

使用道具 举报

发表于 2010-2-10 14:55 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-2-10 14:55 | 显示全部楼层

QUOTE:
以下是引用小线在2010-2-10 14:43:00的发言:

没看懂

啊,我粗心,说得有问题,重说,这样的:

一开始,A1=1,A2=2;

选择一下A1,再选择一下A1:不发生变化,A1=1,A2=2;

选择一下A1,再选择一下A2:发生了变化,A1=2,A2=1;

即每两次选择后,产生一个效果(变或不变),对A2同理。

对于A1和A2,唯一能改变它们值的方式,只能是2次选择(A1再A2,或A2再A1)之后。

这次,说清些了吧[em11]
[此贴子已经被作者于2010-2-10 14:56:23编辑过]
回复

使用道具 举报

发表于 2010-2-10 15:03 | 显示全部楼层

得请高手用VBA编吧
回复

使用道具 举报

发表于 2010-2-10 15:06 | 显示全部楼层


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static Ads As String
    Dim p As Byte
    If Target.Address = "$A$1" Then
        If Ads = "$A$2" Then
            p = [A1]
            [A1] = [A2]
            [A2] = p
        End If
        Ads = "$A$1"
    ElseIf Target.Address = "$A$2" Then
        If Ads = "$A$1" Then
            p = [A1]
            [A1] = [A2]
            [A2] = p
        End If
        Ads = "$A$2"
    Else
        Ads = Target.Address
    End If
End Sub

这样?

[此贴子已经被作者于2010-2-10 15:09:23编辑过]
回复

使用道具 举报

发表于 2010-2-10 15:13 | 显示全部楼层    本楼为最佳答案   


Dim TempAdd As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Temp
    If Target.Count > 1 Then Exit Sub
    Select Case TempAdd & Target.Address
        Case "$A$1$A$2"
            Sheet1.Unprotect
            Cells.Locked = False
            [A1:A2].Locked = True
            [A1] = 2
            [A2] = 1
            Sheet1.Protect
        Case "$A$2$A$1"
            Sheet1.Unprotect
            Cells.Locked = False
            [A1:A2].Locked = True
            [A2] = 2
            [A1] = 1
            Sheet1.Protect
        Case Else
            TempAdd = Target.Address
    End Select
End Sub
回复

使用道具 举报

发表于 2010-2-10 15:34 | 显示全部楼层

看明白了[em02]

想办法拦截鼠标的单击事件,先保存当前单元格地址addr=selection.address和EXCEL中默认的事件程序,在事件过程中加入:if addr=selection.address then do something

mouse hook和窗体子类化都可以达到这个目的

可但是,以前都弄过 不稳定

回复

使用道具 举报

发表于 2010-2-10 16:20 | 显示全部楼层

什么时候能写好了 我这里有个鼠标 经常单击变双击 说不定能用上[em01]
回复

使用道具 举报

发表于 2010-2-10 17:08 | 显示全部楼层

可以左右键交换位置啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 07:37 , Processed in 0.327155 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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