“对象”全局方法的“范围”失败

时间:2019-11-04 18:41:33

标签: excel vba

这曾经起作用,然后突然开始出现错误:

  

“对象”全局范围的方法“范围”失败

从以下行开始:

Range("G2.G101").Value = "=E2-B2"

有什么作用?

Sub ReadCSV()
Dim symbol, hi, lo, startdate, enddate, hi2, lo2, hi3, lo3, d5hi, d5lo, d10hi, d10lo, d20hi, d20lo, dayrng As Variant
Dim symbpos As Range
Dim MainWkbk, NextWkbk As Workbook
Set MainWkbk = ActiveWorkbook

'symbol = InputBox("Enter symbol")

symbol = ActiveCell.EntireRow.Cells(1).Value

Workbooks.Open Filename:="f:\downloads\daily_" & symbol & ".csv"
Set NextWkbk = ActiveWorkbook

Range("G1").Value = "Net Ch fr Open"
Range("G2.G101").Value = "=E2-B2"
End Sub

1 个答案:

答案 0 :(得分:1)

如评论中所述,Range("G2.G101").Value = "=E2-B2"应该为Range(G2:G101).Value。如果使用宏记录器,这很容易看到,只是为了了解如何定义范围-在那里可以完美地工作。

无论如何,还有几点:


当这样定义变量时:

Dim MainWkbk, NextWkbk As Workbook

然后,第一个(MainWkbk)被定义为Variant,只有后者(NextWkbk)被定义为工作簿。因此,尝试显式定义-Dim MainWkbk as Workbook, NextWkbk As Workbook


不惜一切代价避免ActiveWorkbookActiveCell等-How to avoid using Select in Excel VBA是一个好主意。因此,请考虑:

Set NextWkbk = Workbooks.Open( Filename:="f:\downloads\daily_" & symbol & ".csv")

避免使用Range()而不使用Worksheet。代替:

Range("G1").Value = "Net Ch fr Open"
Range("G2:G101").Value = "=E2-B2"

考虑:

With NextWkbk.Worksheets(1)
    .Range("G1").Value = "Net Ch fr Open"
    .Range("G2:G101").Formula = "=E2-B2"
End With

因为在范围之前的.指定了到打开的工作簿的第一个工作表的范围。


.Value更改为.Formula是最后一点,只要=E2-B2是一个公式,这样做会更好一些,因为它提高了可读性。