Office中国论坛/Access中国论坛

标题: 选择指定区域---要求模块 [打印本页]

作者: pureshadow    时间: 2008-3-30 09:37
标题: 选择指定区域---要求模块
这是欢欢爪MM出的题......
作者: pureshadow    时间: 2008-3-30 09:38
说实在的,这题我只会用工作表事件去做……
模块……[:41]
作者: fan0217    时间: 2008-3-30 09:56
录制宏即可得到你想要的模块。
作者: ganrong    时间: 2008-3-30 10:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: pureshadow    时间: 2008-3-30 12:48
问题是录制宏以后必须运行宏才能获得想要的结果,不能像工作表事件,可以直接以改变单元格内容来触发事件。
爪MM的意思是要直接通过模块达到改变单元格内容即可改变选取范围的效果。
作者: 欢欢    时间: 2008-3-30 15:11
小妖是理解我的意思了, 通过录制宏?你鼠标选择哪里,录制后才知道的
循环更不可思忆,没有结果,你循环哪里,有结果的地址,我就不要提这个问题了。。。。。。希望高人指点
作者: Jonathan.K    时间: 2008-3-30 17:22
先问问为什么要逐本求末?
如果可以,利用类模块来取得工作表事件
作者: andymark    时间: 2008-3-30 21:26
很久没接触EXCEL了, 对不了解EXCEL函数的来说, 录制宏是个不错的选择。
根据录制的代码进一步修改成通用涵数,我觉得应该行得通。
作者: 欢欢    时间: 2008-3-30 22:12
小妖,你的师傅也这样,,,,咳!,你们就根据题意解题把!原因一下说不清楚哦!还提录制宏。。。。。
作者: pureshadow    时间: 2008-3-30 22:53
[:28] 爪MM早就是代码高手了,自己写了个五子棋的……
他的问题那是需要高手中的高手来解决的,大家就别再提录制宏了哈
作者: andymark    时间: 2008-3-30 23:36
错了, 不是录制宏,  而是通过录制宏所得的代码修改成相应的代码
作者: andymark    时间: 2008-3-30 23:40
题目要求是按任意2个值来选定区域对吗
并不说对指定的区域进行加减乘除之类的统计
作者: Pandy    时间: 2008-3-31 00:08
不好说
作者: 欢欢    时间: 2008-3-31 14:47
这个解决了,会了就简单,呵呵
Sub DDQY() '得到选择区域
Dim ra As Range
Set ra = Selection
startRow = ra.Row
endRow = ra.Row + ra.Rows.Count - 1
startColumn = Chr(ra.Column + 64)
endColumn = Chr(ra.Column + ra.Columns.Count - 1 + 64)
End Sub
作者: liwen    时间: 2008-3-31 14:49
用什么事件来运行这个代码呢?
作者: 欢欢    时间: 2008-3-31 14:56
再提一下:为什么下面代码,颜色不完全显示
Sub JJ()
Cells.FormatConditions.Delete
    Application.ScreenUpdating = False
ActiveWorkbook.Names.Add Name:="HHHH", RefersToR1C1:="=Sheet3!R12C4:R23C7"
    ActiveWorkbook.Names("HHHH").RefersToRange.Select
    With Selection
.FormatConditions.Add Type:=xlExpression, Formula1:="=ROW()=CELL(""ROW"")"
.EntireColumn.FormatConditions.Add Type:=xlExpression, Formula1:="=ROW()=CELL(""ROW"")"
.FormatConditions(1).Interior.ColorIndex = 38

    End With
    Application.ScreenUpdating = True
End Sub
作者: Jonathan.K    时间: 2008-3-31 16:49
关键是选择区域的事件吧?
作者: tanhong    时间: 2008-3-31 20:33
用类模块,将表事件封装,这算不算用表事件
作者: tanhong    时间: 2008-3-31 22:31
欢欢提出的命题,不用表事件得出列,行首尾数,我用类封装表事件,不知道这样实现算不算。见如下实例:
[attach]29380[/attach]

