前回便乗質問で大変ご迷惑をおかけいたしました。
あらためて質問をさせていただきます。
ACCESS2007のVBAでJPEGファイルを読み込み、指定の解像度に変更して
保存するという処理を実装したいと思い、下記URLにたどりつきました。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200803/08030008.txt
ここにかかれている内容を参考にしてみましたが、GdipSaveImageToFileで保存ができません。
■エラー内容
パブリック オブジェクト モジュールで定義されたユーザー定義型に限り
変数に割り当てる事ができ、実行時バインディングの関数に渡すことができます。
開発環境はVistaSP1+ACCESS2007(VBA)です。
コンパイルエラーは次の箇所で発生します。
EncodParameters.Count = 1
With EncodParameters.Parameter(0)
.Guid = ConvCLSID(CLSID_QUALITY) <ここのConCLSIDでエラー
.NumberOfValues = 1
.Type = 4
.Value = VarPtr(Quality)
End With
Ret = GdipSaveImageToFile(lngBmp, StrPtr(DestFileName), ConvCLSID(CLSID_JPEG), VarPtr(EncodParameters))
ConvCLSIDは
Private Function ConvCLSID(ByVal sGuid As String) As UUID
CLSIDFromString StrPtr(sGuid), ConvCLSID
End Function
としております。
魔界の仮面弁士様より
ユーザー定義型、および、それを引数に受け取るプロシージャ等を、
すべて Private で宣言してみてください。
との返信を頂きました。ありがとうございます。
ソースを見直しして検索などでもPublicで宣言している箇所がないかチェックしましたが、該当するところはありませんでした。
全て標準モジュール内で処理しているのが良くないのでしょうか?
同エラーで検索するとクラスモジュールで定義すれば良いのでは?
という内容もあるのですが、クラスモジュールは利用した事がないのでこれから学習します。
このような状況でなにかヒントがございましたらよろしくお願いいたします。
あれ?
このエラーだと「Publicじゃないとダメだよ」って言われてるような気がするが…
あ、違ったかも、申し訳ない
ユーザ定義型(構造体)が、パブリック オブジェクト モジュールで定義されていることが必要、
って事かな
使用している構造体について、標準モジュール内でPublic宣言してみたらどうだろう?
あ様、魔界の仮面弁士様
本当にありがとうございました。
お恥ずかしいのですが、EncodParametersのデータ型宣言部が抜けておりました・・・。
たったそれだけで解決してしまいました。
なんとお詫び申し上げてよいかわかりませんが、大変勉強になりました。
今後も何かありましたら何卒よろしくお願いいたします。