WorksheetFunction.Match多张Excel VBA错误1004

获取运行时错误“1004”:应用程序定义或对象定义的错误

我有2个不同的表中2个数据集。 我试图在每个数据集中运行一个WorksheetFunction.Match,并将适当的列复制/粘贴到2个新的工作表。

ABC数据 – > ABC工作正常,但在Sheets("XYZ data").Select后出现错误

 Sub ccc() Sheets("ABC data").Select sedol = WorksheetFunction.Match("Sedol", Rows("1:1"), 0) isin = WorksheetFunction.Match("Isin", Rows("1:1"), 0) Sheets("ABC data").Columns(sedol).Copy Destination:=Sheets("ABC").Range("A1") Sheets("ABC data").Columns(isin).Copy Destination:=Sheets("ABC").Range("B1") Sheets("XYZ data").Select sedol1 = WorksheetFunction.Match("SEDOL1", Rows("1:1"), 0) ticker = WorksheetFunction.Match("Ticker", Rows("1:1"), 0) Sheets("XYZ data").Columns(sedol1).Copy Destination:=Sheets("XYZ").Range("A1") Sheets("XYZ data").Columns(ticker).Copy Destination:=Sheets("XYZ").Range("B1") End Sub 

有任何想法吗?

远离。select和。 .Activate并停止依靠dynamicActiveSheet来定义你的范围的父母。

 Sub ccc() with Sheets("ABC data") sedol = WorksheetFunction.Match("Sedol", .Rows("1:1"), 0) isin = WorksheetFunction.Match("Isin", .Rows("1:1"), 0) .Columns(sedol).Copy Destination:=Sheets("ABC").Range("A1") .Columns(isin).Copy Destination:=Sheets("ABC").Range("B1") end with with Sheets("XYZ data") sedol1 = WorksheetFunction.Match("SEDOL1", .Rows("1:1"), 0) ticker = WorksheetFunction.Match("Ticker", .Rows("1:1"), 0) .Columns(sedol1).Copy Destination:=Sheets("XYZ").Range("A1") .Columns(ticker).Copy Destination:=Sheets("XYZ").Range("B1") end with End Sub 

请注意, .Rows("1:1").Columns(...)中的前缀句点(如。或句号 )确定父代是With ... End With语句中定义的工作表。

请参阅如何避免在Excel VBAmacros中使用select 。

我不使用表格(名称)。select:

 Sheets("ABC Data").Activate 

是我的首选方法。 我也build议创build对象,以便于input内容:

 Dim ABC as WorkSheet Set ABC = ActiveSheet 

所以像这样:

 Dim ABC as Worksheet Dim XYZ as worksheet Set ABC = Sheets("ABC data") With ABC sedol = .WorksheetFunction.Match("Sedol", Rows("1:1"), 0) isin = .WorksheetFunction.Match("isin", Rows("1:1"), 0) .Columns(sedol).Copy Destination:=.Range("A1") .Columns(isin).Copy Destination:=.Range("B1") End With Set XYZ = Sheets("XYZ data") With XYZ sedol1 = .WorksheetFunction.Match("SEDOL1", Rows("1:1"), 0) ticker = .WorksheetFunction.Match("Ticker", Rows("1:1"), 0) .Columns(sedol1).Copy Destination:=.Range("A1") .Columns(ticker).Copy Destination:=.Range("B1") End With 

最后,如果您正在为工作簿中的每个表单执行此操作,则应该循环它。 如果你需要这个代码让我知道

如果select/使用表格的方法不适用于您,请让我知道并更新答案。

发布它,让其他人可以从我的骨头移动中学习。 注意到我的语法全部input到PMR表格中 – 将我所有的语法都移到了一个模块中,它的function就像一个魅力一样。