gpt4 book ai didi

excel - 用于连接行和名字的第一个字母 + 姓氏的第一个字母的 WorksheetChange 事件

转载 作者:行者123 更新时间:2023-12-03 00:50:12 25 4
gpt4 key购买 nike

我认为代码应该是这样的,但是我在尝试处理名字和姓氏的这一行上遇到了错误。基本上,我想在 A 列中创建一个代码,该代码是人员名字的第一个字母和人员姓氏的第一个字母,与行号连接起来。该行将是事件行(始终为 A 列),名字和姓氏将存储在 B 列中。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 1 Then Exit Sub

On Error GoTo ErrHandler
Application.EnableEvents = False
If Target.Column = 1 Then
Target.Offset(0, 0).FormulaR1C1 = "=ROW()"
TV1 = Target.Offset(0, 0).FormulaR1C1
Target.Offset(0, 0).FormulaR1C1 = "=UPPER(LEFT(R[" & "=ROW()" & "]C[1],1)&MID(R[" & "=ROW()" & "]C[1],FIND("" "",R[" & "=ROW()" & "]C[1],1)+1,1))"
TV2 = Target.Offset(0, 0).FormulaR1C1
Target.Offset(0, 0).Value = TV2 & "-" & TV1
End If

End Sub

最佳答案

我不想避免处理多个单元格作为目标。处理多个单元并不难。

禁用事件并执行处理后,您不会再次打开它们。您的代码只会运行一次,而无需手动重新打开事件。

如果您将名字和姓氏放入 B 列,那么处理是否应该按照 B 列而不是 A 列进行处理?

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("B")) Is Nothing Then
On Error GoTo ErrHandler
Application.EnableEvents = False
Dim trgt As Range
For Each trgt In Intersect(Target, Target.Parent.UsedRange, Columns("B"))
trgt = StrConv(Trim(trgt.Value2), vbProperCase)
If CBool(InStr(2, trgt.Value2, Chr(32))) Then
trgt.Offset(0, -1) = _
UCase(Left(trgt.Value2, 1)) & _
UCase(Mid(trgt.Value2, InStr(1, trgt.Value2, Chr(32)) + 1, 1)) & _
Format(trgt.Row, "000")
End If
Next trgt
End If

ErrHandler:
Application.EnableEvents = True
End Sub

我添加了一些修剪和正确大小写转换,以自动更正输入到 B 列中的值。

在下图中,我从 G5:G8 复制名称并将其粘贴到 B2:B5 中。

enter image description here

关于excel - 用于连接行和名字的第一个字母 + 姓氏的第一个字母的 WorksheetChange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43049891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com