VBAでJPEGの解像度を変更して保存するには?

解決


今更ジロー  2008-06-02 11:11:43  No: 139817  IP: 192.*.*.*

前回便乗質問で大変ご迷惑をおかけいたしました。
あらためて質問をさせていただきます。

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で宣言している箇所がないかチェックしましたが、該当するところはありませんでした。

全て標準モジュール内で処理しているのが良くないのでしょうか?

同エラーで検索するとクラスモジュールで定義すれば良いのでは?
という内容もあるのですが、クラスモジュールは利用した事がないのでこれから学習します。

このような状況でなにかヒントがございましたらよろしくお願いいたします。

編集 削除
 2008-06-02 11:59:49  No: 139818  IP: 192.*.*.*

あれ?
このエラーだと「Publicじゃないとダメだよ」って言われてるような気がするが…

編集 削除
 2008-06-02 12:02:51  No: 139819  IP: 192.*.*.*

あ、違ったかも、申し訳ない
ユーザ定義型(構造体)が、パブリック オブジェクト モジュールで定義されていることが必要、
って事かな
使用している構造体について、標準モジュール内でPublic宣言してみたらどうだろう?

編集 削除
今更ジロー  2008-06-02 13:46:49  No: 139820  IP: 192.*.*.*

あ様、魔界の仮面弁士様

本当にありがとうございました。

お恥ずかしいのですが、EncodParametersのデータ型宣言部が抜けておりました・・・。

たったそれだけで解決してしまいました。

なんとお詫び申し上げてよいかわかりませんが、大変勉強になりました。

今後も何かありましたら何卒よろしくお願いいたします。

編集 削除