2012-01-03 2 views
0

顧客の名前に基づいて一連の情報を顧客の対応するブックにコピーするマクロを作成しようとしています。たとえば、ABC Industriesという顧客がいる場合は、その行をABC Industriesのワークブックに新しい行にコピーする必要があります。条件付きで別のブックに名前に基づいて行をコピーします。

おかげ

+1

役に立たなかったことを投稿できますか? –

答えて

1

私は寛大で、あなたはどこから始めれば分からないと仮定するつもりです。

この回答のすべての情報は、過去2〜3ヶ月の質問と回答を調べることで見つけることができます。特にexcel-vbaというタグの下に、このサイトに関する多くの関連情報があります。あなたが試みたことを証明する小さな、具体的な質問をすると、より良い回答が得られます。

あなたが提案していることは良いことではありません。複数のワークブックにまたがってデータを複製しています。保証ワークブックはまもなく絶好のステップです。

以下のコードを試してみてください。データが1回だけ表示されるようにブックをリンクすることを検討してください。また、同じデータを非常に異なる視点で見たい場合は、Accessが優れたツールになると思われます。

Option Explicit 

Sub WriteToOtherWorkbook() 

    Dim PathCrnt As String 
    Dim RowNext As Long 
    Dim WBookOther As Workbook 
    Dim WBookOtherName As String 

    ' I assume all workbooks are in the same folder at the active workbook 
    PathCrnt = Application.ActiveWorkbook.Path 

    If Workbooks.Count > 1 Then 
    ' It is easy to get into a muddle if there are multiple workbooks 
    ' open at the start of a macro like this. Avoid the problem until 
    ' you understand it. 
    Call MsgBox("Please close all other workbooks", vbOKOnly) 
    Exit Sub 
    End If 

    ' I assume you know how to find the name of the relevant workbook. 
    WBookOtherName = "ABC Industries.xls" 

    ' Open the named workbook  
    Set WBookOther = Workbooks.Open(PathCrnt & "\" & WBookOtherName) 
    With WBookOther 
    ' I assume you have some system for naming the sheets in the 
    ' company workbooks. 
    With .Sheets("XXXXXX") 

     ' If you know that the last row will have a value in, for example, 
     ' column "B" use this code which is the equivalent of going to 
     ' the bottom of column "B", clicking Ctrl+Up to find the last 
     ' cell with a value and then adding one to that value. 
     RowNext = .Cells(Rows.Count, "B").End(xlUp).Row + 1 

     ' If you are not sure which column of the last row is 
     ' guaranteed to contain a value, use this code. 
     RowNext = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1 

     ' Write some values to the row 
     .Cells(RowNext, 1) = "A" 
     .Cells(RowNext, 2) = "B" 

    End With 
    .Save  ' Save the changes 
    .Close  ' Close the workbook 
    Set WBookOther = Nothing ' Clear reference to workbook 
    End With 

End Sub 

このコードは、特定の名前を検索するワークシートで機能します。

For InxWS = 1 To Worksheets.Count 
    If Worksheets(InxWS).Name = "ABC Industries" Then 
    Found = True 
    Exit For 
    EndIf 
Next 

If Found Then 
    With Worksheets(InxWS) 
    ' Add data 
    End With 
Else 
    Call MsgBox("No worksheet for AC Industries",vbYesOK) 
Endif 

私はこれで十分です。私が最初に言ったように、あなたは一般的な助けより多くを提供する前に、もっと具体的にする必要があります。

+0

ああ、そうだ。私は実際に間違った言葉を実際に使用しました。私は、ワークブックではなく、適切な顧客ワークシートに情報を取得しようとしています。 – user1128795

+0

データを複製することは、これまでどこに置いても良い考えではありません。誰かが1つのコピーを更新するのは簡単ですが、他のコピーは更新しない方が簡単です。私はあなたに多くの顧客がいないことを願っています。私は40のワークシートを持つワークブックで作業しており、ナビゲートすることは非常に困難です。理論的な制限はワークブックごとに255のワークシートだと私は思う。元のコードをそのまま残し、ワークシートを見つけるためのコードを追加しました。 –

関連する問題