2016-05-10 10 views
0

私はEXCELマクロに問題があり、何人かが間違っているかどうかを理解するのを助けることができれば幸いです。EXCEL - セルの値に基づく配列

ここで、マクロは、私がinterwebsの周りに見つけたいくつかのミックスマッチングで構成されています。

基本的に、アクティブワークブックに立っていたら、 'MACROTEST.xlsm'の値を編集して、MACROTESTSの現在のシートに基づいて新しいワークブックを作成します。 新しく作成されたワークブックで必要なシートは、I2のアクティブブックセル "I2"に記載されています( "FRONTPAGE"、 "AT"、 "BY"、 "BE") - はいセルには引用符よく - 私はマクロを実行すると、私は私の配列は、これらの値をピックアップして取得することはできません何らかの理由で、助けて...何らかの理由でも

については、()

は1枚で新しいワークブックが開かれていません。 - 原因を突き止めることはできません。

私はあなたが私のコーディングをbashのときに私に簡単に移動してください:)

Sub NewReport() 
Dim Wb1 As Workbook 
Dim Wb2 As Workbook 
Dim WbC As Workbook 
Dim dateStr As String 
Dim myDate As Date 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    .EnableEvents = False 
End With 

Set WbC = ActiveWorkbook 
Set Wb1 = Workbooks.Open("J:\Documents\Test\New\MACROTEST.xlsm") 

Set CH = WbC.Sheets("MAIN") 
Set sh = Wb1.Sheets("FRONTPAGE") 
sh.Range("D2") = CH.Range("C4") 

Set upd = CH.Range("I2") 

myDate = Date 

dateStr = Format(myDate, "DD-MM-YY") 

Set Wb2 = Application.Workbooks.Add(1) 
Wb1.Sheets(Array(upd)).Copy Before:=Wb2.Sheets(1) 
Wb2.Sheets(Wb2.Sheets.Count).Delete 
Wb2.SaveAs Filename:="J:\Documents\Test\New\" & Sheets("FRONTPAGE").Range("D2").Value & " " & dateStr, FileFormat:=51 

Wb2.Close 
Wb1.Close 
With Application 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With 
End Sub 

答えて

0

、コーダ新人EXCELよ置き換えます

Set Wb2 = Application.Workbooks.Add(1) 
Wb1.Sheets(Array(upd)).Copy Before:=Wb2.Sheets(1) 

をすることによって:

Dim sheetName As Variant 
Set Wb2 = Application.Workbooks.Add 'This line will open a new workbook 

For Each sheetName In Split(Replace(CH.Range("I2"), Chr(34), ""), ",") 
    Wb1.Sheets(sheetName).Copy Before:=Wb2.Sheets(1) 
Next 

これはあなたのために働くことを望みます。

編集:説明

交換(CH.Range( "I2")、chrです(34)、 "")

はquotationmarksを除去する(CHR(34))セルI2の文字列内の ""で置換します。

スプリット((CH.Range( "I2")、Chr関数(34)、 "交換")、 "")

次いで、文字列の配列(sheetnames)を返し、 "、"をセパレータとして使用します。

for-eachループを機能させるには、sheetName変数を文字列ではなくオブジェクトまたはバリアントとして宣言する必要があります。

+0

この回答の説明はその価値を高めるでしょう。 –

+0

あなたのコードを少し変更しました: 'Dim sheetName As Variant Wb2 = Application.Workbooks.Addを設定してくださいこの行は新しいブックを開きます I2は今のようになります:FRONTPAGE、AT、DK、ES、IT - カンマ区切りのみを引用符で囲みます。 テストを実行すると、エラーが発生します。 Wb1.Sheets(sheetName).Copy Before:= Wb2.Sheets(1) 各シート名についてCH.Range( "I2")、 ") Wb1.Sheets(sheetName).Copy Before:= Wb2.Sheets(1) 次へ – THansen

+0

Replaceステートメントを使用せずに試してください。分割された各シート名(CH.Range(" I2 ")、"、 ") –

関連する問題