我需要编写一个电子表格,当你按下一个按钮时会添加一行数据并询问计算所需的参数,但我似乎无法将其填入下一行的数据中?我是excel中宏的完全开端,并且在我的单一课程上只为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
答案 0 :(得分:1)
好的,我会稍微重构你的代码以使其更具可读性,并尝试回答你的问题。
首先,我相信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)
'Cell Reference'可以是任何单元格,如'A1'或'D24',行是向右偏移的行数(使用负数向左偏移)和列是要偏移向下的列数(使用负数来向上偏移)。因此.offset(0, 0)
的值偏移到了无处。
编辑:您不能使用A列来寻找第一个空白单元格;如果是,请调整offset
值以反映您想要更改其值的单元格。值为1将向右偏移一列或向下偏移一行,-1将偏移一列左或一行向上。
ADDITION:最好使用Range("A1").End(xlDown)
代替循环来查找第一个空白单元格。将范围变量设置为等于此值,并将循环替换为:
set rngSeek = Range("A1").End(xlDown).Offset(1, 0)
然后您可以按照上述方式使用rngSeek
。 (您也可以将rngSeek
重命名为任何变量名称。)