2017-10-31 10 views
0

私は幾分単純なマクロを持っていますが、私は数年でコード化していないので錆びています。私はそれを置くことができるだけで、私は2つの異なるワークブックを持っています。開いているワークブックに特定の値(または値なし)がある場合は、他のワークブック(「テストテンプレート」)に「プロポーザルまたはプリプロポル」のいずれかを入力します。 それはすべて私にとって簡単でした。しかし、ワークシートはデータを入力するときに行を追加するので、次の使用可能な行に値を入力する必要があります。与えられた列の次の利用可能なセルに書き込む

私はコードを添付しますが、提案事項について心配する必要はありません。特定のセルからその列の次の利用可能なセルに変更された範囲が必要です。 (d28がいっぱいであれば、d29に入れます)。

Here is a screenshot of code and the two workbooks

Public Sub foo() 

Dim x As Workbook 
Dim y As Workbook 

'## Open both workbooks first: 
Set x = ActiveWorkbook 
Set y = Workbooks.Open("C:\Users\hmaggio\Desktop\Test Template.xlsx") 




'copy Names from x(active): 
x.Sheets("Sheet1").Range("C4").Copy 

'paste to y worksheet(template): 
y.Sheets("Sheet1").Range("B28").PasteSpecial 



If x.Sheets("Sheet1").Range("C15") = "" Then 
y.Sheets("Sheet1").Range("D28").Value = "proposal" 
Else 

y.Sheets("Sheet1").Range("D28").Value = "preproposal" 


End If 

答えて

0

オブジェクトRangeは、特定の方向の最後の範囲を返すEndと呼ばれる方法を提供します。あなたのケースでは

Range("A1").End(xlDown) '<-- returns the last non-empty range going down from cell A1 
Range("A1").End(xlUp) '<-- same, but going up 
Range("A1").End(xlToRight) '<-- same, but going right 
Range("A2").End(xlToLeft) '<-- same, but going left 

、したがって、あなたは次のように列Bの最後の行を検出して使用することができます。

nextRow = y.Sheets("Sheet1").Range("B3").End(xlDown).Row + 1 

詳細

  • あなたの最初の範囲列BはヘッダーですRange("B3")
  • ダウン.End(xlDown)
  • で具体的に、あなたが
  • 使用可能な次の行をしたい原因あなたがいること...変数nextRow

内の行を保存する(あなたが+ 1を追加し、その範囲

  • のを取得します

    y.Sheets("Sheet1").Range("B" & nextRow).PasteSpecial 
    
  • 0

    最初に、最後に使用された行番号を保存する変数が必要です。

    dim lngRows as long 
    lngRows = Cells(Rows.Count, "D").End(xlUp).Row 
    

    その後

    0

    この

    Public Sub foo() 
    
        Dim x As Workbook 
        Dim y As Workbook 
        Dim fromWs As Worksheet 
        Dim toWs As Worksheet 
        Dim Target As Range 
    
        '## Open both workbooks first: 
        Set x = ActiveWorkbook 
        Set y = Workbooks.Open("C:\Users\hmaggio\Desktop\Test Template.xlsx") 
    
    
        Set fromWs = x.Sheets("Sheet1") 
        Set toWs = y.Sheets("Sheet1") 
    
        With fromWs 
         Set Target = toWs.Range("b" & Rows.Count).End(xlUp)(2) '<~~next row Column B cell 
         Target = .Range("c4") 'Columm B 
         If .Range("c15") = "" Then 
          Target.Offset(, 2) = "proposal" 'Column D 
         Else 
          Target.Offset(, 2) = "preproposal" 
         End If 
        End With 
    
    End Sub 
    
    を試してみてくださいあなたはどちらか .Cells(lngRows+1,2).Range("B"&lngRows).Range("B28")を持っているコードのあなたの行を置き換えます
    関連する問題