2016-04-08 11 views
0

何かを行う方法についての簡単な質問があります。 マクロは、現在開いているワークブックを新しいものとして保存する必要があります。通常は単純ですが、ファイル名に日付が含まれている場合は、今日の日付に変更する必要があります。ワークブック名​​の日付を置き換えます。

いくつかの例:

  • (...)2015-01-01.xlsは(...)v2016-04-08.xlsm
  • (...)として保存する必要があります01-01-2015.xlsmは(...)として保存する必要があります。v2016-04-08.xlsm
  • (...)&他のすべての日付形式を(...)として保存する必要があります。v2016-04 -08.xlsm
  • (...)xlsは(...)として保存する必要があります。v2016-04-08.xlsm

私の質問は、どうすれば簡単にできるのですか?私はIFの束をコードする必要がありますか?最後にそれを置き換える方法は?私はLIKE演算子を使用することができますが、置き換えで私は引数で生の文字列を提供する必要があります..

おかげさしで時間をとってくれてありがとう!

+0

私は正規表現をお勧めします - > http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions -regex-in-microsoft-excel-both-in-cell-and-loop –

答えて

0

私はここで、このコードを見つけました:http://www.mrexcel.com/forum/excel-questions/632128-visual-basic-applications-extract-date-text.html

を、私は単一の日付のためにそれを更新しましたし、文字列内の日付を返すことができますが、他のフォーマットに対処するためのパターンを更新する必要があります。うまくいけば、他の誰かがあなたにそれを手伝ってもらいたい。

Sub CallIt() 
Dim MyDate As String 
    If DateRet(Range("B2").Text, MyDate) Then 
     MsgBox MyDate 
    Else 
     '... something to handle if the string is glitched in some manner. 
    End If 
End Sub 

Function DateRet(ByVal CellText As String, sDate As String) As Boolean 
    Static REX   As Object ' RegExp 
    Dim rexMC   As Object ' MatchCollection 
    Dim dTemp   As Date 
    Dim ValsSplit  As Variant 

    If REX Is Nothing Then 
     Set REX = CreateObject("VBScript.RegExp") 
     With REX 
      .Global = True 
      .Pattern = "\b[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}\b" 
     End With 
    End If 

    With REX 
     If .Test(CellText) Then 
      Set rexMC = .Execute(CellText) 
      If rexMC.Count = 1 Then 
       sDate = .Execute(CellText)(0) 
       DateRet = True 
      Else 
       DateRet = False 
      End If 
     Else 
      DateRet = False 
     End If 
    End With 
End Function 
+0

私はそれを掘り下げます。本当にありがとうございます! :) – Damian

+0

さらに詳しく調べるには、これらのサイトが役立つかもしれません:http://www.regular-expressions.info/またはhttp://www.regxlib.com/DisplayPatterns.aspx –

0

あなたはそれが "IsDate関数" VBAの機能に依存している。この

Option Explicit 

Sub main() 
Dim wbName As String, wbExt As String 

With ActiveWorkbook 
    wbName = Mid(.Name, 1, InStrRev(.Name, ".") - 1) 
    wbExt = Mid(.Name, InStrRev(.Name, ".")) 

    If IsDate(Right(wbName, Len(wbName) - InStrRev(wbName, " "))) Then ' check for a possible "date" part ofthe name 
     wbName = Left(wbName, InStrRev(wbName, " ")) & "v" & Format(Date, "yyyy-mm-dd") 
    Else 
     wbName = "v" & Format(Date, "yyyy-mm-dd") 
    End If 

    .SaveAs wbName & wbExt 
End With 

End Sub 

を試みることができるOPさんのコメント

を編集しました。期待しているユーザーは、日付の入力方法があまりにも多くのファンタジーを持っていない...

+0

私は遅れて申し訳ありませんが、あなたの方法を試してみて、wbNameが完全な日付になるまで動作しません。つまり、wbName "bicycle 2015-02-02.xlsm"は日付として認識されません。しかし、私はそれを認識する必要があります。なぜなら、その文字列から日付を切り捨てる必要があり、それがない文字列に今日の日付を追加する必要があるからです。これは私が言ったことです: "bicycle 2015-02-02.xlsm"> "bicycle 2016-04-13.xlsm"と "bicycle.xlsm"> "bicycle 2016-04-13.xlsm" – Damian

+0

から編集された記事を見る。私の答えがあなたの質問を満たしていれば、それを合格とマークしてください。それが有益であると判明した場合は、それを上書することができます。ありがとう – user3598756

+0

私の評判が15 lvlになるまで待つ必要があります。今のところ私はそれをアップ票することはできません。 – Damian

関連する問題