2017-06-20 33 views
1

我正在撞牆,試圖找出爲什麼我的複製粘貼不排隊。我認爲我的索引正確地計算出來了,但我仍然錯過了一些東西。第一個數據是正確的,但第二個數據是關閉的,第三個是兩個。它最初分別是兩行和四行,但我發現無論哪種說法是正確的,我都需要更新計數器。正確的行數不復制

我的代碼就是如下:

Dim FirstItem As Integer 
Dim SecondItem As Integer 
Dim Offsetcount As Integer 
Dim Rowoffset As Integer 
Dim true_offset As Integer 
Dim myNum As Integer 

Sheets("Sheet2").Activate 
ActiveSheet.Range("C2").Select 
FirstItem = ActiveCell.Value 
SecondItem = ActiveCell.Offset(1, 0).Value 
Offsetcount = 1 
Rowoffset = 0 
true_offset = 1 
myNum = (Range("C" & Rows.Count).End(xlUp).Row) 
'MsgBox myNum 

Do While myNum > 1 

    true_offset = true_offset + 1 

    If FirstItem = SecondItem Then 
      Offsetcount = Offsetcount + 1 
      Rowoffset = Rowoffset + 1 
      SecondItem = ActiveCell.Offset(Offsetcount, 0).Value 
    Else 
      Set myactivecell = ActiveCell 

      Set myActiveWorksheet = ActiveSheet 'Do I need to declare this and the line below? 
      Set myActiveWorkbook = ActiveWorkbook 
      ActiveSheet.Range(ActiveSheet.Cells(true_offset - Rowoffset, 1), ActiveSheet.Cells(true_offset + 1, 1)).EntireRow.Select 
      Selection.Copy 
      Set new_workbook = Workbooks.Add 
      ActiveSheet.Paste 
      myActiveWorkbook.Activate 
      myActiveWorksheet.Activate 
      myactivecell.Activate 

      ActiveCell.Offset(Offsetcount + 1, 0).Select 
      If ActiveCell.Value = "" Then 
       myNum = 0 
      End If 

      FirstItem = ActiveCell.Value 
      SecondItem = ActiveCell.Offset(1, 0).Value 
      Offsetcount = 1 
      myNum = myNum - 1 
      Rowoffset = 0 

    End If 

Loop 

下面是一些示例數據的屏幕帽:

https://i.stack.imgur.com/EsA3B.png

+0

你能否提供更多有關你想要完成的事情的真實信息?這顯然比複製工作表複雜一點。 – Graham

+0

當然,我得到了一堆行不同的航班號不同的項目,我想分開每個航班。我如何發佈樣本數據? –

+0

您可以將數據作爲圖像發佈。通過編輯你的文章附件 – Karpak

回答

0

好吧,我會告訴你速戰速決您當前的代碼。從這句話中刪除+1

ActiveCell.Offset(Offsetcount + 1, 0).Select 
'       ^^^^ 

這就是說,你的代碼確實需要完整的重構。你抱怨「我的頭靠在牆上」但這是正常的結果,當你不遵循良好的編程實踐規則。

  • 不要被「模仿」的GUI程序,刪除選擇/ activething東西
  • 昏暗所有的變量,沒有例外,並使用Option Explicit
  • 你有太多的變數在你的代碼,他們中的許多人似乎跟蹤同樣的事情。

我希望這有助於。

+1

感謝您的幫助。它確實解決了它。我正在嘗試使用最佳做法。顯然自從我的Undergrad CS課程已經過了很長時間了。我一直在試圖剝離並簡化代碼。現在,我只想獲得一些功能,並從那裏進行微調。我不確定如何在沒有複製/粘貼的情況下執行這些功能。讓我知道我可以學習的東西。 –

+0

@ vba_n00b我很高興知道手頭的問題已經解決。爲了擺脫Select/Activate/ActiveThing的東西,[This SO thread](https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)是一個優秀的地方開始。 –