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

  显示原文与译文双语对照的内容
0 0

我需要编写一个电子表格,当你按一下一行数据,并询问计算需要的参数。 我是一个完整的begginner到宏的宏,并且只做了非常基本的编程为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
时间:原作者:6个回答

0 0

好,我要重构你的代码,使它更易读,并且尝试回答你的问题。

首先我相信 lastrow = Worksheets("Sheet1").Rows.Count 返回工作表中的行数,而不是当前填充的行数。 当我运行那条线路时,我得到了 1048576 ! 要查找第一个行,需要查找一个列,其中每一行都有一个值填充,然后循环查找空单元格: 这是你的第一个空行:

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

参考 .offset的内容如下:

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

这里的'单元格引用'可以是任意单元格,如'a1'或者'd24',行是要偏移的行的行数,行的数目为 right,列的数目为 offset down ( 使用负数向上偏移) 。 所以 .offset(0, 0) 偏移的值为零。

注意:如果你不使用列A,你可以使用 offset 值来反映你要修改的单元格值。 值 1将偏移一列或者一列,-1将偏移一列左对齐或者一行向上偏移。

:使用代替循环找到第一个空白单元格会更好。 将范围变量设置为等于,并将循环替换为:

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

然后你可以按照上面描述的方式使用 rngSeek 。 ( 你可以将 rngSeek 重命名为任何变量 NAME ) 。

原作者:
...