2017-03-22 30 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的评论使代码正常工作! –

相关问题