【问题标题】:VBA Excel - changing case to Proper CaseVBA Excel - 将大小写更改为正确大小写
【发布时间】:2018-08-03 09:27:04
【问题描述】:

我是 Stackoverflow 的新手,所以希望我已经在正确的位置发布了这个问题。

我无法让我的代码在 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)

它当前选择直到最后一行的范围,但它不会更改文本的大小写。运行代码没有报错。

提前致谢:)

【问题讨论】:

标签: vba excel


【解决方案1】:

试试这个:

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 也会减慢代码速度,如果可能,直接引用单元格来避免它们。

【讨论】:

  • @Amy 在大约 7-8 分钟内,您将能够选择一个标记为正确。您可以通过单击答案旁边的灰色/绿色复选标记来执行此操作。请回来并将其中一项标记为正确,这是只有您可以做的事情,它会将问题结束为已回答。
  • @Amy 是的,你有。
  • @SiddharthRout 只是站在像你这样的巨人的肩膀上。
【解决方案2】:

试试这个

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

【讨论】:

  • 这也很好用 :) 感谢您的帮助! @jcarroll
  • 我可能会建议将我的代码中的 LastRow = ... 行与 Scott 的答案结合起来。
【解决方案3】:

Application.WorksheetFunction.Proper(range) 应该这样做。有关WorksheetFunction 的文档,请参阅https://msdn.microsoft.com/en-us/library/office/ff834434.aspx

【讨论】:

    【解决方案4】:

    我想将它与命名范围一起使用,并提供了以下代码。也许它会帮助其他人:

    Sub m_MakeProper()
    '2/8/2018
    '
    Application.Volatile True
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.DisplayStatusBar = False
    '
    Worksheets("test").Activate
    '
    Dim LastRow                       As Long
    Dim LastCol                       As Integer
    Dim cell                          As Variant
    Dim thiswksht                     As Worksheet
    Dim thiswb                        As Workbook
    '
    '
    Set thiswksht = ActiveSheet
    If thiswksht.AutoFilterMode Then
        AutoFilterMode = False
    End If
    '
    With thiswksht
        LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
        LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    End With
    '
    Cells(1, 1).Activate
    Rows(1).find("Status").Select
    Range(ActiveCell.Address, Cells(LastRow, ActiveCell.Column)).Select
    Selection.Name = "c_P_Status"
    With Range("c_P_Status")
        .Value = Application.Evaluate("INDEX(PROPER(" & .Address & "),0)")
    End With
    '
    End Sub
    

    【讨论】:

    • 操作,显然错过了将所有内容放在正确的位置。谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 2010-09-18
    • 2017-12-01
    • 2017-08-09
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多