Vba 关于With语句的几个问题
我正在用一些将数据写入表的用户表单代码进行实验(代码本身就是这样)。ST是一些命名范围:Vba 关于With语句的几个问题,vba,excel,Vba,Excel,我正在用一些将数据写入表的用户表单代码进行实验(代码本身就是这样)。ST是一些命名范围: With Range(ST) .Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert .Resize(Range(ST).Rows.Count + 1).Name = ST .Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1 .Cells(Range(ST).
With Range(ST)
.Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
.Resize(Range(ST).Rows.Count + 1).Name = ST
.Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1
.Cells(Range(ST).Rows.Count, 2) = TextBox2.Text
End With
我的问题是:
为什么我可以重写下面的第二行和第三行而不影响最终结果
.Cells(.Count).Offset(1, 0).EntireRow.Insert
.Resize(.Rows.Count + 1).Name = ST
但是改变其他行,例如
.Cells(.Rows.Count, 2) = TextBox2.Text
导致表中应包含TextBox2.Text
的条目返回空白单元格
谢谢(也欢迎对代码的任何其他评论)
编辑:
不幸的是,我发布这个问题正是因为它不像你们说的那样。详细阅读帮助文件后,我相信这句话:
表达式在进入块时计算一次。不能从With块中重新分配表达式
这意味着:
.Resize(Range(ST).Rows.Count + 1).Name = ST
是问题所在,采取了两条路线:
.Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
.Resize(Range(ST).Rows.Count + 1).Name = ST
在街区外,一切都按预期进行!我解释得对吗?
如果我上传了文件,有人会感兴趣吗?(玩具实验代码不到几行)带有。。。End语句非常有用;它有助于加快编码和程序执行。你能读的更多
关于你的问题,;您应该能够使用以下命令删除
中所有行中的范围(ST)
。。。结束
语句 带有。。。End语句非常有用;它有助于加快编码和程序执行。你能读的更多
关于你的问题,;您应该能够使用以下命令删除
中所有行中的范围(ST)
。。。结束
语句 在我的评论之后,您可以用以下任何一种方式编写代码。他们都会做同样的事情
With Range(ST)
.Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
.Resize(Range(ST).Rows.Count + 1).Name = ST
.Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1
.Cells(Range(ST).Rows.Count, 2) = TextBox2.Text
End With
或
或
除我的评论外,您可以用以下任何一种方式编写代码。他们都会做同样的事情
With Range(ST)
.Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
.Resize(Range(ST).Rows.Count + 1).Name = ST
.Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1
.Cells(Range(ST).Rows.Count, 2) = TextBox2.Text
End With
或
或
删除带有end with的
中的范围(ST)
不会对代码产生任何影响删除带有end with的中的范围(ST)
不会对代码产生任何影响不幸的是,事情并不是这样的。我已经对我认为可能存在的问题进行了编辑。你觉得怎么样?谢谢。嗨,不幸的是事情不是这样的。我已经对我认为可能存在的问题进行了编辑。你觉得怎么样?谢谢。不幸的是,在我的例子中,前两个块的输出不一样。我已经编辑了我认为我是如何解决它的,但我不确定我是否正确理解了帮助文件。如有任何意见,将不胜感激。谢谢你的回复!不幸的是,在我的例子中,前两个块没有给出相同的输出。我已经编辑了我认为我是如何解决它的,但我不确定我是否正确理解了帮助文件。如有任何意见,将不胜感激。谢谢你的回复!
With Range(ST)
Dim nCount As Long
nCount = .Rows.Count
.Cells(.Count).Offset(1, 0).EntireRow.Insert
.Resize(nCount + 1).Name = ST
.Cells(nCount, 1) = nCount - 1
.Cells(nCount, 2) = TextBox2.Text
End With