实例样本:[attach]29381[/attach]
作者: 欢欢    时间: 2008-4-1 18:14
江版厉害,可是还是不能把数值掉用到模块中用,看来只有用我14楼的代码了,16楼的问题有兴趣的再作一下,大致意思是: 1.打开任何工作表工作簿中你选择区域区域可以填色,颜色可以在自己创建的窗体中手动选择 2.如果原有单元格区域有填充的颜色,不能更改 3.还应保留复制粘贴功能 4.如下图:我作出单列的单行的,就是没有1列以上或者1行以上选择区域是的变色没有能实现,看各位高手能把这个擂台攻下吗?
作者: Jonathan.K    时间: 2008-4-1 20:52
http://www.office-cn.net/vvb/thread-31292-1-1.html
作者: 欢欢    时间: 2008-4-1 22:32
很感谢398,,     但是我想用vba'模块作出来,还有方法吗
作者: Jonathan.K    时间: 2008-4-2 09:35
即使用工作表事件还是可以保留复制剪贴的功能,如下代码
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range)
  2.     If Application.CutCopyMode <> False Then
  3.         Application.CutCopyMode = False
  4.         Call ColorBand(target)
  5.     End If
  6. End Sub
  7. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal target As Range)
  8.     If Application.CutCopyMode = False Then
  9.         Call ColorBand(target)
  10.     Else
  11.         Exit Sub
  12.     End If
  13. End Sub
  14. Private Sub ColorBand(ByVal rngTarget As Range)
  15.     On Error Resume Next
  16.     [ChangeColor].FormatConditions.Delete
  17.     rngTarget.EntireRow.Name = "ChangeColor"
  18.     With [ChangeColor].FormatConditions
  19.         .Delete
  20.         .Add xlExpression, , "TRUE"
  21.         .Item(1).Interior.ColorIndex = 17
  22.     End With
  23. End Sub
复制代码
只是,如果是用条件格式方式,将会删除原有的所有条件格式
对用户来是不是最好的选择。
作者: ccccjf    时间: 2008-4-9 00:31
各位看起来都是EXCEL高人
适当研究问题是必须的,过于钻牛角则大可不必。

试想,同样的功能,同样的效果,如果不用EXCEL,而用编程去实现,不是很简单的小儿科吗?为什么要让EXCEL去干力不从心的事呢?费了很大的劲,得到的无非是很简单的结果。

记得小时候上学时,一同学回答问题错误(在两点之间画了几条线,判断那一条最短)而被老师批评。
当时老师做了个让人印象很深刻的比喻:假如A点有一只狗,B点放一块肉,狗是跑直线过去吃肉呢?还是绕个大圈儿跑过去?
同学们齐声回答:当然是直线跑过去。
老师:对啊,狗都知道两点之间直线最短。你们有些人怎么就不知道呢?

从此,我们学会了重要的一条:解决任何问题,都要尽可能把复杂问题简单化,而不是把简单问题复杂化。
作者: tanhong    时间: 2008-4-9 17:27
原帖由 ccccjf 于 2008-4-9 00:31 发表
各位看起来都是EXCEL高人
适当研究问题是必须的,过于钻牛角则大可不必。

试想,同样的功能,同样的效果,如果不用EXCEL,而用编程去实现,不是很简单的小儿科吗?为什么要让EXCEL去干力不从心的事呢?费了很大的 ...


你的观点我很赞同哦.不过我也有不同的看法哦
其一、学习就是一个求知的过程,不明就问,不明就学,多给自己问几个为什么也没有什么不好;
其二、人总有一个好奇心,虽然有时候这种好奇会显得过份的幼稚,但这正是打开未知世界的一把很好钥匙;
其三、学习前人的经验的确可以少走很多的弯路,但如果我们总是跟着走,就会有太多的束缚,而永远无法超跃前人。
作者: 欢欢    时间: 2008-4-9 18:27
两点的距离问题都出来了,假如中间隔条深的河,小狗是不是也要去绕桥呢?  对这个问题,我不在深入了,只有小妖mm和江版gg知道我的问题的缘由,谢谢各位的支持!!-------欢乐小爪
作者: Jonathan.K    时间: 2008-4-15 11:02
看你20楼录制的动画来看,用的是andysky的工具箱,但不觉得反应慢吗?
你所认为的是用 selectionchange事件将导致复制粘贴功能失效
下面还有一个解决办法,在fans论坛里有讨论,如下贴子。
http://www.officefans.net/cdb/viewthread.php?tid=91954
作者: 欢欢    时间: 2008-4-16 21:21
我在学作andysky工具箱,你可以对比一下图片,还是有区别的,谢谢你的再次关心该题目!!
作者: andysky    时间: 2009-3-5 15:36
没看出来这有什么值得讨论




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3