用vb.net检测excel表格中的第一个完整单元格
我想找到第一个包含数据的单元格。 我使用这个代码,但它不工作。 “选择”中出现错误用vb.net检测excel表格中的第一个完整单元格,vb.net,excel,Vb.net,Excel,我想找到第一个包含数据的单元格。 我使用这个代码,但它不工作。 “选择”中出现错误 Range("A1:BN1").Select y = Selection.Find("*", After:=Range(Selection(1, 1).Address), LookIn:=xlValues).Column 来自OP的评论: 我知道这个 列A中包含数据的第一个单元格(即不为空)可以通过 Cells(1, 1).End(xlDown) 看起来,您所需要的只是一个数字,该数字表示第1行中第一个值的列
Range("A1:BN1").Select
y = Selection.Find("*", After:=Range(Selection(1, 1).Address), LookIn:=xlValues).Column
来自OP的评论:
我知道这个
列A中包含数据的第一个单元格(即不为空)可以通过
Cells(1, 1).End(xlDown)
看起来,您所需要的只是一个数字,该数字表示第1行中第一个值的列索引。如果你想要第一个,你必须在最后一个之后再看下一个。如果在
选择(1,1)
之后查找下一个,那么如果选择(1,1)
不为空,则将获得第二个
Dim y As Long '◄ note: a long, not a range
With Range("A1:BN1")
y = .Find("*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues).Column
End With
Debug.Print y
这是(更好的)无需选择即可获取列索引号的方法。如果您觉得必须继续使用选择
,那么您的代码将更接近以下内容
Dim y As Long
Range("A1:BN1").Select
y = Selection.Find("*", After:=Selection(Selection.Rows.Count, Selection.Columns.Count), LookIn:=xlValues).Column
Debug.Print y
您正在获取选择的地址,并使用range(…)
将其转换回range对象,因此我在该过程中减少了一些操作
附录:
注释表明您希望单元格或整列的第一个值位于第1行。如果是这样,那么这更合适
Dim y As Range '◄ note: now a range
With Range("A1:BN1")
Set y = .Find("*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues) '◄ note no .Column at the end
End With
Debug.Print y.Address
Debug.Print y.EntireColumn.Address
你得到了什么错误?你能给我一个vb的代码吗。此外,如果A1不是空的,那么该代码很有可能找到最后一个,而不是第一个。两者都有好处。要向右看而不是向下看,请将xlRight替换为xlDown。我会使用If-Then-Else来处理A1包含数据的情况;如果A1不包含数据,则使用结尾(xlRight)。我在“with range(“A1:Z10”)“La référence d'objet n'est pas définieáun objet实例”中有一个错误。@tamara-这是因为
.Find
返回的是单元格列号,而不是作为范围对象的单元格。有关替代解决方案,请参阅我的附录。@tamara-如果仍然存在范围父问题,则必须提供足够的VB.Net代码来解决这些问题。上述提供的解决方案旨在解决上述问题,而不是将代码重写为具有未知变量的其他语言。我使用xlWorkSheet lastrow=.Cells(.Rows.Count,1).End(Excel.XlDirection.xlDown)。Row lastcol=.Cells(1,.Columns.Count)。End(Excel.XlDirection.xlToRight).柱端With@tamara-乍一看,你应该从底部开始向上,而不是向下。类似地,你从最右边开始,然后向右看。使用xlUp
和xlToLeft
。此处描述的操作与.Find
的工作方式不同。不要试图把两者混为一谈。
Dim y As Range '◄ note: now a range
With Range("A1:BN1")
Set y = .Find("*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues) '◄ note no .Column at the end
End With
Debug.Print y.Address
Debug.Print y.EntireColumn.Address