微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA,在整个工作表中找到最后使用的列

如何解决VBA,在整个工作表中找到最后使用的列

我在Google上搜索了很多,发现了很多不同的解决方案,但是我需要改进我现在使用的解决方案。

我想使用find方法在工作表中查找最后使用的列,而不考虑删除的单元格。

我想要的是获取使用的最后一列,包括起始单元格行中的那一列。在下图中,如果我使用我的代码,它将给出最后一列= 4,因为在第二行中,数据停在了第4列。为什么它不给出5(标题列)呢?

谢谢!

With ActiveSheet
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
    findlastcol = .Cells.Find(What:="*",_
                  After:=.Range("A1"),_
                  LookAt:=xlPart,_
                  LookIn:=xlFormulas,_
                  SearchOrder:=xlByColumns,_
                  SearchDirection:=xlPrevIoUs,_
                  MatchCase:=False).Column
Else
    findlastcol = 1
End If
End With

示例表 screenshot

+---------+---------+---------+---------+---------+
| Header1 | Header2 | Header3 | Header4 | Header5 |
+---------+---------+---------+---------+---------+
| Data    | Data    | Data    | Data    |         |
+---------+---------+---------+---------+---------+

解决方法

自动筛选器开始查找方法

  • 带有Find的{​​{1}}方法几乎可以证明是“防弹”,除非您遇到的情况涉及过滤器。
  • 以下示例显示了如何通过关闭xlFormulas来实现此目的,这并不是人们想要的。它还显示了如何存在三个不需要的参数。另外,这是另一种方法,不需要AutoFilter
  • 一种适当的解决方案是将当前过滤器复制到Filter对象中,然后稍后再应用它。这是example的用法。

代码

CountA
  • 由于您可能知道标题所在的行,并且数据将没有标题那么多的列,因此可以使用以下方法:

代码

Sub testBulletProof()
    Dim LastCol As Long
    Dim rng As Range
    With ActiveSheet
        If .AutoFilterMode Then
            .AutoFilterMode = False
        End If
        Set rng = .Cells.Find(What:="*",_
                              LookIn:=xlFormulas,_
                              SearchOrder:=xlByColumns,_
                              SearchDirection:=xlPrevious)
    End With
    If Not rng Is Nothing Then
        LastCol = rng.Column
    Else
        LastCol = 1
    End If
    Debug.Print LastCol
End Sub
,

您可以尝试以下代码:

Sub FindLastColumn()

Dim iLastCol As Integer

ActiveSheet.UsedRange 'Refreshing used range (may need to save wb also)

iLastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column


End Sub
,

或者,您可以尝试:

@Override
public void afterTextChanged(Editable editable) {
       int index = 1;
       String str = null;
       if(editable != null){
               str = editable.toString();
               index = Integer.parseInt(str);
               if (index <= 30 && index >= 1)
                     pager.setCurrentItem(index-1);
               else
                     Toast.makeText(getActivity(),"Please enter a digit number between 1~30 ",Toast.LENGTH_SHORT).show();
            }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。