我只是试图设置一个Range对象,将分散在一张纸上不同列上的数据(" Backtest")收集到一个紧凑的数据集中(每列一个接一个)第二张(" chartData"),以便在以后的阶段轻松显示图表。
我的理解是使用With... End With
应该允许指定Set语句在哪个工作表中检索范围。然而,如果事先未选择该表(如第三行所示),我会遇到
错误1004"应用程序定义或对象定义的错误"
Sub prepareData()
Set wsChartData = Worksheets.Add
wsChartData.Name = "chartData"
wsBacktest.Select
With wsBacktest
Set myRangeTimestamp = .Range(Cells(17, 1), Cells(lastRow, 1))
Set myRangeData = .Range(Cells(17, [colMtM]), Cells(lastRow, [colPnL]))
End With
wsChartData.Range("A1").Value = "Timestamp"
wsChartData.Range("B1").Value = "MtM"
wsChartData.Range("C1").Value = "PnL"
myRangeTimestamp.Copy Destination:=wsChartData.Range("A2")
myRangeData.Copy Destination:=wsChartData.Range("B2")
wsChartData.Range("A2").EntireColumn.AutoFit
End Sub
这不是一个阻碍点,但是,嗯,你知道......美学......
答案 0 :(得分:2)
此:
Set myRangeTimestamp = wsBacktest.Range(Cells(17, 1), Cells(lastRow, 1)) Set myRangeData = wsBacktest.Range(Cells(17, [colMtM]), Cells(lastRow, [colPnL]))
简单等同于:
Cells
现在,Set myRangeTimestamp = wsBacktest.Range(wsBacktest.Cells(17, 1), wsBacktest.Cells(lastRow, 1))
Set myRangeData = wsBacktest.Range(wsBacktest.Cells(17, [colMtM]), wsBacktest.Cells(lastRow, [colPnL]))
隐含地指的是活动工作表,as @Doug mentioned,因此您还应明确限定它们:
With
wsBacktest
块只会减少Cells
的重复次数;有或没有它,不合格的Select
是对活动工作表的隐式引用,您应该至少避免与wsBacktest
一样多。
因此,错误正在发生,因为您打算在{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"default_field": "keywords.alias",
"query": "abc"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [],
"facets": {}
}
工作表上获得范围,但除非您首先激活该工作表,否则您将使用其他工作表中的单元格来获取该工作表。吊杆。
答案 1 :(得分:0)
wsBacktest既未声明,也未定义或设置。 Excel不知道你在说什么。声明它,它会工作。见这个例子。
Sub test()
Dim ws As Worksheet
Dim rng1 As Range, rng2 As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws
Set rng1 = .Range("A1")
Set rng2 = .Range("B1")
End With
MsgBox rng1 & " " & rng2
End Sub