获取运行时错误“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
有什么想法吗?
答案 0 :(得分:2)
远离.Select
和.Activate
,停止依靠动态ActiveSheet
来定义范围的父级。
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
语句中定义的工作表
答案 1 :(得分:0)
我不使用表格(名称)。选择:
Sheets("ABC Data").Activate
是我首选的方法。我还建议创建对象,以便您更轻松地输入内容:
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
最后,如果您对工作簿中的每个工作表执行此操作,则应该循环它。如果您需要该代码,请告诉我
如果选择/使用工作表的方法对您不起作用,请告诉我并立即更新答案。
答案 2 :(得分:0)
发布,以便其他人可以从我的愚蠢举动中学习。注意到我的语法都是在PMR表中输入的 - 将我的所有语法都移到模块中,它就像一个魅力。