2014-01-09 65 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只修剪單元格工作表,需要跨整個工作簿運行我無法弄清楚如何遍歷整個事物。

編輯:是不是也修剪這些細胞的,這是對他們來說,我設計這個創建的電子表格是巨大的更快的方法和需要一段時間來修剪細胞有時

+0

Birds View:'ActiveSheet.UsedRange'?你的意思是'wsh.UsedRange'嗎?現在看其餘的代碼... –

+1

有沒有公式詮釋工作表或只是普通的值? –

+0

因爲這將是一個加載項,這是一些工作簿包含公式的好辦法,所以我嘗試了wsh.UsedRange,但得到了以下錯誤:Object Variable或With block variable not set,但我沒有嘗試過下面的方法,目前正在運行它 – Studento919

回答

9

未經測試

這是什麼你在嘗試?

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」圍繞循環語句也是如此。

當你傳遞一個工作簿引用,也許你應該考慮了變化的外部For循環:

For Each wsh In Worksheets 

到:

For Each wsh In Wb.Worksheets 
+0

+ 1好點! –

+0

這是一種享受,非常感謝我現在感覺有點笨拙哈哈一個簡單的問題是有一種更有效的方法來修剪單元格我的團隊內創建的電子表格是非常可怕的,導致很長的時間來運行或任何類型的工作在你的意見附近 – Studento919

+0

@SiddharthRout:謝謝! – MarkHone

相關問題