excel vba 高手进

如图,我想把张三的工资依次放在张三的sheet里排成一列,李四的工资依次列在李四的sheet里。我编了个模块,是这样的。
Sub smpname()
Dim myname As String, mytable As Worksheet, i As Integer, r As Integer '定义变量
For i = 1 To 4 '建立从第一个专家到最后一个专家的循环
For Each mytable In Worksheets '循环所有工作表
r = Range("a1").End(xlDown).Row 'r为最后一个非空单元格
If mytable.Name = Sheet1.Cells(i, 1).Value Then
mytable.Cells(r + 1, 1).Value = Sheet1.Cells(i, 2).Value
'如果sheet1中的A1等于工作表名,则将sheet1中的B1拷贝到该工作表的A1中。
End If
Next
Next i
End Sub

没成功。请高手指教。

第1个回答  2014-02-26

变量 r 的取值似乎有问题,应当是 mytable 是的A列最后一个非空单元格,因此需要限定引用对象:

r = mytable.Range("a1").End(xlDown).Row 'r为最后一个非空单元格

另外,如果只有一行记录的话,这行代码将返回工作表的最大行号,因此通常不是从A1开始向下定位,而是从A列最后一行向上定位:

r = mytable.Range("a65536").End(xlUp).Row 'r为最后一个非空单元格

第2个回答  2014-02-26
整体代码虽然略显繁琐,但逻辑性上没有致命错误,唯一需要修改的一处,我觉得是这一句:
r = Range("a1").End(xlDown).Row 'r为最后一个非空单元格

应该修改为:
r = mytable.Range("a65536").End(xlUp).Row 'r为mytable表的最后一个非空单元格
从下向上寻找的目的是防止A列全部为空,这样就没办法得到需要的单元格。本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网