1

在我命名的活动 EXCEL 表上,我在 cell 中放置了一个少于 32 个字符的字符串A1

我想使用字符串A1来重命名工作表。我过去使用过 VBA,但有一段时间没有使用过。

如果有人可以建议在单击单元格 A1 时执行此操作的宏,我会很高兴。是否有任何字符不能出现在 A1 中(我想要 ~ 和下划线)?

4

2 回答 2

1

将此代码粘贴到相关的工作表对象(VBA 编辑器)中。
请注意,您还可以使用事件,例如双击。
在选择活动工作表的单元格“A1”时,工作表名称将成为单元格“A1”包含的值。

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim sSheet_Name             As String

If Target = ActiveSheet.Range("A1") Then
    sSheet_Name = ActiveSheet.Range("A1").Value
    ActiveSheet.Name = sSheet_Name
End If

End Sub

签出:Excel 工作表名称的有效字符

于 2013-01-22T14:53:38.750 回答
0

对于一个完整的过程,我会推荐

  1. 测试工作表名称是否已经存在(防止出错)
  2. 在重命名工作表之前清除无效字符
  3. 检查新工作表名称是否少于 32 个字符(但不能为空)

使用此代码

  • 右键单击您的工作表选项卡
  • View Code
  • 将代码复制并粘贴到
  • Alt+F11返回 Excel

代码由右键单击单元格 A1 触发

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim rng1 As Range
Dim StrNew As String
Dim objRegex As Object
Dim blTest As Boolean
Dim ws As Worksheet
Set rng1 = Intersect(Range("A1"), Target)
If rng1 Is Nothing Then Exit Sub

StrNew = rng1.Value
Set objRegex = CreateObject("vbscript.regexp")

With objRegex
    .Pattern = "[\/\\\?\*\]\[]"
    .Global = True
    blTest = .test(StrNew)
    StrNew = .Replace(StrNew, vbNullString)
End With

On Error Resume Next
Set ws = Sheets(StrNew)
On Error GoTo 0

If ws Is Nothing Then
    If Len(StrNew) > 0 And Len(StrNew) < 32 Then
        ActiveSheet.Name = StrNew
        MsgBox "Sheet name updated to " & StrNew & vbNewLine & IIf(blTest, "Invalid characters were removed", vbNullString)
    Else
        MsgBox "Sheetname of " & StrNew & " is either empty or too long", vbCritical
    End If

Else
    MsgBox "Sheet " & StrNew & " already exists", vbCritical
End If

End Sub
于 2013-01-23T02:33:53.747 回答