我有一个简单的宏,但我生锈了,因为我几年没有编码。就像我可以说的那样,我有两个不同的工作簿。如果我打开的工作簿具有某个值(或没有值),我希望它用“提议或提议前”填充其他工作簿(“测试模板”)。 对我来说这一切都很容易。但是由于工作表在我们输入数据时添加了行,我需要它在下一个可用行中填充这些值。
我会附加代码,但不要担心提案内容,我只需要将范围从特定单元格更改为列中的下一个可用单元格。 (如果d28已满,请输入d29)。
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 :(得分: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
更多详情:
Range("B3")
.End(xlDown)
Row
+ 1
(因为您想要下一个可用的行nextRow
...然后你可以像这样使用:
y.Sheets("Sheet1").Range("B" & nextRow ).PasteSpecial
答案 1 :(得分:0)
首先,您需要一个变量,您将存储最后使用的行号:
dim lngRows as long
lngRows = Cells(Rows.Count, "D").End(xlUp).Row
然后使用.Range("B28")
或.Cells(lngRows+1,2)
.Range("B"&lngRows)
所在的代码行
答案 2 :(得分: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") 'Column B
If .Range("c15") = "" Then
Target.Offset(, 2) = "proposal" 'Column D
Else
Target.Offset(, 2) = "preproposal"
End If
End With
End Sub