2017-06-06 12 views
2

セルのマウスオーバー時にポップアップとして画像を挿入できるVBA Excelマクロを作成しようとしています。Excel vbaでの塗りつぶし画像の元のサイズに対するコメントサイズの変更

私はセルにコメントを挿入し、コメントの塗りつぶしを指定した画像に設定することでこれを実現しています。私はフィル背景として画像を使用するにはコメントを設定した後

スケーリング元のを維持するために絵を希望

、私は手動で、セルを右クリックして編集コメントをクリックして、コメントを右クリックすることができ、 [サイズ]タブに移動し、[元の画像サイズに合わせる]チェックボックスをオンにし、スケールの高さとサイズを100%に設定します。enter image description here

マクロを記録するこれを複製するVBAは何も記録されません。エラーでtargetComment.Shape.ScaleHeight 1, msoTrue結果使用

enter image description here

であるものにアクセスする方法を誰もが知っている:ここで

Run-time error '-2147024891 (80070005)': 
The RelativeToOriginalSize argument applies only to a picture or an OLE object 

は、このエラーを生成VBAコードのスクリーンショットですVBA経由のダイアログボックス???

+1

:http://optionexplicitvba.blogspot.co.uk/2011/04/rollover-b8-ov1.htmlを、あなたはセルにアクセスするには、ターゲットarguementを使用することができます高さなどのプロパティ – Absinthe

+0

@Absinthe私はこれが私のために働くとは思えません。なぜなら、表示されている画像は、セルの代わりにシェイプに固定されている/表示されているからです。マウスオーバー時に大きな画像を表示する)。私はまた、ユースケース(彼らはテーブルの一部です)で隣接するセルを使用することはできません – macdonaldtomw

答えて

1

スケーリングを使用して画像を表示するコメントを使用することができます。トリックは、スケーリング係数を自分で計算し、それを画像に適用することです。私はimage file's dimensionsにアクセスするためにWindows Image Acquisition Automation Layerを使用しました。

以下の例では、TempディレクトリのJPGイメージにアクセスし、適切なスケーリングでセルのコメントに追加します。

Option Explicit 

Sub test() 
    '--- delete any existing comment just for testing 
    If Not Range("C5").Comment Is Nothing Then 
     Range("C5").Comment.Delete 
    End If 
    InsertCommentWithImage Range("C5"), "C:\Temp\laptop.jpg", 1# 
End Sub 

Sub InsertCommentWithImage(imgCell As Range, _ 
          imgPath As String, _ 
          imgScale As Double) 
    '--- first check if the image file exists in the 
    ' specified path 
    If Dir(imgPath) <> vbNullString Then 
     If imgCell.Comment Is Nothing Then 
      imgCell.AddComment 
     End If 

     '--- establish a Windows Image Acquisition Automation object 
     ' to get the image's dimensions 
     Dim imageObj As Object 
     Set imageObj = CreateObject("WIA.ImageFile") 
     imageObj.LoadFile (imgPath) 

     Dim width As Long 
     Dim height As Long 
     width = imageObj.width 
     height = imageObj.height 

     '--- simple scaling that keeps the image's 
     ' original aspect ratio 
     With imgCell.Comment 
      .Shape.Fill.UserPicture imgPath 
      .Shape.height = height * imgScale 
      .Shape.width = width * imgScale 
     End With 
    End If 
End Sub 
私が代わりにコメントのハイパーリンクを使用したい
+0

興味深い解決策、私はWIAユーティリティについて知りませんでした。良いですね!私はより多くのクロスプラットフォームフレンドリーなソリューションは、画面の更新を無効にするには、画像の図形として画像を挿入し、次元をクエリし、それを削除し、コメントのShape.heightとShape.widthパラメータを手動で設定するように進めるだろうと思う – macdonaldtomw

+1

クロスプラットフォームが目標の一部である場合、yes(スクリーンが無効)のシェイプを追加すると確かに次元が得られます。要は、ScaleHeightを使う代わりに、すべてのスケーリングが自分で行われるということです。元の縦横比を維持するかどうかは、あなた次第です。 – PeterT

関連する問題