0

已经搜索并没有找到任何解决方案。为了记录,我对 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))
4

2 回答 2

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

代号示例

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

请参阅:Worksheet.CodeName 属性 (Excel)

于 2013-09-15T01:06:33.400 回答
3

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

Workbook.SocialTransform!.Range在您发布的最后一行代码中是无效的(WOrkbook.SocialTransform!不是您使用它的有效代码),因此它不会返回对象。但是,您将它作为一个引用,这会产生错误。

它在引号内有效,因为您在它前面的行中使用它。

于 2013-09-15T00:58:09.937 回答