当前位置:编程学习 > VB >>

高手救急!!! 重赏

TD.xsl表当中有俩个工作表:sheet1和sheet2,两个工作表当中都有一列小区ID号而且是唯一的,我想建立个宏将这两个工作表连接起来以小区ID为准。sheet1只有一列小区ID,用宏将sheet2的ID与sheet1ID关联起来,当我打开sheet1并按下宏快捷键时,sheet1 将自动匹配sheet2ID,小区ID相同则将sheet2当中相应ID行内容复制到sheet1当中,当sheet1小区ID找不到匹配ID 时,sheet1相应ID行内容为空白。

哪位高手能帮忙指点一下啊,谢谢! 
Const cstMaxRow1 = 1325 'sheet1's id column's max row
Const cstMaxRow2 = 1325 'sheet2's id column's max row


Dim lngRow1, lngRow2 As Long
Dim str1, str2 As String
Dim a, b As Long




Sub Macro1()
'
' Macro1 Macro
'
' 快捷键: Ctrl+z
a = 1
b = 1

For lngRow1 = 2 To cstMaxRow1
  str1 = Sheets(1).Cells(lngRow1, 11).Value
 If a <> b Then
       GoTo w
       End If
      For lngRow2 = 1 To cstMaxRow2
       If a <> b Then
       GoTo e
       End If
w:
          str2 = Sheets(2).Cells(lngRow2, 1).Value
          If str1 = str2 Then
            Sheets("sheet2").Select
            Cells(lngRow2 - 6, 2).Select
            Range(Selection, Selection.End(xlToRight)).Select
            Selection.Copy
            Sheets("sheet1").Select
            Cells(lngRow1 - 1, 16).Select
            ActiveSheet.Paste
             a = a + 1
           End If
         
        Next lngRow2
e:
Next lngRow1
End Sub
以上语句能实现sheet2当中内容复制到sheet1当中,但是不能判断ID是否相同,请高手指点问题出在哪里?谢谢 --------------------编程问答-------------------- 问题1:

Sheets("sheet2").Select
Sheets("sheet1").Select
应改为
Sheets("sheet2").Activate
Sheets("sheet1").Activate

问题2:
Cells(lngRow2 - 6, 2).Select有问题。试想,如果lngRow2<7会怎么样?那么lngRow2 - 6 <1,此行语句将造成错误,“下标越界”。

问题3:

GoTo用得太乱,程序逻辑混乱。 --------------------编程问答-------------------- 先解决这几个问题再说。至于功能上的问题,还没有细看。 --------------------编程问答-------------------- 错误1:高手救急!!! 重赏 ,我更喜欢楼主换成重谢
错误2:TD.xsl表当中有俩个工作表,xsl文件格式.....
所以问题不在考虑的范围 --------------------编程问答--------------------
Private Sub Command1_Click()

r1 = sheet1.Range("a65535").End(xlUp).Row '判断行数,关键字段
r2 = sheet2.Range("c65535").End(xlUp).Row

For i = 1 To r1
  For j = 1 To r2
    If sheet1.cells(i, 1) = sheet2.cells(j, 1) Then
      '''''复制语句,你要怎么复制就怎么复制,不帮你写了
    End If
Next j, i



End Sub
--------------------编程问答-------------------- 用我这个方法写好多了

不用go to 来 go to 去的 --------------------编程问答-------------------- 给点分,好不? --------------------编程问答-------------------- Sheets("sheet2").Select
           Cells(j, 2).Select
            Range(Selection, Selection.End(xlToRight)).Select
            Selection.Copy
           Sheets("sheet1").Select
            Cells(i, 16).Select '''''复制语句

按4楼添加复制语句 但是执行结果没有复制过去啊? --------------------编程问答-------------------- Sheets("sheet2").Activate
Sheets("sheet1").Activate  --------------------编程问答--------------------
引用 7 楼 jsj_0310 的回复:
Sheets("sheet2").Select
          Cells(j, 2).Select
            Range(Selection, Selection.End(xlToRight)).Select
            Selection.Copy
          Sheets("sheet1").Select
            Cells(i, 16).Select '''''复制语句

按4楼添加复制语句 但是执行结果没有复制过去啊?



我说大哥您能不能不要老是写宏的语句呀,你什么时候引用了selection对象?我的代码中没有select任何对象,
正确的代码应该是:
if '''''''''''''''''' then
  sheet1.cells(X,X)=sheet2.cells(X,X)
end if

有了以上语句,你爱怎么复制就怎么复制了,明白没有? --------------------编程问答-------------------- 行行好,给点分 --------------------编程问答-------------------- 我记得我回复过这个贴子的,这不会是重发的吧?
用七楼的就行,我一直用,只是二个表之间不用select或Activate 也行
如果表多了,必须用Activate ,曾有一次我是四个表之间倒数据,开始没用Activate 总是不成功,(原来一直日二个表间进行数据复制),后来用了就行了 --------------------编程问答-------------------- 使用range.find()要快很多倍 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- --------------------编程问答-------------------- EXCEL用可以直接用VLOOKUP函数完成你的要求
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,