如何使用macros填充电子表格中列表的下一行?

我需要编写一个电子表格,当你按下一个button时,会添加一行数据,并要求计算所需的参数,但是我似乎无法将它填入下一行的数据中。 我在excel中是一个完整的macros,并且只对我的uni做了非常基本的matlab编程。 我的脚本到目前为止如下:

Sub AddPosTol() ' AddPosTol Macro Dim rngSeek As Range Set rngSeek = Range("B1") While rngSeek <> "" 'If the cell isn't empty, drop down one row: rngSeek = rngSeek.Offset(1, 0) End With rngSeek.Offset(0, 1) With .Font .Name = "Solid Edge ANSI1 Symbols" .Size = 11 .Value = 1 End With <--added this End With 'don't need to call Range() around rngSeek - it is already a range type rngSeek.Offset(0, 3) = "=RC[-1]" rngSeek.Offset(0, 4) = "0" With rngSeek.Offset(1, 1) .Font.Bold = True <--don't really need a With if only one statement End With 'can use a With statement here if you want: With rngSeek .Offset(1, 1) = "X value" .Offset(2, 1) = "Y Value" .Offset(0, 4) = "=2*SQRT((R[1]C[-3]-R[1]C)^2+(R[2]C[-3]-R[2]C)^2)" .Offset(0, 5) = "=2*SQRT((R4C3-R[1]C)^2+(R5C3-R[2]C)^2)" .Offset(0, 6) = "=2*SQRT((R[1]C[-3]-R[1]C)^2+(R[2]C[-3]-R[2]C)^2)" .Offset(0, 7) = "=2*SQRT((R[1]C[-3]-R[1]C)^2+(R[2]C[-3]-R[2]C)^2)" .Offset(0, 8) = "=2*SQRT((R4C3-R[1]C)^2+(R5C3-R[2]C)^2)" .Offset(0, 2) = (InputBox("Insert Positional Tolerance Diametre")) .Offset(1, 2) = (InputBox("Insert X value on drawing")) .Offset(2, 2) = (InputBox("Insert Y value on drawing")) End With End Sub 

好吧,我将重构你的代码,使其更具可读性,并尝试回答你的问题。

首先,我相信lastrow = Worksheets("Sheet1").Rows.Count将返回工作表中的行数,而不是你当前填充的行数。当我跑这条线时,我得到了1048576! 要find第一个行,我们需要find一列,每列肯定会有一个填充值; 然后,在该列下循环寻找一个空单元格:这是您的第一个空行:

 Dim rngSeek as range set rngSeek = Range("A1") <--your starting cell While rngSeek <> "" 'If the cell isn't empty, drop down one row: rngSeek = rngSeek.Offset(1, 0) Wend 'rngSeek is now sitting at the first row that has a blank in column A 

所以这个技巧会发现我们正在寻找的第一行。 那么,我们只是用数据填充那一行。 您可以利用上面的代码片段中的其他元素,以便更新时更容易:特别是.offset方法:

你的代码:

 With rngSeek.offset(0, 2) With .Font .Name = "Solid Edge ANSI1 Symbols" .Size = 11 End With .value = 1 End With 'repeat for all cells: no need to select them first, just use .offset 

FYI .Offset如下所示:

 Range("Cell Reference").Offset(rows, columns) 

其中“单元格引用”可以是任何单元格,例如“A1”或“D24”,行是向右偏移的行数(使用负数偏移到左侧),列是要偏移的列数向下 (使用负向偏移)。 所以.offset(0, 0)值偏移.offset(0, 0)

编辑:您可能不会使用列A来查找第一个空白单元格; 如果是的话,调整offset值以反映你想改变哪个单元格的值。 值为1将向右偏移一列或向下偏移一列,-1将偏移一列向左向上一列。

附加:最好使用Range("A1").End(xlDown)而不是循环find第一个空白单元格。 将范围variables设置为等于此值,并将循环replace为:

 set rngSeek = Range("A1").End(xlDown).Offset(1, 0) 

你可以用上面描述的方式使用rngSeek 。 (你也可以把rngSeek重命名为任何variables名)。