請注意一點:我做的報表不是通過VB中的Add Crystal Report的方法得到的,而是直接用報表設計器做成的
現只想用VB去調用它
但在報表中有用到參數。如:?Parm1,?Parm2等 
假設Parm1="中國軟件",Parm2="報表設計區"如果沒有參數用下面的方法可以成功調用,但是參數部分卻不知該怎樣傳遞
Dim a As Object
Dim b As Report
Set a = CreateObject("crystal.crpe.application")
Set b = a.OpenReport(App.Path & "\IEZHWI_P01.rpt")
b.Preview
謝謝!!!
 

解决方案 »

  1.   

    b.ParameterFields(1).AddCurrentValue 参数1
    b.ParameterFields(2).AddCurrentValue 参数2
    .
    .
    .
    .
      

  2.   

    Private Function SetParameter(ByRef pcrpReport As CRAXDDRT.Report) As Boolean
      Dim i, j, k As Integer
      Dim strParamName As String
      Dim mdicParamList As New Dictionary
     
      Dim blnResult As Boolean
         blnResult = False
      
        
     mdicParamList.Add "Parm1", "中國軟件"
     mdicParamList.Add "Parm1", "報表設計區"  pcrpReport.EnableParameterPrompting = False
      With pcrpReport.ParameterFields
        If .Count > 0 Then
          For i = 1 To .Count
            strParamName = Mid(.Item(i).Name, 3, Len(.Item(i).Name) - 3) ' Convert "{?ParamName}" to "ParamName"
            
            If mdicParamList.Exists(strParamName) Then
              .Item(i).SetCurrentValue mdicParamList.Item(strParamName)
        
              If Err.Number <> 0 Then
                MsgBox "Can not set report  parameter :" & _
                   vbLf & pcrpReport.ParameterFields(i).Name & " = " & mdicParamList.Item(strParamName) & _
                   vbLf & Err.Number & ": " & Err.Description, vbCritical
                Err.Clear
              End If
            End If
          Next i
        End If
      End With
         
      blnResult = True
    ExitHere:
      Err.Clear
      SetParameter = blnResult
      
    End Function