2017-03-22 71 views
0

我試圖將=LOWERCASE()公式應用於同一工作簿中多個工作表中的四列(J,O,T和Y)。將公式應用於Excel中多個工作表中的多列

這是我到目前爲止所使用的VBA代碼,它應用於正確的列,但是它爲每個列都返回一個錯誤。

Sub Clean_Lowercase() 
Const N As Integer = 1 
Dim r As Long, i As Integer, X As Integer, t As Long 
Dim rng As Range, r As Range 
Dim v As Variant 
v = Array("J", "O", "T", "Y") 
t = 1 
For i = 1 To Sheets.Count - 1 
r = Sheets(i).UsedRange.Rows.Count 
For X = 0 To UBound(v) 
    Set rng = Sheets(i).Range(v(X) & N & ":" & v(X) & r) 
    For Each r In rng 
     r.Formula = "=LOWERCASE()" 
Next 
Next 
End Sub 

我對VBA編碼非常陌生,任何建議都非常感謝!我真的很想學習。

非常感謝!

+0

您正在試圖插入一個公式,將覆蓋與所述數據實際公式和公式需要參考。如果您試圖將單元格中的數據更改爲小寫,那麼'r.Value = Lcase $(r.Value)' –

+0

啊,好吧!我應該插入'r.Value = Lcase&(r.Value)'來代替'r.Formula'嗎? –

+0

是的,但它是'Lcase $(r.Value)' –

回答

0

這有幾個問題。

  1. 您正在使用r兩次,一次作爲一個長,一次是一個範圍。
  2. The For Each loop's Next is missing
  3. 該公式需要一個您希望設置爲小寫字母的參考。 例如,如果要使用左小室格的小寫值,則應寫入:=LOWERCASE(R[1]C[-1])
  4. 表是基於1的集合,因此如果您編寫For i = 1 To Sheets.Count - 1,,最後一個表格將不會被處理(可能這是故意的? )和碼會引發錯誤在所述第一片材(沒有片材(0)存在)

像這樣工作的:

Sub Clean_Lowercase() 
    Const N As Integer = 1 
    Dim r As Long, i As Integer, X As Integer, t As Long 
    Dim rng As Range, ri As Range 
    Dim v As Variant 
    v = Array("J", "O", "T", "Y") 
    t = 1 
    For i = 1 To Sheets.Count 
     r = Sheets(i).UsedRange.Rows.Count 
     For X = 0 To UBound(v) 
      Set rng = Sheets(i).Range(v(X) & N & ":" & v(X) & r) 
      For Each ri In rng 
       ri.Formula = "=LOWERCASE(R[1]C[-1])" 
      Next 
     Next 
    Next 
End Sub 
+0

非常感謝!這些修改以及u/Scott Craner的評論使代碼正常工作! –

相關問題