2016-04-13 35 views
2

我是新來的Stackoverflow,希望我已經發布了這個問題在正確的地方。VBA Excel - 將案例更改爲正確的案例

我無法讓我的代碼在VBA中工作。我希望它選擇列D:F直到最後一個單元格值。通過這個選擇,我想將單元格的大小寫(它們當前是大寫的)改爲正確的大小寫。

Dim Lastrow As Integer 
Dim range As Variant 

With Worksheets("Overdue PO") 
    Lastrow = .Cells(Rows.Count, "D").End(xlUp).Row 
    .range("D2:F" & Lastrow).Select 
    range = Selection.Value 
End With 

Application.Proper (range) 

它目前選擇範圍直到底行,但它不改變文本的大小寫。運行代碼時不會出現錯誤。

感謝提前:)

+0

http://stackoverflow.com/questions/19985895/convert-an-entire-range-to-uppercase-without-looping-through-all-the-cells同樣可以使用'[A1:A20] = [INDEX(PROPER(A1:A20),)]' –

回答

1

試試這個

Sub test() 

Dim Lastrow As Integer 
Dim range As range 
Dim c As range 


With Worksheets("Overdue PO") 
Lastrow = Columns("D:F").Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row 
    .range("D2:F" & Lastrow).Select 
    Set range = Selection 
End With 

For Each c In range 
    c.Value = Application.WorksheetFunction.Proper(c.Value) 
Next c 


End Sub 
+0

這工作得很好:)感謝您的幫助! @jcarroll – Amy

+0

我可能會建議從Scott的答案中結合我的代碼中的LastRow = ...行。 – jcarroll

3

試試這個:

Dim Lastrow As Integer 

With Worksheets("Overdue PO") 
    Lastrow = .Cells(Rows.Count, "D").End(xlUp).Row 
    .Range("D2:F" & Lastrow).Value = .Evaluate("INDEX(PROPER(D2:F" & Lastrow & "),)") 
End With 

這將是近乎即時的,無需循環。

同樣使用.Select.Activate也減慢了代碼的速度,如果可能的話,通過直接引用單元格來減緩代碼。

+0

這是完美的。謝謝你的幫助! :) – Amy

+0

@Amy大約7-8分鐘,你將能夠選擇一個標記爲正確的。您可以通過點擊答案中的灰色/綠色複選標記來完成此操作。請回來標記一個是正確的,這是隻有你能做的事情,它會在回答問題時結束這個問題。 –

+0

我做對了嗎? – Amy