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

时间:2013-10-11 12:54:47

标签: excel vba

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

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

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

现在我的代码是:

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

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

现在我的要求是......

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

有可能实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

简而言之:不,它无法完成。

非常丑陋的黑客种类修复它如下:

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

将字符串从剪贴板拖到变量(您必须添加MSForms参考)

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

使用某种diff或regex从单元格中的文本中删除它,将其转换为upper并将其与单元格连接。

它完成了它,但它不是最佳实践......

答案 1 :(得分:0)

试试这个:

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)的单元格

Mid(string,int)=返回从位置int

中的字符开始的字符串的内容

答案 2 :(得分:0)

您可以使用MID

选择单元格中的部分字符串
Dim var As String
var = Mid(ActiveCell.Text, 1, 10)

中(字符串,开头,你想要的字符数)

编辑:

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

'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