2014-01-23 68 views
0

它是一个简单的代码去片拉成一排,再回到第一个表贴好,然后重复,直到在去库存的变化列中的值(新员工)此时需要制作新的工作表才能开始存储新数据。并重复,直到完成。之前结束的子Excel宏do while循环不编译

Loop 

Dim i As Integer 
Dim j As Integer 

Set i = 2 
Set j = 1 
Do While i < 6 
    Sheets("Inventory").Select 
    If Cells("i,1").Value = Cells("i-1,1").Value Then 
     Cells("i:i").Select 
     Selection.Copy 
     Sheets("Sheetj").Select 
     Cells("i,1").Select 
     Selection.Paste 
     i = i + 1 
    Else 
     Sheets.Add After:=Sheets(Sheets.Count) 
     j = j + 1 
     Sheets("Inventory").Select 
     Cells("i:i").Select 
     Application.CutCopyMode = False 
     Selection.Copy 
     Sheets("Sheetj").Select 
     Range("A3").Select 
     ActiveSheet.Paste 
     i = i + 1 
    End If 

End Sub 
+1

你有没有尝试去除双引号,其中'i'的意思是变量的值?像'Cells(“i:i”)'......改成'Cells(i&“:”&i)' –

+1

@PankajJaju,这是非常有礼貌的方式。我相信这会非常有帮助:)。 –

+0

“Object Required” –

回答

0
Sub test() 

Dim i As Integer 
Dim j As Integer 

i = 2 ' got rid of set 
j = 1 ' got rid of set 
Do While i < 6 
    Sheets("Inventory").Select 
    If Cells("i,1").Value = Cells("i-1,1").Value Then 
     Cells("i:i").Select 
     Selection.Copy 
     Sheets("Sheetj").Select 
     Cells("i,1").Select 
     Selection.Paste 
     i = i + 1 
    Else 
     Sheets.Add After:=Sheets(Sheets.Count) 
     j = j + 1 
     Sheets("Inventory").Select 
     Cells("i:i").Select 
     Application.CutCopyMode = False 
     Selection.Copy 
     Sheets("Sheets" & j).Select ' for completeness... 
     Range("A3").Select 
     ActiveSheet.Paste 
     i = i + 1 
    End If 
    Loop ' missing this 


End Sub 
+0

这仍然会复制到SheetJ,而不是新的表单? – brettdj

+0

我想它会基于这一行“Sheets(”Sheetj“)。选择”。如果您需要此代码,您可以随时根据您的需求进行定制。我的目标是帮助解决OP的编译错误。我相信他可以从那里定制自己的用途。 – SeekingAlpha

+0

随意回答与你认为是正确答案的问题。这是一个开放的社会;) – SeekingAlpha

1

添加此。我也不应该有双引号,如果你参考我应该是什么数字。应该像细胞(我,1)或细胞(我,我),我会离开你去修复其余的。

对不起,误解你原来的职位。固定。

+1

又一个问题 - 'Cells(“A1”)'不正确的语法,'Range(“A1”)'是正确的。 –

+0

更新它到细胞将使用它的方式。我一直在消隐哈哈。在工作中漫长的一天。 –

+1

好工作。 +1以改善答案。 –

1

我会这样做,为每个数据组添加新的工作表。

更新时间:减少了我的代码现在你的 “sheetj” 部分明确

代码

Sub Other() 
Dim rng1 As Range 
Dim rng2 As Range 
Dim ws As Worksheet 
Set rng1 = Sheets("Inventory").Range("I2:i6") 
Set ws = Sheets.Add 
For Each rng2 In rng1 
    If rng2 <> rng2.Offset(-1, 0) Then Set ws = Sheets.Add 
    rng2.EntireRow.Copy ws.Rows(rng2.Row) 
Next 
End Sub 
+0

@SeekingAlpha下投票应与代码问题被保留。如果您看到错误,请随时指出错误。 – brettdj

0

未经检验的,但我想你使用太多的选择(与.activate试过吗?)

Dim i As long 'long is faster for loops 
Dim j As long 

i = 2 'dont need set 
j = 1 
Do While i < 6 
    with Sheets("Inventory") 
     If .Cells(i,1).Value = .Cells(i-1,1).Value Then 'i removed the quotes in cells 
      .range("i:i").Copy Sheets("Sheetj").Cells(i,1) 
      i = i + 1 
     Else 
      Sheets.Add After:=Sheets(Sheets.Count) 
      j = j + 1 
      .Cells("i:i").copy Sheets("Sheetj").Range("A3") 
      i = i + 1 
     End If 
    end with 
    Application.CutCopyMode = False 
loop 'you forgot a ending loop