Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel VBA:是否从左侧返回第一个未隐藏的列?_Excel_Vba - Fatal编程技术网

Excel VBA:是否从左侧返回第一个未隐藏的列?

Excel VBA:是否从左侧返回第一个未隐藏的列?,excel,vba,Excel,Vba,有没有办法获取第一个未隐藏列的列号 因此,如果列A被隐藏,则返回2。 如果列A和B被隐藏,则返回3。 如果A和C被隐藏,则返回2,以此类推 试试这个 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).End(xlToLeft).Column 编辑 证明这是有效的 试试这个 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).End(xlToL

有没有办法获取第一个未隐藏列的列号

因此,如果列A被隐藏,则返回2。
如果列A和B被隐藏,则返回3。
如果A和C被隐藏,则返回2,以此类推

试试这个

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).End(xlToLeft).Column
编辑

证明这是有效的 试试这个

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).End(xlToLeft).Column
编辑

证明这是有效的

子测试()
作为整数的Dim ColCounter
ColCounter=1
当ColCounter>0且ColCounter<66536时执行此操作
如果Sheet1.Columns(ColCounter).Hidden=False,则
MsgBox(ColCounter)
退出Do
如果结束
ColCounter=ColCounter+1
环
端接头
子测试()
作为整数的Dim ColCounter
ColCounter=1
当ColCounter>0且ColCounter<66536时执行此操作
如果Sheet1.Columns(ColCounter).Hidden=False,则
MsgBox(ColCounter)
退出Do
如果结束
ColCounter=ColCounter+1
环
端接头
无循环

更新:不处理最左边的列被隐藏的情况。如果无单元测试是多余的,则Tmdean的较短解决方案更优越

Sub-FirstNonHidden()
变暗rng1 As范围
设置rng1=单元格。特殊单元格(xlCellTypeVisible)
如果是rng1.1列,则
MsgBox rng1.区域(1).列
其他的
MsgBox“无隐藏单元格”
如果结束
端接头
无循环

更新:不处理最左边的列被隐藏的情况。如果无单元测试是多余的,则Tmdean的较短解决方案更优越

Sub-FirstNonHidden()
变暗rng1 As范围
设置rng1=单元格。特殊单元格(xlCellTypeVisible)
如果是rng1.1列,则
MsgBox rng1.区域(1).列
其他的
MsgBox“无隐藏单元格”
如果结束
端接头

最简单的方法可能是

Dim column_num As Long
column_num = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Cells(1).Column
不过,使用循环会更有效一些,就像bhuang3的解决方案一样,但它可以变得更简单一些

Dim cursor As Range, column_num As Long
Set cursor = Range("A1")
Do Until cursor.ColumnWidth > 0
    Set cursor = cursor.Offset(0, 1)
Loop

column_num = cursor.Column

最简单的方法可能是

Dim column_num As Long
column_num = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Cells(1).Column
不过,使用循环会更有效一些,就像bhuang3的解决方案一样,但它可以变得更简单一些

Dim cursor As Range, column_num As Long
Set cursor = Range("A1")
Do Until cursor.ColumnWidth > 0
    Set cursor = cursor.Offset(0, 1)
Loop

column_num = cursor.Column


不幸的是,这对我不起作用。请说明您遇到了什么问题。无论我遇到什么问题,它都返回1。请解释您遇到的问题。无论整数的最大值是32767,它都返回1,因此检查<65536是重复的。@Tmdean谢谢..我只是忘记了excel中列的最大计数…excel 2007和later@Tmdean我明白了,非常感谢:)整数的最大值是32767,所以检查<65536是重复的。@Tmdean谢谢..我只是忘记了excel中列的最大计数…excel 2007和later@Tmdean我明白了,非常感谢:)这会返回一列,不管是否隐藏任何单元格。是的。。。根据我对问题的理解,这就是它应该做的…+1。经过进一步思考,我同意这会返回一列,不管是否隐藏任何单元格。是的。。。根据我对问题的理解,这就是它应该做的…+1。经过进一步思考,我同意我很好奇“有没有办法获得第一个未隐藏列的列号?”这一点尚不清楚。我在谷歌上搜索这个问题的解决方案,结果中出现了这个问题,我似乎很清楚被问到了什么。投票结束问题的人熟悉Excel和VBA吗?顺便说一句,我不是在挖苦人,只是想真正理解这个问题为什么被关闭,以便更好地理解什么是可以接受的,什么是不可以接受的。我很好奇“有没有办法获得第一个未隐藏的列的列号?”这一点还不清楚。我在谷歌上搜索这个问题的解决方案,结果中出现了这个问题,我似乎很清楚被问到了什么。投票结束问题的人熟悉Excel和VBA吗?顺便说一句,不要挖苦人,只想真正理解这个问题为什么被关闭,更好地理解什么是可以接受的,什么是不可以接受的。