当我明确拥有一个对象时,对象所需的错误

时间:2013-09-15 00:05:23

标签: excel-vba vba excel

已经搜索过,并且已经找不到任何解决方案。我是相对较新的VB记录。这里的变量minDate在过程外的模块中声明。我尝试在过程中声明它,使用set,let,并将参数作为范围变量传递。没有。

Sub SocialTimeSinceFirstComment()
'
' SocialTimeSinceFirstComment Macro
'
    Range("A11").Select
    ActiveCell.FormulaR1C1 = "=MIN(SocialTransform!C[4])"

    minDate = Application.WorksheetFunction.Min(Workbook.SocialTransform!.Range("c4").End(xlDown))

2 个答案:

答案 0 :(得分:4)

显然你有一个名为SocialTransform的电子表格,所以请使用:

Dim ws as Worksheet
set ws = ThisWorkbook.Worksheets("SocialTransform")

Dim minRange as Range
set minRange = ws.range(ws.Range("c4"), ws.Range("c4").End(xlDown))
minRange.Select 'use this when testing so you can see exactly what is included

minDate = Application.WorksheetFunction.Min(minRange)

希望你将minDate声明为日期Dim MinDate As Date,否则你只会获得一个数字;这当然可以转变回相应的日期。

我也可以解释一下,你得到的错误不是因为minDate,而是因为SocialTransform!不是Workbook的对象。您需要使用Worksheets("SocialTransform")

编辑:实际上,您可以使用代码名称来引用工作簿中的工作表,如下所示:Debug.Print Sheet1.Name

Code name example

在此示例中,用户将第一个工作表重命名为“Data”,Sheet1.Name将返回“Data”。更改代码名称的唯一方法是更改​​VBA编辑器窗口中的“(Name)”属性。

请参阅:Worksheet.CodeName Property (Excel)

答案 1 :(得分:3)

错误消息是明确的,并且您没有“明确地拥有对象”。 (编译器几乎总是比我们更了解代码和语法,所以如果它说错了,你应该相信它,直到你能证明不是这样。)

您发布的最后一行代码中的

Workbook.SocialTransform!.Range无效(WOrkbook.SocialTransform!不是您使用它的有效代码),因此它不会返回对象。但是,您将其引用为一个,从而生成错误。

当你在它之前的行中使用它时,它在引号内有效。