Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height proportio
Hi,
My sub will insert a picture into my template and resize the width to 240. The original picture aspect ratio will vary, so I will not know the resize height ahead of time. I have written the below sub all by myself so far, so there's a good chance there's something wrong with it. It resizes the height proportionately to the width, then places the bottom left corner of the picture at the bottom left corner of cell K11. Dim PicHt As Double Dim PcWd As Double Dim PicRatio As Double PRM.Activate PRM.Cells(12, 11).Select PRM.Pictures.Insert "C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg" With PRM.Pictures("Picture 8") PicHt = .Height PicWd = .Width PicRatio = PicHt / PicWd .Select .Width = 240 .Height = PicHt * PicRatio .Top = .Top - .Height + 1 End With It seems to work so far, but I have two specific questions and if you see anything else I could do better, please let me know. 1. Is Double the correct data type to use? I know Long doesn't work because it's integers only. I tried Decimal, but my vba doesn't recognize this data type. All I need is for it to go to 2 decimal points. I'm not exactly sure what Double means, even after reading the Help definition. What data type is best for this? 2. Is there a way to specify the picture to manipulate as the last picture inserted instead of "Picture 8"? I tried using this method I found in a post: Dim Pic as Picture Dim sStyle As String sStyle = PRM.Cells(5, 2).Text Set Pic = PRM.Pictures.Insert "C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg" Pic.Selet But an error states that the quotation mark after "Sketches\" should be the end of statement. It does work with a normal file path, but I think my variable is throwing it off. Thank you! Thanks! |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height proportio
#1. I'd use As Double because I want to include the decimal portion of the
number. #2. Set Pic = PRM.Pictures.Insert("C:\Documents and Settings\Olab\" & _ "My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg") (notice the extra ()'s.) justme wrote: Hi, My sub will insert a picture into my template and resize the width to 240. The original picture aspect ratio will vary, so I will not know the resize height ahead of time. I have written the below sub all by myself so far, so there's a good chance there's something wrong with it. It resizes the height proportionately to the width, then places the bottom left corner of the picture at the bottom left corner of cell K11. Dim PicHt As Double Dim PcWd As Double Dim PicRatio As Double PRM.Activate PRM.Cells(12, 11).Select PRM.Pictures.Insert "C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg" With PRM.Pictures("Picture 8") PicHt = .Height PicWd = .Width PicRatio = PicHt / PicWd .Select .Width = 240 .Height = PicHt * PicRatio .Top = .Top - .Height + 1 End With It seems to work so far, but I have two specific questions and if you see anything else I could do better, please let me know. 1. Is Double the correct data type to use? I know Long doesn't work because it's integers only. I tried Decimal, but my vba doesn't recognize this data type. All I need is for it to go to 2 decimal points. I'm not exactly sure what Double means, even after reading the Help definition. What data type is best for this? 2. Is there a way to specify the picture to manipulate as the last picture inserted instead of "Picture 8"? I tried using this method I found in a post: Dim Pic as Picture Dim sStyle As String sStyle = PRM.Cells(5, 2).Text Set Pic = PRM.Pictures.Insert "C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg" Pic.Selet But an error states that the quotation mark after "Sketches\" should be the end of statement. It does work with a normal file path, but I think my variable is throwing it off. Thank you! Thanks! -- Dave Peterson |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height propo
Thanks, Dave! Your suggestion certainly worked! It was my bad...parens were in original post by Tom O. BTW, I know Double works, but I'm not exactly sure of all the different data types that allow decimal points. I read the help definitions, but I'm still not sure. Could you please explain in lay terms the difference between the different data types that allow decimals? thank you!!! |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height propo
if you search for "data type summary" in VBA-Help you get a good overview.
Double is an 8-byte floating number, which works good in your case. You could also use Single (4-byte floating number) which is smaller, but I don't know if it would change a lot in your project. hth Carlo "justme" wrote: Thanks, Dave! Your suggestion certainly worked! It was my bad...parens were in original post by Tom O. BTW, I know Double works, but I'm not exactly sure of all the different data types that allow decimal points. I read the help definitions, but I'm still not sure. Could you please explain in lay terms the difference between the different data types that allow decimals? thank you!!! |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height propo
Hi Carlo,
thank you for your reply, but like I said, I already read the vba help summary and I really don't understand the terms used like "floating point", etc. etc. I was hoping for someone could explain in lay terms the difference between the different data types that allow decimals. p.s. in case anyone is pays attention to my picture resizing sub where you only know the width, I caught a boo boo and here's the revised sub: SUMFB.Activate SUMFB.Cells(15, 16).Select '''VARIABLE PRM Set pSketch = SUMFB.Pictures.Insert("C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg") '''VARIABLE PRM With pSketch PicHt = .Height PicWd = .Width .Select .Width = 240 PicRatio = .Width / PicWd .Height = PicHt * PicRatio .Top = .Top - .Height + 1 End With |
#6
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height propo
Floating Point means decimal point.
So, if you want to use decimal point you can choose between: double and single if you want to have whole numbers you can choose between all the rest (including single and double) Hope that I spoke in lay terms, as I am also a lay ;) For your Resize sub you can shorten it to: ---------------------------------------------------------- SUMFB.Activate 'i'm not sure, if you really need to select this cell! SUMFB.Cells(15, 16).Select '''VARIABLE PRM Set pSketch = SUMFB.Pictures.Insert("C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg") '''VARIABLE PRM With pSketch PicRatio = .Width / .Height .Width = 240 .Height = .Width * PicRatio 'not sure, what you want to achieve with the following line .Top = .Top - .Height + 1 End With ---------------------------------------------------------- hth Carlo "justme" wrote: Hi Carlo, thank you for your reply, but like I said, I already read the vba help summary and I really don't understand the terms used like "floating point", etc. etc. I was hoping for someone could explain in lay terms the difference between the different data types that allow decimals. p.s. in case anyone is pays attention to my picture resizing sub where you only know the width, I caught a boo boo and here's the revised sub: SUMFB.Activate SUMFB.Cells(15, 16).Select '''VARIABLE PRM Set pSketch = SUMFB.Pictures.Insert("C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg") '''VARIABLE PRM With pSketch PicHt = .Height PicWd = .Width .Select .Width = 240 PicRatio = .Width / PicWd .Height = PicHt * PicRatio .Top = .Top - .Height + 1 End With |
#7
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height propo
Thanks Carlo for the explanation and for the code tightening. I need that last line because it is part of how I position the picture by lining up the lower left corner to the lower left corner of a cell. :) "Carlo" wrote: Floating Point means decimal point. So, if you want to use decimal point you can choose between: double and single if you want to have whole numbers you can choose between all the rest (including single and double) Hope that I spoke in lay terms, as I am also a lay ;) For your Resize sub you can shorten it to: ---------------------------------------------------------- SUMFB.Activate 'i'm not sure, if you really need to select this cell! SUMFB.Cells(15, 16).Select '''VARIABLE PRM Set pSketch = SUMFB.Pictures.Insert("C:\Documents and Settings\Olab\My Documents\0- Wear Testing\Sketches\" & sStyle & ".jpg") '''VARIABLE PRM With pSketch PicRatio = .Width / .Height .Width = 240 .Height = .Width * PicRatio 'not sure, what you want to achieve with the following line .Top = .Top - .Height + 1 End With ---------------------------------------------------------- hth Carlo |
#8
Posted to microsoft.public.excel.programming
|
|||
|
|||
Insert picture, resize to specific width, keeping height propo
Floating Point means decimal point.
A bit of a simplication. More than you want to know?: http://en.wikipedia.org/wiki/Floating_point A waste of time (but funny?) http://del.icio.us/url/53db119a950dc8c8b8dfbd087cf4680e Ignore this if it makes things more confusing: (This ignores negative numbers) (This uses small numbers just for explanation) If you have a 3-digit field, three options for storing numbers: 1) Integer: You can store 0 to 999. You can store only the integer part of 1.2 You can't store 12000 nor .00034 You can't store 12345 nor .00056789. 2) Fixed (decimal) Point, say 2 decimal places. You can store 0.00 to 9.99. 3) Floating Point: Allows you to store a very large range of numbers but at 2-digit accuracy instead of 3. The first 2 digits will be the "mantissa", the first 2 significant digits, which will range from .00 to .99 The 3rd digit will be 4 + the exponent of 10. The exponent can range from -4 to 5. The equation of the value is mantissa * 10 ^ (3rd digit - 4). ("^" means "to the power of") You will be able to store 0 to 99. store 1.2 and 34000 and .00056. store 999 and 12345 and .00056789, but not exactly. 1 stores as 105 (.10*10^1=1) 1.2 stores as 125 (.12*10^1=1.2) 10 stores as 106 (.10*10^2=10) 99 stores as 996 (.99*10^2=99) 100 stores as 107 (.10*10^3=100) 230 stores as 237 (.23*10^3=230) 1000 stores as 108 (.10*10^4=1000) 34000 stores as 349 (.34*10^5=34000) ..1 stores as 104 (.10*10^0=.1) ..00056 stores as 561 (.56*10^-3=.00056) 999 stores as 997 (.99*10^3=990) not exact 12345 stores as 129 (12*10^5=12000) not exact ..00056789 stores as 561 (.56*10^-3=.00056) not exact In binary it's a binary point instead of a decimal point, but the idea is the same. But .8 in binary is ..110011001100..(infinitely) as 1/3 in decimal is ..3333..(inifinitely); and there is rounding, so there are comparing issues in floating point. D-C Dave ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==---- http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Insert, position, and resize a picture w/ Macro | Excel Discussion (Misc queries) | |||
Resize Last Row to Fill a Page Width | Excel Discussion (Misc queries) | |||
resize row height and column height | Setting up and Configuration of Excel | |||
resize row and colomn height | Excel Programming | |||
get a picture width and height without inserting the picture | Excel Programming |