2014-01-30 2 views
1

Я работаю над листами Excel, используя macros.найти количество столбцов, используемых на листе Excel, используя макрос

Я хотел подсчитать количество столбцов, используемых в листе. я использовал:

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

на конкретной книге, и это дало значение один больше, чем используемый число столбцов. В других нормальных книгах Excel это дает правильное значение.
Другая команда дает правильное значение для числа столбцов, а именно:

ColLen = Activeworksheet.Cells(1, Columns.count).End(xlToLeft).Column

Его другая часть т.е. число строк используется давая правильное значение во всех листах.

RowLen = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).Row

Любая подсказка, что может быть неправильным в этом листе? Я не могу объяснить его детали, как рассказала моя компания. Таким образом, может быть трудно ответить, поскольку это может быть нелогичным спросить. Если у вас есть какие-либо идеи, сообщите.

+1

UsedRange весьма ненадежны. Используйте '.Find', чтобы найти столбцы. См. Ссылку [ЭТО] (http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba) для строк, которые вы можете изменить для столбцов. –

+1

[ЗДЕСЬ] (http://stackoverflow.com/questions/11883256/copy-last-column-with-data-on-specified-row-to-the-next-blank-column) является ссылкой, на которой я на самом деле был ищет :) –

+1

@SiddharthRout спасибо, теперь он работает :) – Gauranga

ответ

2

Чтобы получить столбцы, самый надежный код: (он работает под всех случаях)

Set rng = ws.Cells.Find(What:="*", _ 
      After:=ws.Range("A1"), _ 
      Lookat:=xlPart, _ 
      LookIn:=xlFormulas, _ 
      SearchOrder:=xlByColumns, _ 
      SearchDirection:=xlPrevious, _ 
      MatchCase:=False) 

If rng Is Nothing Then 
    LastCol = 1 
Else 
    LastCol = rng.Column 
End If 

`

Смежные вопросы