2017-08-02 18 views
1

開いているブックに閉じたブックから一部のデータをインポートしたい。Excel VBA - 名前が変更された場合、同じフォルダー内の別のブックからデータをインポートする

毎週別のワークブックが作成されます。「AIMS_Report_w *」ここで、*は週番号です。

現在のワークブックが「AIMS_Report_w31」の場合「AIMS_Report_w30」からデータを取得します。

私はこれまでのところ、この

Sub Import_Data() 

    Dim rng As Range 
    Dim WB2 As Workbook 
    Dim FName As String 

    FName = Application.ActiveWorkbook.Path + "AIMS_Report_w" 
    Set WB2 = Workbooks.Open(Filename:=FName) 

    ThisWorkbook.ChampSpecific.Range("L3:O6").Value = WB2.Worksheets(1).Range("M3:P6").Value 

    WB2.Close 

End Sub 

で持っているものマクロが「AIMS_Report_w31」ワークブック内のボタンから実行されます。私は下のコードが動作するだろうと想像していますが、私は構文が行のために何であるかわからないFName = Application.ActiveWorkbook.Path + "AIMS_Report_w"は、現在の前に週番号をピックアップするようになる。一般的に

答えて

2

は、ちょうど前の週のために、あなたはこのようなものが必要:

"AIMS_Report_w" & Format((WorksheetFunction.WeekNum(Now) - 1), "00") 

あるいは

"AIMS_Report_w" & WorksheetFunction.WeekNum(Now) - 1 

あなたはそれをフォーマットし必要がない場合。


以前の現在のレポートの名前を提供し、それから、以前のものを取得したい場合はそれ以外の場合、このようなものが有用であろう:

Option Explicit 

Public Function GeneratePreviousWeek(strCurrentWeek As String) As String 

    Dim lngPrevious  As Long 
    Dim strResult  As String 

    lngPrevious = Right(strCurrentWeek, 2) 
    lngPrevious = lngPrevious - 1 

    strResult = Left(strCurrentWeek, Len(strCurrentWeek) - 2) 

    GeneratePreviousWeek = strResult + Format(lngPrevious, "00") 

End Function 

Sub TestMe() 

    Debug.Print GeneratePreviousWeek("AIMS_Report_w05") 
    Debug.Print GeneratePreviousWeek("AIMS_Report_w15") 

End Sub 

これはあなたが得るものですイミディエイトウィンドウ:

AIMS_Report_w04 
AIMS_Report_w14 

GeneratePreviousWeek機能は、レポートの名前の最後の2つの文字を取るには、-1との文字列を返します。以下を使用する必要があります。

  • 形式は、01の前回を求めるならば、それは00を返し大手0例えば、0102
  • と常にあります。それ以外の場合は注意が必要です。年には53週があることもありますので、年も入力する必要があります。
  • 上記の値のエラーをスローする可能性があります。53
関連する問題