本页主题: Execl 宏问题:如何查找一个变量? 打印 | 加为IE收藏 | 复制链接 | 收藏主题 | 上一主题 | 下一主题

bbsriver
杀人游戏MVP勋章I 杀人游戏MVP勋章II
级别: 管理员


精华: 52
发帖: 17391
威望: 8729 点
金钱: 7064 静电币
支持度: 19801 点
在线时间:13725(小时)
注册时间:2002-11-21
最后登录:2016-12-22

 Execl 宏问题:如何查找一个变量?

Quote:
Cells.Find(What:="09107101131000006872", After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).


上面这段里头,现在我想把 What:="09107101131000006872" 指向一个具体的单元格,比如A2,每执行一次宏what就自动读取A2里面的值,然后执行 Find。这样每次我只要往A2里输一个新值就可以执行新的查找了。

如何写这个命令。

Quote:
Activate
  Range("F1533:J1533,L1533").Select


执行完查找之后,我想自动选定查找到的单元格同一行右侧的几个单元格,复制数据并粘贴到指定位置。也就是说,Range("F1533:J1533,L1533") 中的1533要成为一个根据查找到的单元格所在行而确定值的一个变量,又当如何写?

或者我的思路本根行不通?如果行不通有什么替代方案?

本人execl宏知识基本等于0起点,答复的大虾不要讲得太深,能让宏盲看懂最好。
Posted: 2006-03-24 10:52 | [楼 主]
galilette
级别: 嘉宾


精华: 30
发帖: 2139
威望: 1382 点
金钱: 0 静电币
支持度: 0 点
在线时间:3012(小时)
注册时间:2002-05-01
最后登录:2019-03-12

 

这两个问题归结起来都是如何引用/指向单元格的问题.
其实这个偶也不懂,, 不过用关键字cell reference 搜一下office自带的visual basic help就有答案了

1
改成比如
Quote:

What:=[a2]



2
这个是Referring to Cells Relative to Other Cells 这个主题里的, 用比如activecell.offset(row,col)来引用.

[edit]
activecell can be substituted by any legal cell reference, e.g.,
Quote:

sub foo()
[a5].offset(10,0).value="bar"
end sub

this effectively sets [a15] as string "bar". notice that ".Value", being the default "Property", can be omitted. that's why in (1) we only need [a2] but not [a2].value. This is a common practice of all VB implementations (VB, VBA, VBS, etc)
[ 此贴被galilette在2006-03-24 13:29重新编辑 ]
Posted: 2006-03-24 12:30 | 1 楼
bbsriver
杀人游戏MVP勋章I 杀人游戏MVP勋章II
级别: 管理员


精华: 52
发帖: 17391
威望: 8729 点
金钱: 7064 静电币
支持度: 19801 点
在线时间:13725(小时)
注册时间:2002-11-21
最后登录:2016-12-22

 

哈哈,最后写成了这么个东西,谢谢大头

写得可能比较弱,不过够用了

Copy code
  Cells.Find(What:=[E1674], After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
  ActiveCell.Offset(0, 1).Select '
  Selection.Copy
  Range("F1674").Select
  ActiveSheet.Paste
 
  Cells.Find(What:=[E1674], After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
  ActiveCell.Offset(0, 2).Select '
  Selection.Copy
  Range("G1674").Select
  ActiveSheet.Paste
 
  Cells.Find(What:=[E1674], After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
  ActiveCell.Offset(0, 3).Select '
  Selection.Copy
  Range("H1674").Select
  ActiveSheet.Paste
 
  Cells.Find(What:=[E1674], After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
  ActiveCell.Offset(0, 4).Select '
  Selection.Copy
  Range("I1674").Select
  ActiveSheet.Paste
 
  Cells.Find(What:=[E1674], After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
  ActiveCell.Offset(0, 5).Select '
  Selection.Copy
  Range("J1674").Select
  ActiveSheet.Paste
 
  Cells.Find(What:=[E1674], After:=ActiveCell, LookIn:= _
      xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
      xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
  ActiveCell.Offset(0, 6).Select '
  Selection.Copy
  Range("K1674").Select
  ActiveSheet.Paste
Posted: 2006-03-24 13:39 | 2 楼
bbsriver
杀人游戏MVP勋章I 杀人游戏MVP勋章II
级别: 管理员


精华: 52
发帖: 17391
威望: 8729 点
金钱: 7064 静电币
支持度: 19801 点
在线时间:13725(小时)
注册时间:2002-11-21
最后登录:2016-12-22

 

另一个问题:
Quote:
OnEntry 当用户在工作表中输入值时触发。该过程一直要到用户按下回车键或者移动到另外一个单元格时才触发。


如果用这个命令来触发上面的宏,比如一旦修改A2单元格的值就自动触发上面的宏,那么 OnEntry 命令的语法是什么?

visual basic help 没看懂 :p
Posted: 2006-03-24 15:16 | 3 楼
mecyl
清香白莲
杀人游戏MVP大师勋章I 杀人游戏MVP大师勋章II 杀人游戏MVP勋章I
级别: 管理员


精华: 12
发帖: 3868
威望: 2673 点
金钱: 390 静电币
支持度: 21740 点
在线时间:3212(小时)
注册时间:2005-07-28
最后登录:2024-06-24

 

ONENTRY 是一个事件

所以这样

在数据表的Auto_Open过程中加入下面的语句,auto_open过程是在数据表打开的时侯就会自动加载的过程
单元格名称.onentry=过程名(就是你的宏)
例:

Copy code
Sub Auto_Open()
A1.OnEntry = "Macro1"
End Sub


这个Auto_Open过程要写到单元格数据表的代码里,宏则可以在全局模块里
[ 此贴被mecyl在2006-03-25 20:38重新编辑 ]
Posted: 2006-03-25 19:46 | 4 楼
bbsriver
杀人游戏MVP勋章I 杀人游戏MVP勋章II
级别: 管理员


精华: 52
发帖: 17391
威望: 8729 点
金钱: 7064 静电币
支持度: 19801 点
在线时间:13725(小时)
注册时间:2002-11-21
最后登录:2016-12-22

 

哈,谢谢。

昨天发这个帖子的时候是临时抱佛脚要解决一个很烦的海量数据核对的工作,所以只求速成。现在已经做完了。今天去买了本VBA的书来从abc看起。
Posted: 2006-03-25 20:59 | 5 楼
帖子浏览记录 版块浏览记录
狗狗静电BBS - wwW.DoGGiEhoMe.CoM » 电脑全方位 Computer Guide

沪ICP备05008186号
Powered by PHPWind Styled by MagiColor