MS Access 2013/365中的ActiveGantt Activex控件 - 对象方法的VBA运行时错误

时间:2014-06-03 05:21:45

标签: vba ms-access access-vba activex gantt-chart

我正在使用MS Access 365(2013),即使是对ActiveGanttVCCtl对象上对象方法的最简单调用也会出现运行时错误。

使用ActiveGantt网站(http://www.sourcecodestore.com/Article.aspx?ID=15#Create3)上提供的“入门”指南,我在for循环之后的四行代码中的任何一行上收到运行时错误(需要424对象)。为方便起见,这里再次提供代码。

Option Compare Database
Option Explicit

Public Function ActiveGanttVCCtl1() As ActiveGanttVCCtl
    Set ActiveGanttVCCtl1 = ActiveGanttVCCtl1A.Object
End Function

Private Sub Form_Load()
    Dim i As Integer
    ActiveGanttVCCtl1.Columns.Add "Column 1", "", 125, ""
    ActiveGanttVCCtl1.Columns.Add "Column 2", "", 100, ""
    For i = 1 To 10
        ActiveGanttVCCtl1.Rows.Add "K" & i, "Row " & i, True, True, ""
    Next
    ActiveGanttVCCtl1.CurrentViewObject.TimeLine.Position DateSerial(2011, 11, 2)
    ActiveGanttVCCtl1.Tasks.Add "Task 1", "K1", DateSerial(2011, 11, 2) + TimeSerial(0, 0, 0), DateSerial(2011, 11, 2) + TimeSerial(3, 0, 0), "", "", ""
    ActiveGanttVCCtl1.Tasks.Add "Task 2", "K2", DateSerial(2011, 11, 2) + TimeSerial(1, 0, 0), DateSerial(2011, 11, 2) + TimeSerial(4, 0, 0), "", "", ""
    ActiveGanttVCCtl1.Tasks.Add "Task 3", "K3", DateSerial(2011, 11, 2) + TimeSerial(2, 0, 0), DateSerial(2011, 11, 2) + TimeSerial(5, 0, 0), "", "", ""
End Sub

请注意,直到

行才会出现错误
ActiveGanttVCCtl1.CurrentViewObject.TimeLine.Position DateSerial(2011, 11, 2)

已包含对ActiveGanttVC调度程序组件库的引用(否则会产生编译错误),并且名为ActiveGanttVCCtl1A的表单上存在ActiveGantt ActiveX控件。我也尝试在Form_Load()函数本身中声明ActiveGanttVCCtl对象,而不是在单独的函数中声明,但得到相同的结果。

我还确定在运行时错误点,我能够访问ActiveGanttVCCtl1.CurrentViewObject.TimeLine对象,因为我可以在其上运行GetXML方法而不会出现任何问题,而不是Position方法。 / p>

我也试过评论这个特定的行,但是我在下一行代码(对tasks.add的调用)上收到了相同的运行时错误。但是,创建对columns.add或rows.add方法的进一步调用仍然可以在代码中的此位置正常工作。

MS Access 2013中是否可能出现MS Access 2010中未出现此控件的问题?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您使用的ActiveGanttVC版本使用AGVC.DateTime而不是常规VB / VBA日期。 AGVC.DateTime在ActiveGanttVC中引入,允许毫秒级,微秒级和纳秒级精度(根本不是一个好主意),下一版本的ActiveGanttVC(3.2.0)将使用常规VB6 / VBA日期(COleDateTime for C ++用户)。与此同时,在ActiveGanttVC中指定日期时,您将不得不使用此辅助函数:

Public Function FromDate(ByVal dtDate As Date) As AGVC.DateTime
      Dim dtReturn As New AGVC.DateTime
      Dim lYear As Long
      Dim lMonth As Long
      Dim lDay As Long
      Dim lHour As Long
      Dim lMinute As Long
      Dim lSecond As Long
      lYear = Year(dtDate)
      lMonth = Month(dtDate)
      lDay = Day(dtDate)
      lHour = Hour(dtDate)
      lMinute = Minute(dtDate)
      lSecond = Second(dtDate)
      dtReturn.Initialize lYear, lMonth, lDay, lHour, lMinute, lSecond, 0, 0, 0
      Set FromDate = dtReturn
End Function


ActiveGanttVCCtl1.CurrentViewObject.TimeLine.Position FromDate(DateSerial(2011, 11, 2))