Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Word / Programming / February 2007

Tip: Looking for answers? Try searching our database.

Resizing pictures with VBA

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Roderick O'Regan - 14 Feb 2007 00:31 GMT
I want to resize a selected picture using VBA but I only want to
change the width of the picture to say, 2cm and the height should
adjust to scale automatically.

Manually, using the Format>Picture command I can achieve this by
ensuring that Lock aspect ratio checkbox is True.

However, if I translate this to VBA using the following commands:
   with Selection
    .InlineShapes(1).LockAspectRatio = msoTrue
       .InlineShapes(1).Width = CentimetersToPoints(2)
 End With
...I would expect the same to happen as when I did it manually. Even
though the Lock aspect ratio is set to True it reduces the width to
2cm but leaves the height at its original value.

Am I using the correct commands, please?
Karl E. Peterson - 14 Feb 2007 00:51 GMT
> I want to resize a selected picture using VBA but I only want to
> change the width of the picture to say, 2cm and the height should
[quoted text clipped - 13 lines]
>
> Am I using the correct commands, please?

Maybe you need to actually do the math, and set the height correspondingly?
Signature

.NET: It's About Trust!
http://vfred.mvps.org

Jay Freedman - 14 Feb 2007 02:38 GMT
Somewhere in the bowels of the VBA interpreter, the code that handles
.LockAspectRatio is broken. What works in the dialog doesn't work at
all in VBA.

Here's some code from one of my macros to handle proportional
resizing.

   ' change these numbers to the maximum width and height
   ' (in inches) to make the inserted pictures
      Const PicWidth = 1.9
      Const PicHeight = 2.25

      Dim Photo As InlineShape

       Set Photo = .InlineShapes.AddPicture(FileName:=FName, _
           LinkToFile:=False, SaveWithDocument:=True, _
           Range:=PicRg)
       With Photo
           RatioW = CSng(InchesToPoints(PicWidth)) / .Width
           RatioH = CSng(InchesToPoints(PicHeight)) / .Height
           
           ' choose the smaller ratio
           If RatioW < RatioH Then
               RatioUse = RatioW
           Else
               RatioUse = RatioH
           End If
           
           ' size the picture to fit the cell
           .Height = .Height * RatioUse
           .Width = .Width * RatioUse
       End With

--
Regards,
Jay Freedman
Microsoft Word MVP        FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the
newsgroup so all may benefit.

>I want to resize a selected picture using VBA but I only want to
>change the width of the picture to say, 2cm and the height should
[quoted text clipped - 13 lines]
>
>Am I using the correct commands, please?
Roderick O'Regan - 14 Feb 2007 23:13 GMT
Thanks Jay for the help.

Just some small adjustments to fit my circumstances and it works a
treat!

I would never have known about the code in the Interpreter being
broken.

Regards

Roderick

>Somewhere in the bowels of the VBA interpreter, the code that handles
>.LockAspectRatio is broken. What works in the dialog doesn't work at
[quoted text clipped - 28 lines]
>            .Width = .Width * RatioUse
>        End With
Karl E. Peterson - 15 Feb 2007 00:12 GMT
> Thanks Jay for the help.
>
[quoted text clipped - 3 lines]
> I would never have known about the code in the Interpreter being
> broken.

I'm not sure it's right to say it's "broken."  You're just given full control.  What
you do with it may even surprise you, but it seems to me it's just executing
instructions as you enter them.
Signature

.NET: It's About Trust!
http://vfred.mvps.org

Jay Freedman - 15 Feb 2007 03:47 GMT
>> Thanks Jay for the help.
>>
[quoted text clipped - 7 lines]
>you do with it may even surprise you, but it seems to me it's just executing
>instructions as you enter them.

Hi Karl,

I'd say it's broken. If you explicitly set the .LockAspectRatio
parameter to True, you have every right to expect that setting one
dimension of the picture will adjust the other dimension to... *lock*
the damn aspect ratio! You don't expect to have to fiddle around with
floating point math and maintain your own variables. If you want to do
those things, then you can set .LockAspectRatio to False, or ignore it
and let it take its default value of False.

--
Regards,
Jay Freedman
Microsoft Word MVP        FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the
newsgroup so all may benefit.
Karl E. Peterson - 15 Feb 2007 21:17 GMT
> I'd say it's broken. If you explicitly set the .LockAspectRatio
> parameter to True, you have every right to expect that setting one
[quoted text clipped - 3 lines]
> those things, then you can set .LockAspectRatio to False, or ignore it
> and let it take its default value of False.

Well, you can say _whatever_ you want, it doesn't change one simple fact: If you
rely on assumptions and expectations, as a developer, you will spend many
frustrating hours banging your head against the wall and pulling out your own hair.
If you actually write you code to *do* what you want it to do, and not rely on any
sort of default behavior, you spend far less time wondering why the code isn't doing
what you _want_ it to do (especially when it is, in fact, doing what you *told* it
to do! <g>).  Note I'm not saying your expectations are unreasonable.  The only
thing that's unreasonable here is the expectation that a compiler will act on your
expectations rather than what it's actually provided code to do.  These are
machines, afterall.  :-)
Signature

.NET: It's About Trust!
http://vfred.mvps.org

 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.