已经搜索过,并且已经找不到任何解决方案。我是相对较新的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))
答案 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
在此示例中,用户将第一个工作表重命名为“Data”,Sheet1.Name
将返回“Data”。更改代码名称的唯一方法是更改VBA编辑器窗口中的“(Name)”属性。
答案 1 :(得分:3)
错误消息是明确的,并且您没有“明确地拥有对象”。 (编译器几乎总是比我们更了解代码和语法,所以如果它说错了,你应该相信它,直到你能证明不是这样。)
您发布的最后一行代码中的 Workbook.SocialTransform!.Range
无效(WOrkbook.SocialTransform!
不是您使用它的有效代码),因此它不会返回对象。但是,您将其引用为一个,从而生成错误。
当你在它之前的行中使用它时,它在引号内有效。