2017-09-11 12 views
1

VBAを初めて使用しています。あるブックから別のブックにセルをコピーしようとしています。場合によっては、 "送信"ブックファイルには1行しかコピーされません。また、コピーする複数の行がある場合もあります。これは現在、一度に1行だけで動作します。私はまでDoを追加しようとしましたが、コンパイルエラー "loop without do"を取得し続け、私が間違っていることを理解できません。私の "送信"ワークシートでは、セルH4から送信を開始し、列H、行xが空白の場合、ループを終了します。希望は意味がありますありがとう!Loop without Doエラー

Private Sub CommandButton1_Click() 

    Dim RowNumber As Single 
    Dim QuestionID As String 
    Dim Question As String 
    Dim TotalResponses As Single 
    Dim StronglyAgree As Single 
    Dim Agree As Single 
    Dim NA As Single 
    Dim Disagree As Single 
    Dim StronglyDisagree As Single 
    Dim Total As Single 
    Dim RecordID As String 
    Dim MATSEvalSummary As Workbook 

    RowNumber = 4 

    Worksheets("Data for MATS Summary File").Select 

    Do Until Cells.Item("H" & RowNumber) = "" 

     QuestionID = Range("H" & RowNumber) 
     Question = Range("I" & RowNumber) 
     TotalResponses = Range("j" & RowNumber) 
     StronglyAgree = Range("k" & RowNumber) 
     Agree = Range("l" & RowNumber) 
     NA = Range("m" & RowNumber) 
     Disagree = Range("n" & RowNumber) 
     StronglyDisagree = Range("O" & RowNumber) 
     Total = Range("P" & RowNumber) 
     RecordID = Range("u" & RowNumber) 

     Set MATSEvalSummary = Workbooks.Open("C:\MATS Eval Summary\170910 MATS Evals Summary.xlsx") 
     Worksheets("sheet1").Select 
     Worksheets("sheet1").Range("A1").Select 
     RowCount = Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count 
     With Worksheets("Sheet1").Range("A1") 

     .Offset(RowCount, 0) = QuestionID 
     .Offset(RowCount, 1) = Question 
     .Offset(RowCount, 2) = TotalResponses 
     .Offset(RowCount, 3) = StronglyAgree 
     .Offset(RowCount, 4) = Agree 
     .Offset(RowCount, 5) = NA 
     .Offset(RowCount, 6) = Disagree 
     .Offset(RowCount, 7) = StronglyDisagree 
     .Offset(RowCount, 8) = Total 
     .Offset(RowCount, 9) = RecordID 

    RowNumber = RowNumber + 1 

    Loop 

    End With 
    MATSEvalSummary.Save 

    End Sub 
+1

'End With'は' Loop'の前にある必要があります。ワークブックを一度ループを開いて開くと、より良いアプローチに見えます。 –

+0

あなたアレックスKですが、私が "ループ"の前に "終了"を移動すると、コンパイルエラーが発生します。 – rita

答えて

0

RecordID = Range("u" & RowNumber)のuはqである必要がありますか?

Sub test() 
    'Variable Declaration 
    Dim LastRowWithContent As Integer 
    Dim Wb As Workbook 

    'Inializing 
    Wb = Workbook.Name("WorkbookName") 

    'Testing for content 
    If Cells(4, 8) <> "" Then 
     'Finding the last lowest row in column H with a value 
     LastRowWithContent = Cells(Rows.Count, 8).End(xlUp).Row 
     'copying the contents       pasting/Destination 
     Range("H4", Cells(LastRowWithContent, 16)).Copy Wb.Worksheets("Sheet1").Range("A1:I1") 
     Range("U4", Cells(LastRowWithContent, 21)).Copy Wb.Worksheets("Sheet1").Range("J1") 
    End If 
End Sub 

このコードは、あなたが完了するために、探しているものを解決しない場合、私はそれが、少なくともあなたがそれを必要とどのようにそれを形成するためのツールと知識を提供します願っています。