【问题标题】:Select a part of Excel Cell (Not Complete Cell) and convert it to Uppercase by running a macro选择 Excel 单元格的一部分(未完成单元格)并通过运行宏将其转换为大写
【发布时间】:2015-02-20 06:02:33
【问题描述】:

选择 Excel 单元格的一部分(未完成单元格)并通过运行宏将其转换为大写。

我有一段代码可以将选定的单元格或选定的单元格范围转换为大写,但我的要求是,选择将是单元格的一部分(子字符串),如果我执行,它应该转换为大写宏。

例如,我有一个值为“感谢帮助”的单元格

现在我的代码是:

Convert_To_Upper()
Selection.value = UCase(Selection.Value)
end Sub

如果用户选择单元格并运行宏,单元格将更改为“感谢帮助”

现在我的要求是..

如果用户只从单元格中选择“帮助”并运行宏单元格,则应将宏单元格更改为“感谢帮助”

有没有可能做到这一点?

【问题讨论】:

  • 能否请您添加您的excel表格的打印屏幕以及您的尝试。
  • 抱歉,我不知道如何在此处添加打印屏幕...但我使用的是 excel 2003,它不包含任何公式...
  • 如果我理解正确,您想单击一个单元格,通过用鼠标指针标记它来选择字符串的一部分,然后运行一个将其转换为大写的宏。如果是这种情况,我很确定这是不可能的,因为执行宏时会清除选择
  • 你的理解是完美的......如果将宏分配给菜单项,选择不会被清除......这会有所帮助......吗?
  • 当单元格处于编辑模式时,您无法运行宏。 @JonCarlstedt 是对的。做不到,至少按照你的想法是做不到的。

标签: excel vba


【解决方案1】:

简而言之:不,做不到。

一种修复它的极其丑陋的黑客如下:

让用户选择文本并按 CTRL+C 将其复制到剪贴板,然后运行宏。

从剪贴板拉取字符串到一个变量(你必须添加 MSForms 参考)

'Clipboard -> variable S
Dim DataObj As New MSForms.DataObject
Dim S As String
DataObj.GetFromClipboard
S = DataObj.GetText

使用某种差异或正则表达式从单元格中的文本中删除它,将其转换为大写并将其与单元格连接。

它可以完成,但这并不是最佳实践...

【讨论】:

    【解决方案2】:

    您可以在具有 MID 的单元格中选择部分字符串

    Dim var As String
    var = Mid(ActiveCell.Text, 1, 10)
    

    Mid(string, start, 你想要的字符数)

    编辑:

    因此,用户需要选择要更改的字符数:

    'Throw up a popup box
    numbVar= InputBox(Prompt:="Please input how many characters to turn into UPPER", _
              Title:="Anything goes here", Default:="Enter number here")
    
    ' Exit if cancel is pressed
    If numbVar= "" Then Exit Sub
    

    然后用 numbVar 代替 10

    【讨论】:

    • 不错,但选择不会一直保持不变,应该由用户决定他想将多少个字符更改为大写。
    • 这不是问题的一部分,而是询问用户并将其放入变量中并使用它而不是 10
    • 但是有没有办法自动识别用户选择。例如。 Selection.value = UCase(Selection.value).
    • 我不明白你在这里问什么。请用你拥有的代码和你需要它做什么来编辑你的原始问题。
    【解决方案3】:

    试试这个:

    Private Sub test()
    
        ' n is the number of letter you want to have to upper case
        n = 2
    
        Cells(1, 1) = UCase(Left(Cells(1, 1), n)) + Mid(Cells(1, 1), n + 1)
    
    End Sub
    

    UCase(string) = 将字符串转换为大写

    Left(string, int) = 从左边开始取字符串的第一个 int 字符

    Cells(x,y) = 返回位置 (x,y) 的 Cell

    Mid(string, int) = 返回从 int 位置的字符开始的字符串内容

    【讨论】:

    • 抱歉,它只选择了前 2 个字符并改为大写。
    • 我添加了一些解释和一个参数。希望现在更清楚了
    • 为了您更好地理解,让我们取一个值为“Good Luck”的单元格 在某些情况下,用户选择“Good”并运行宏,如果他选择“od”,则“Good”应更改为“GOOD” Luc" 并运行它应该是的宏
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2014-10-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多