Найти LastColumn: пробовали 2 метода, каждый из которых дает свой столбец как последний - PullRequest
0 голосов
/ 01 октября 2018

Это мой метод № 1.Правильный результат должен привести к строке 1 и столбцу 384. Этот метод дает правильный результат, но он крайне неэффективен при активации / выборе и т. Д.

Workbooks.Open Filename:=sDest, UpdateLinks:=0
Windows(sDestFile).Activate
Sheets(sDestTab).Select

'Find LastColumn
Dim colLast As Integer
With ActiveSheet
    colLast = Cells(rowTop, Columns.Count).End(xlToLeft).Column
End With

Затем я создал метод № 2.Этот метод менее очевиден, но он последовательно дает мне строку 1 и столбец 386 в качестве ответа (вместо столбца 384).Я не могу понять, почему изменение в коде сместило бы мою LastColumn на 2.

Workbooks.Open Filename:=sDest, UpdateLinks:=0

'Find Last Column
Dim colLast As Integer
colLast = Workbooks(sDestFile).Worksheets(sDestTab).Cells(rowTop, Columns.Count).End(xlToLeft).Column

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

, когда я хочу найти последнюю строку или столбец, содержащий значение:

Option Explicit

Public Function Row_Last(ws As Worksheet) As Long
    On Error Resume Next
    Row_Last = _
    ws.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    If Row_Last = 0 Then Row_Last = 1
End Function

Public Function Col_Last(ws As Worksheet) As Long
    On Error Resume Next
    Col_Last = _
    ws.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    If Col_Last = 0 Then Col_Last = 1
End Function
0 голосов
/ 01 октября 2018

Используйте .Find.Попробуйте это

Dim lastcol As Long

With Workbooks(sDestFile).Worksheets(sDestTab)
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
        lastcol = .Cells.Find(What:="*", _
                      After:=.Range("A1"), _
                      Lookat:=xlPart, _
                      LookIn:=xlFormulas, _
                      SearchOrder:=xlByColumns, _
                      SearchDirection:=xlPrevious, _
                      MatchCase:=False).Column
    Else
        lastcol = 1
    End If
End With

MsgBox lastcol

Если вы хотите найти последний столбец в строке 1, попробуйте это

Dim wb As Workbook
Dim colLast As Long

Set wb = Workbooks.Open(Filename:=sDest, UpdateLinks:=0)

With wb.Sheets(sDestTab)
    colLast = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...