on 12-05-2008 1:33 AM
WindowsXPからVISTAへ開発環境の移行を行っております。
XP環境
VB6.0SP5
Spread3.0J
InputMan6.5J
CrystalReports8.5
VISTA環境
VB6.0SP6
Spread7.0J
InputMan7.0J
CrystalReportsXI R2 SP4
Spread、InputManについては移行ツールを使用してVBのプロジェクトファイルを
移行する事が出来ました。CrystalReportsについては移行ツールがないため、手作業
でレポートファイル(.rpt)をVBプロジェクトへ取り込み、レポートビューアで表示
することができました。レポートビューアの印刷ボタンをクリックすると印刷ができ
るのですが、ビューアを表示せずに直接印刷する事が出来ません。
PrintOutメソッドを使用すれば良いとのことでやってみましたが、「オブジェクトは、
このプロパティまたはメソッドをサポートしていません。」のエラーメッセージが表示
されてしまいます。
フォームに依存しない印刷方法についてどなたかご教授下さい。よろしくお願いいたします。
初歩的な確認ですが、移行する前に VB プロジェクトで直接印刷 (PrintOut メソッド) は動作していたのでしょうか。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
24x7 様
ご回答ありがとうございます。
移行前はフォームにクリスタルレポートのオブジェクトを貼り付けてそのオブジェクト名を
例えば、CRR_GAS010 として以下の様に印刷しておりました。
**ここから*************************************
'レポートファイル設定
CRR_GAS010.ReportFileName = P_MYPATH & "\" & C_CR_GAS010 'C_CR_GAS010は定数
'年月の出力
CRR_GAS010.Formulas(0) = "PRT_YM=""" & Left$(W_YM, 4) & "年" & Right$(W_YM, 2) & "月"""
'クリスタルレポート起動
CRR_GAS010.Destination = 1 '* 0 = To Window, 1 = To Printer, 2 = To File
CRR_GAS010.Action = 1 '* 出力
**ここまで*************************************
PrintOut メソッドは.Action にあたる部分のものとおもわれるのですが、直接このメソッドを使用
してはいません。
移行後はフォームに貼り付けていたクリスタルレポートのオブジェクトは不要になったと思い
削除し、コードをRDC用に書き換える必要があると思いヘルプを参照して以下のコードをため
してみましたが無理でした。
CRViewer1.ReportSource = Report
'PDF印刷モードの場合はPrintModeプロパティを0に設定し、ActiveX印刷モードの場合は1に設定
CRViewer1.PrintMode = 0
CRViewer1.PrintReport
以上です。アドバイスよろしくお願いいたします。
24x7 様
ご回答ありがとうございます。解決することができました。
プレビュー表示用のサンプルコードを元にPrintOutメソッドを使用していたせいで
今までうまく出来ておりませんでした。
対象のオブジェクト 例えば、RDC001 を宣言
*********************************************
Dim Report As New RDC001
フォーム上の印刷ボタン押下時の処理として
*********************************************
Report.PrintOut
'確認画面表示、非表示設定をする場合以下
'Report.PrintOut False, 1, ,1,1
以上で印刷することが出来ました。ありがとうございました。
ついでにご回答いただければありがたいのですが、移行前のコードで記載している以下のコード
'年月の出力
CRR_GAS010.Formulas(0) = "PRT_YM=""" & Left$(W_YM, 4) & "年" & Right$(W_YM, 2) & "月"""
これを実現するにはどのようにすればよいのでしょうか。
Dim i As Integer
Dim CrFormulaFields As CRAXDRT.FormulaFieldDefinitions
Dim CrFormulaField As CRAXDRT.FormulaFieldDefinition
For i = 1 To Report1.FormulaFields.Count
Set CrFormulaField = Report1.FormulaFields.Item(I)
If CrFormulaField.FormulaFieldName = "式フィールド名" Then
CrFormulaField.Text = "WhilePrintingRecords;" + Chr(13) + Chr(10)
CrFormulaField.Text = CrFormulaField.Text + "PRT_YM=""" & Left$(W_YM, 4) & "年" & Right$(W_YM, 2) & "月"""
End If
Next I
動作確認していませんが、こんな感じで記述します。
24x7 様
ご回答ありがとうございます。解決することができました。
最終的には以下で解決できました。見えにくいですがCrFormulaField.Textの値を'(上カンマ)で囲む必要があるようです。あと"PRT_YM="は記述する必要がありませんでした。
For i = 1 To Report.FormulaFields.Count
Set CrFormulaField = Report.FormulaFields.Item(i)
If CrFormulaField.FormulaFieldName = "PRT_YM" Then
CrFormulaField.Text = "WhilePrintingRecords;" + Chr(13) + Chr(10)
CrFormulaField.Text = CrFormulaField.Text + "'" & Left$(W_YM, 4) & "年" & Right$(W_YM, 2) & "月'"
End If
Next i
以上です。大変たすかりました。ありがとうございました。
また機会がありましたらよろしくお願いいたします。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.