2016-07-21 9 views
0

1つのシート(「New Providers - FPPE」)の行をカットし、列(H)に基づいて複数のシートに貼り付けるマクロを作成しました。私が最初にそれを使用した場合、それがうまく働いていたが、私はソートシート(「新プロバイダ - FPPE」)に追加データを追加したとき、それは完全には機能していません。マクロは、「新しいプロバイダ - FPPE」から行をカットし続けますが、行はシートに移入するために失敗します。私は行がどこに行くのか分かりません。誰かが何が起こっている可能性についての任意の洞察力を持っていますか?私はマクロを書くのがとても新しいので、どんな助けもありがとう!これにマクロが正しく機能していない

InsertSheet customer 
    Set ws = Sheets(Worksheets.Count) 
    CopyRow i, sh, ws, custNameColumn 

Function InsertSheet(shName As String) As Worksheet 
    Set InsertSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) 
    InsertSheet.Name = shName 
End Function 

は、コードのこの部分を変更します。

Option Explicit 

Sub Fr33M4cro() 

Dim sh33tName As String 
Dim custNameColumn As String 
Dim i As Long 
Dim stRow As Long 
Dim customer As String 
Dim ws As Worksheet 
Dim sheetExist As Boolean 
Dim sh As Worksheet 

sh33tName = "New Providers - FPPE" 
custNameColumn = "H" 
stRow = 7 

Set sh = Sheets(sh33tName) 

For i = sh.Range(custNameColumn & sh.Rows.Count).End(xlUp).Row To stRow Step -1 
    customer = sh.Range(custNameColumn & i).Value 
    For Each ws In ThisWorkbook.Sheets 
     If StrComp(ws.Name, customer, vbTextCompare) = 0 Then 
      sheetExist = True 
      Exit For 
     End If 
    Next 
    If sheetExist Then 
     CopyRow i, sh, ws, custNameColumn 
    Else 
     InsertSheet customer 
     Set ws = Sheets(Worksheets.Count) 
     CopyRow i, sh, ws, custNameColumn 
    End If 
    Reset sheetExist 
Next i 

End Sub 

Private Sub CopyRow(i As Long, ByRef sh As Worksheet, ByRef ws As Worksheet, custNameColumn As String) 
Dim wsRow As Long 
wsRow = ws.Range(custNameColumn & ws.Rows.Count).End(xlUp).Row + 1 


ws.Rows(wsRow).EntireRow.Value = sh.Rows(i).EntireRow.Value 
sh.Rows(i).EntireRow.Delete 
End Sub 


Private Sub Reset(ByRef x As Boolean) 
x = False 
End Sub 

Private Sub InsertSheet(shName As String) 
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = shName 
End Sub 
+0

ディあなたは 'macros'タグの説明を読んでいますか?それはここに属しません。 – trincot

+0

あなたは、ブック内の任意のグラフシートを持っていますか? – Rory

+0

私は、ソートされた情報をフィルタリングするために、シートに表を挿入しています。それが機能に影響しますか? –

答えて

0

は、私はあなたが挿入されたワークシートへの参照を返す関数へのあなたのInsertSheetサブを変更示唆します:

Set ws = InsertSheet(customer) 
    CopyRow i, sh, ws, custNameColumn 
+0

まだ行が切れていますが、どこにも挿入されていません。 –

+0

あなたがエラーを取得している場合を除き、それは**どこかに行く**です。データがあるはずのシートのいずれかでCtrl + Endを押してみましたか? – Rory

+0

ああ、それは役に立ちます。ありがとうございました! –

関連する問題