2016-05-10 143 views
0

我的EXCEL宏存在問題,我希望你們中的一些人能夠幫助我找出問題所在。EXCEL - 基於單元值的數組

現在,這個宏包含了我在互聯網上發現的一些混合匹配。

基本上,當放在Active Workbook中時,我想編輯'MACROTEST.xlsm'中的值,然後基於某些om MACROTESTS的當前表格創建一個新的工作簿。 我在新創建的工作簿中需要的表單在I2的活動工作簿單元格「I2」示例中提到::(「FRONTPAGE」,「AT」,「BY」,「BE」) - 是單元格包含引號好。 - 而不是()

出於某種原因,我不能讓我的陣列拿起這些價值,幫助..

而且由於某些原因,當我運行宏用1張新的工作簿打開。 - 無法弄清楚是什麼原因造成的。

我是一個新人EXCEL編碼器,所以請去容易對我,當你來砸我的編碼:)

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

替換:

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 Set Wb2 = Application.Workbooks.Add'This line will open a new workbook' I2現在看起來像這樣:FRONTPAGE,AT,DK,ES,IT - no只引用逗號分隔。 (1) 對於每個sheetName在拆分(CH.Range(「I2」),「,」)中, 「) Wb1.Sheets(sheetName).Copy Before:= Wb2.Sheets(1) Next – THansen

+0

嘗試不使用替換語句:對於每個sheetName在拆分(CH.Range(」I2「),」,「) –

相關問題