2017-09-06 11 views
0

Forループの各値をセルに取り込む必要があります。従業員名と従業員IDを含むワークシートがあります。別のワークシートにセルを挿入し、デフォルトのプリンタ(またはPDF優先)に印刷しようとしています。次にリスト内の次の従業員に同じ操作を行います。VBAはforループから次の値を返します

ご協力いただきまして誠にありがとうございます。私が現在持っているものは、最初の従業員名とIDは返されません。

Sub btn_CompleteForm() 

Dim Rng As Range, cell As Range, EmpName As Range 
Set NameRng = Range("Employees!A2:Employees!A10") 
Set IDRng = Range("Employees!B2:Employees!B10") 
Set EmpName = Range("ActionNotice!D7") 
Set EmpID = Range("ActionNotice!D8") 

For Each cell In NameRng 
    EmpName = NameRng.Value 
    EmpID = IDRng.Value 
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ 
     IgnorePrintAreas:=False 
    MsgBox "Next" 
Next cell 

End Sub 

答えて

1

であるべき。 EmpName = NameRng.ValueEmpName = cell.Valueに変更すると、NameRngをループしないでNameRngまでcellまでループしています。

Sub btn_CompleteForm() 
    Dim Rng As Range, cell As Range, EmpName As Range 
    With Worksheets("ActionNotice") 
     For Each cell In Range("Employees!A2:Employees!A10") 
      .Range("D7") = cell.value     'Name 
      .Range("D8") = cell.Offset(0, 1).value 'ID 
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ 
               IgnorePrintAreas:=False 
      MsgBox "Next" 
     Next cell 
    End With 
End Sub 
+0

は常に最初の行のIDを指していますか? – kaza

+0

本当に助けてくれてありがとう!それは従業員の名前を返すためにはうまくいくが、それでも従業員のIDは返されない。 –

+1

ああ、それは私の間違いです。私はそれを編集して1つの列に移動するために 'offset'を追加します – Jarom

2
For Each cell In NameRng 
     EmpName = NameRng.Value 
     EmpID = IDRng.Value 
     ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ 
      IgnorePrintAreas:=False 
     MsgBox "Next" 
    Next cell 

これは一つだけの簡単な修正を要求すべきである

For nRow = 1 to NameRng.Count 
     EmpName.Value = NameRng.Cells(nRow,1).Value 
     EmpID.Value = IDRng.Cells(nRow,1).Value 
     ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ 
      IgnorePrintAreas:=False 
     MsgBox "Next" 
    Next nRow 
+1

あなたのコードブロックの問題がcell'反復するが、すべての値 'NameRng.Value'は常にため、すべてに同じ名前を印刷し、最初の値を指すことになるためNameRng'.But'で異なる値を持つように 'でした行。 – kaza

+0

本当に助けてくれてありがとう!それは従業員の名前を返すためにはうまくいくが、それでも従業員のIDは返されない。 –

+1

「EmpID = IDRng.Cells(i、1)」を実行し、「EmpID = IDRng.Value」を実行しないでください。 – kaza

関連する問題