1

名前付きのアクティブな EXCEL シートに、32 文字未満の文字列を cell としましょう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+ F11Excel に戻る

コードは、セル 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 に答える