2013-05-10 211 views
0

我真的很擅长并且遇到一些问题。我试图创建一个出勤表,出于安全原因而定期更新一整天。在所有可能的名字上,我都有一张专栏供不同公司,名称,营地,房间和现场使用。我已经写了我的代码,以便如果一个人在现场而不是1在现场专栏中,并且如果他们不在现场,则为0。当出现1时,我希望将他们的姓名和所有其他信息传输到出席表中,以便唯一显示的名称是现场出现的名称。如果他们在现场,我希望空间留空。 我有两个问题,我的代码:我在运行vba时出现运行时错误1004

Sub onsite() 

    x = 3 'start at row 3 


    'start the loop 
    Do While Cells(x, 6) <> "" 

     'look for data with '1' 
     If Cells(x, 6) = "1" Then 

     'copy the row if it contains '1' 
     Worksheets("Sheet1").Rows(x).Copy 

     'go to main ERP. activate it 
     Worksheets("Sheet2").Activate 

     **erow = Sheet2.Cells(Rows.Count, 6).End(x1Up).Offset(1, 0).Row** 
     'paste data 

     '**ERROR OCCURS HERE** 
     ActiveSheet.Paste Destination:=Worksheets("Sheet2").Rows(erow) 

     End If 

     'go to all names and activate 
     Worksheets("AllNames").Activate 

     'loop through the other rows 
     x = x + 1 

    Loop 

End Sub 

的第一个问题是,在我到达粗线我得到一个错误“1004”消息和代码停止工作

的另一个问题是,我不知道如何将'erow ='换成代码,当一个人在他们的网站列上有0时跳过代码

请帮忙!

回答

0

This MS Knowledgebase article描述了错误的原因和解决方法。

基本上这是编程复制和粘贴整行时出现的问题。您必须仅选择行中实际使用的单元格。

1
Sub onsite() 
    Dim x as long, erow as Long 
    Dim shtSrc as Worksheet, shtDest as worksheet 

    Set shtSrc = Worksheets("Sheet1") 
    Set shtDest = Worksheets("Sheet2") 
    erow = shtDest.Cells(rows.count, 6).End(x1Up).Row+1 

    x = 3  

    Do While shtSrc.Cells(x, 6) <> "" 

     If shtSrc.Cells(x, 6) = "1" Then 

      shtSrc.Rows(x).Copy shtDest.cells(erow,1) 
      erow = erow+1 

     End If 
     x = x + 1 

    Loop 

End Sub