EXCEL - 基于单元格值的数组

时间:2016-05-10 13:24:16

标签: arrays excel

我的EXCEL Macro存在问题,我希望你们中的一些人能够帮助我弄清楚出了什么问题。

现在,宏包含了我在互联网周围发现的一些混合匹配。

基本上,当站在Active Workbook中时,我想编辑'MACROTEST.xlsm'中的值,然后根据一些宏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

1 个答案:

答案 0 :(得分: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),“”)

将删除单元格I2中字符串中的引号(CHr(34)),方法是将其替换为“”。

  

拆分(替换(CH.Range(“I2”),Chr(34),“”),“,”)

然后

将返回一个字符串数组(工作表名称),使用“,”作为分隔符。

要使for-each循环起作用,必须将sheetName变量声明为对象或变体,而不是字符串。