2011-12-21 7 views
3

に、私は、ユーザーが以前に入力された名前で、ブックを保存して終了かなり大規模なマクロは、シート名

  • を書いています複数の無効な文字を置き換えます。
  • 私はこれのためにシートのタイトルを使用していますので、ファイルシステムエラー(/\*|?:<>")をスローする予約文字を取り除く必要があります。

私は任意の1つのステートメントでアンダースコアで複数の文字を置換する方法がある、Replace()文を多数使用することを避けるために希望 - よりのようなものは?

ありがとうございます!

答えて

7

を使用することができます信じていますあなたは無効なもののために有効な文字列のためのTrueFalseを返すために、以下のような :)

何かを使用して、すでに述べています。

上記の項目を追加しました。必要に応じて特殊文字をエスケープしています。

[更新:追加の置換機能]

Sub TestCleanNames() 
    Dim StrArr() 
    Dim StrTst 
    StrArr = Array("Am i ok", "Sheet||a", "audited??", "Sheet1") 
    For Each StrTst In StrArr 
     MsgBox StrTst & " = " & ValidSheetName(CStr(StrTst)) & vbNewLine & CleanSheetName(CStr(StrTst)) 
    Next 
End Sub 

有効な名前の機能

Function ValidSheetName(strIn As String) As Boolean 
    Dim objRegex As Object 
    Set objRegex = CreateObject("vbscript.regexp") 
    objRegex.Pattern = "[\<\>\*\\\/\?|]" 
    ValidSheetName = Not objRegex.test(strIn) 
End Function 

クリーン機能

Function CleanSheetName(strIn As String) As String 
    Dim objRegex As Object 
    Set objRegex = CreateObject("vbscript.regexp") 
    With objRegex 
     .Global = True 
     .Pattern = "[\<\>\*\\\/\?|]" 
     CleanSheetName = .Replace(strIn, "_") 
    End With 
End Function 
+0

+1バックスラッシュ、 '/'、 '*'、 '?'は、ワークシート名の禁止文字なので、テストする必要はありません。 – JimmyPena

+1

残念ながら実際のシート名と私が言及している名前は異なります - 私の名前はシートのヘッダーに入ります!しかし、brettdjの応答はこの1つで、非常に完璧です、ありがとう! – sgtpepper113

0

clean()を見ましたか?

また

、ビットメシエが、私は、あなたは喜んであなたがこれらの文字のほとんどは、シート名の文字、つまり*?[]など

しかしなどとして、既に無効であることがわかります'substitute'

Substitute(text, old_text, new_text, nth_appearance) 
関連する問題