2014-01-09 4 views
3

Я попытался добавить функциональность к расширению надстройки excel, которая выравнивает ведущие пробелы в конце используемых ячеек и, возможно, даже анализирует текст. Причина, по которой мне нужно сделать это просто, чтобы превратить его в гиперссылку, которую я уже работаю, но частичные детали.Обрезать все ячейки в рабочей книге (VBA)

Это то, что я пытался до сих пор, у меня это обрезку active.worksheet утра, на котором это хорошо, но я не могу понять, как:

  1. Обрезка Каждая ячейка используется по всей книге.
  2. А также разобрать текст, если это возможно

Это моя попытка Обрезка всю книгу, ее что-то простое, я просто знаю, я просто не могу понять это:

Sub DoTrim(Wb As Workbook) 
Dim cell As Range 
Dim str As String 
Dim nAscii As Integer 
Dim wsh As Worksheet 

For Each wsh In Worksheets 
    With wsh.UsedRange 
     For Each cell In ActiveSheet.UsedRange 
      str = Trim(cell) 
      If Len(str) > 0 Then 
         nAscii = Asc(Left(str, 1)) 
         If nAscii < 33 Or nAscii = 160 Then 
          If Len(str) > 1 Then 
           str = Right(str, Len(str) - 1) 
          Else 
           str = "" 
          End If 
         End If 
        End If 
        cell = str 
     Next cell 
    End With 
Next wsh 
End Sub 

Любые советы был бы рад, что я довольно новичок в этом языке, поэтому извините, если я пою, как полный Newb!

TL; DR Обрезает ячейки только рабочий лист am on, нужно пробежать всю книгу. Я не могу понять, как перебирать ее по всему предмету.

EDIT: Это также более быстрый способ обрезки этих клеток, то электронные таблицы, созданные для которых я проектировании это массивны и занимает некоторое время, чтобы обрезать клетки временами

+0

Birds View: 'ActiveSheet.UsedRange'? Возможно, вы имели в виду 'wsh.UsedRange'? Теперь смотрим на остальную часть кода ... –

+1

Существуют ли формулы int eh worksheets или просто значения? –

+0

Поскольку это будет надстройка, хорошая возможность для некоторых книг содержать формулы, я попытался использовать wsh.UsedRange, но получить ошибку: Object Variable или с переменной блока не установлен, но я не пробовал ниже метода, в настоящее время выполняется его сейчас – Studento919

ответ

9

UNTESTED

Является ли это то, что Вы пытаетесь?

Sub DoTrim(Wb As Workbook) 
    Dim aCell As Range 
    Dim wsh As Worksheet 

    '~~> If you are using it in an Add-In, it is advisable 
    '~~> to keep the user posted :) 
    Application.StatusBar = "Processing Worksheets... Please do not disturb..." 
    DoEvents 

    Application.ScreenUpdating = False 

    For Each wsh In Wb.Worksheets 
     With wsh 
      Application.StatusBar = "Processing Worksheet " & _ 
            .Name & ". Please do not disturb..." 
      DoEvents 

      For Each aCell In .UsedRange 
       If Not aCell.Value = "" And aCell.HasFormula = False Then 
        With aCell 
         .Value = Replace(.Value, Chr(160), "") 
         .Value = Application.WorksheetFunction.Clean(.Value) 
         .Value = Trim(.Value) 
        End With 
       End If 
      Next aCell 
     End With 
    Next wsh 

    Application.ScreenUpdating = True 
    Application.StatusBar = "Done" 
End Sub 
+0

Ницца! +1 от меня тоже! – MarkHone

+1

@MarkHone: TY! Вы очень добры. :) –

+2

@Siddarth Rout: совсем нет - вы прилагаете много усилий в свои ответы. – MarkHone

6

Я согласен с Siddarth:

For Each cell In ActiveSheet.UsedRange 

должно быть:

For Each cell In wsh.UsedRange 

Я бы подумал, что вы должны быть в состоянии удалить с «с» wsh.UsedRange заявление по контуру, а также.

Как вы передаете в ссылке УПРАЖНЕНИЯ, возможно, вам следует рассмотреть Changin ваш внешний цикл от:

For Each wsh In Worksheets 

к:

For Each wsh In Wb.Worksheets 
+0

+ 1 Хорошие очки! –

+0

Это работает, спасибо большое, я чувствую себя немного глупым, теперь LOL. Быстрый вопрос - есть более эффективный способ обрезать ячейки, созданные в моей команде электронные таблицы, довольно ужасающие, что приводит к длительным временам для запуска или любой работы вокруг, на ваш взгляд, – Studento919

+0

@SiddharthRout: спасибо! – MarkHone

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