【发布时间】:2018-05-27 15:35:41
【问题描述】:
我已经构建了从工作簿导入数据并将其粘贴到另一个工作簿的代码。原始工作簿由数百张纸组成(每个国家一张纸,由 ISO 2 位代码标识:AE、AL、AM、AR 等...)。宏打开这些工作表中的每一个,复制相同的单元格,然后在新工作簿中打印所有这些单元格。 问题是,例如,如果工作表 F(AM) 不存在,宏就会停止。我想确保如果工作表不存在,宏将继续处理所有其他工作表(即 F(AR)、F(AT)、F(AU))直到结束。 有人有什么建议吗? 非常感谢!
Sub ImportData()
Dim Wb1 As Workbook
Dim MainBook As Workbook
Dim Path As String
Dim SheetName As String
'Specify input data
Path = Worksheets("Input").Range("C6").Value
'Decide in which target sheet print the results
SheetName = "Data"
'From which sheets you need to take the data?
OriginSheet145 = "F(AE)"
OriginSheet146 = "F(AL)"
OriginSheet147 = "F(AM)"
OriginSheet148 = "F(AR)"
OriginSheet149 = "F(AT)"
OriginSheet150 = "F(AU)"
'Set the origin workbook
Set Wb1 = Workbooks.Open(Path & "_20171231.xlsx")
'Set the target workbook
Set MainBook = ThisWorkbook
'Vlookup to identify the correct data point
Wb1.Sheets(OriginSheet145).Range("N25").FormulaR1C1 = "=VLOOKUP(""010"",C[-10]:C[-7],2,FALSE)"
Wb1.Sheets(OriginSheet146).Range("N26").FormulaR1C1 = "=VLOOKUP(""010"",C[-10]:C[-7],2,FALSE)"
Wb1.Sheets(OriginSheet147).Range("N27").FormulaR1C1 = "=VLOOKUP(""010"",C[-10]:C[-7],2,FALSE)"
Wb1.Sheets(OriginSheet148).Range("N28").FormulaR1C1 = "=VLOOKUP(""010"",C[-10]:C[-7],2,FALSE)"
Wb1.Sheets(OriginSheet149).Range("N29").FormulaR1C1 = "=VLOOKUP(""010"",C[-10]:C[-7],2,FALSE)"
Wb1.Sheets(OriginSheet150).Range("N30").FormulaR1C1 = "=VLOOKUP(""010"",C[-10]:C[-7],2,FALSE)"
'Copy the data point and paste in the target sheet
Wb1.Sheets(OriginSheet145).Range("N25").Copy
MainBook.Sheets(SheetName).Range("AW5").PasteSpecial xlPasteValues
Wb1.Sheets(OriginSheet146).Range("N26").Copy
MainBook.Sheets(SheetName).Range("AW6").PasteSpecial xlPasteValues
Wb1.Sheets(OriginSheet147).Range("N27").Copy
MainBook.Sheets(SheetName).Range("AW7").PasteSpecial xlPasteValues
Wb1.Sheets(OriginSheet148).Range("N28").Copy
MainBook.Sheets(SheetName).Range("AW8").PasteSpecial xlPasteValues
Wb1.Sheets(OriginSheet149).Range("N29").Copy
MainBook.Sheets(SheetName).Range("AW9").PasteSpecial xlPasteValues
Wb1.Sheets(OriginSheet150).Range("N30").Copy
MainBook.Save
Wb1.Close savechanges:=False
MsgBox "Data: imported!"
End Sub
【问题讨论】:
-
我不确定你在这里做什么,但我确信有更好的方法。
OriginSheet145到OriginSheet150是什么,它们在哪里设置?他们会改变吗?您将硬编码公式 (=VLOOKUP("010",C[-10]:C[-7],2,FALSE)) 复制到 6 个单元格,然后将这些单元格复制到其他地方?? -
OriginSheet是宏从中获取数据的原始工作表。这些工作表的名称发生了变化(F(AE)、F(AL)、F(AM)...),但工作表的内部结构始终相同。因此,对于这些工作表中的每一个,代码都会获取一个数据点(通过 VLOOKUP 标识),从OriginSheet复制数据点并粘贴到目标工作簿中。