Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用vb.net检测excel表格中的第一个完整单元格_Vb.net_Excel - Fatal编程技术网

用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