www_SMR_co_uk_was_too_offensive
asked on
Word VBA Row/Cell .Height property - ?!?!?!?
Dear everyone,
Am I like the last loneliest idiot in the world or something? It appears that the Word (2000) VBA Row (or Cell) property .Height doesn't actually return the height of the Row (or Cell).
For example:
(assume I've created a single cell table)
?Word.ActiveDocument.Table s(1).Rows( 1).Height
will NOT give me the HEIGHT of the FIRST ROW of the FIRST TABLE in the ACTIVE WORD DOCUMENT.
I dunno, I would have said I was pretty specific there...
Instead, the output is dependant on the value of a certain .HeightRule property. There are three possible values:
wdRowHeightAtLeast - Now the row has to be 'At least' .Height tall.
wdRowHeightAuto - The row height is determined by the amount of text therein.
wdRowHeightExactly - The row is exactly .Height tall (.Height is in points)
Here's the really good fun part. When .HeightRule is set to wdRowHeightExactly then .Height is, well, the height of the row. No probs. except we don't know how tall we want it do we, because that rather depends on whetehr the text will fit or not. Ok, next one. When .HeightRule is wdRowHeightAtLeast well now .Height returns the minimum height for the Row. How tall is the row actually? don't ask word, it hasn't got a clue. And finally, wdRowHeightAuto. The row height is determined automatically by the amount of text in it. and what does .Height return? 99999999 - or more specifically wdUndefined. GREAT. THANKYOU MICROSOFT.
So despite the fact that Word MUST know how big that damn Row is - it has to draw and print the damn thing doesn't it? - it WILL NOT tell you how big it is.
OK, I said, it's a little problem, but nothing a good workaround won't solve:
(MyRow as Row, PleaseWork as Long)
MyRow.HeightRule = wdRowHeightAuto
MyRow.Cells(1).Range.Text = "Horses"
MyRow.HeightRule = wdRowHeightExactly
PleaseWork = MyRow.Height
No such luck. Instead, the bit about wdRowHeightExactly actually RESIZED my bloody Row! So that whilst .Height is now accurate, the bottom of the text is chopped off in my Table.
So exactly what the hell is the point in having a .Height property that is readable if you can't actually learn anything from its use? Why not just have a .Height method? hmm? Why not finish the job and have it pop up a little window that says "Screw you programmer! Ha ha! - The boys at MS"
Or maybe it's me. I really hope so. Any ideas anyone? (BTW I'm not just ranting, I really need to sort this out, so beg, grovel etc etc)
=malc=
Am I like the last loneliest idiot in the world or something? It appears that the Word (2000) VBA Row (or Cell) property .Height doesn't actually return the height of the Row (or Cell).
For example:
(assume I've created a single cell table)
?Word.ActiveDocument.Table
will NOT give me the HEIGHT of the FIRST ROW of the FIRST TABLE in the ACTIVE WORD DOCUMENT.
I dunno, I would have said I was pretty specific there...
Instead, the output is dependant on the value of a certain .HeightRule property. There are three possible values:
wdRowHeightAtLeast - Now the row has to be 'At least' .Height tall.
wdRowHeightAuto - The row height is determined by the amount of text therein.
wdRowHeightExactly - The row is exactly .Height tall (.Height is in points)
Here's the really good fun part. When .HeightRule is set to wdRowHeightExactly then .Height is, well, the height of the row. No probs. except we don't know how tall we want it do we, because that rather depends on whetehr the text will fit or not. Ok, next one. When .HeightRule is wdRowHeightAtLeast well now .Height returns the minimum height for the Row. How tall is the row actually? don't ask word, it hasn't got a clue. And finally, wdRowHeightAuto. The row height is determined automatically by the amount of text in it. and what does .Height return? 99999999 - or more specifically wdUndefined. GREAT. THANKYOU MICROSOFT.
So despite the fact that Word MUST know how big that damn Row is - it has to draw and print the damn thing doesn't it? - it WILL NOT tell you how big it is.
OK, I said, it's a little problem, but nothing a good workaround won't solve:
(MyRow as Row, PleaseWork as Long)
MyRow.HeightRule = wdRowHeightAuto
MyRow.Cells(1).Range.Text = "Horses"
MyRow.HeightRule = wdRowHeightExactly
PleaseWork = MyRow.Height
No such luck. Instead, the bit about wdRowHeightExactly actually RESIZED my bloody Row! So that whilst .Height is now accurate, the bottom of the text is chopped off in my Table.
So exactly what the hell is the point in having a .Height property that is readable if you can't actually learn anything from its use? Why not just have a .Height method? hmm? Why not finish the job and have it pop up a little window that says "Screw you programmer! Ha ha! - The boys at MS"
Or maybe it's me. I really hope so. Any ideas anyone? (BTW I'm not just ranting, I really need to sort this out, so beg, grovel etc etc)
=malc=
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I paste it into a scratch doc to help looping, when done with that cell, you'd delete the scratch doc& goto next cell
ASKER
Thanks for your input guys, I eventually used a workaround in my prog, but I've just come up with this, which covers the general idea to some degree:
Sub test()
Dim MyRange As Range
Dim MyHeight As Long
Dim RandomString As String
'Some random text...
Randomize Timer
Do While (Int(Rnd * 30) > 0)
RandomString = RandomString + "horses "
Loop
'The table...
ThisDocument.Paragraphs(1) .Range.Sel ect
ThisDocument.Tables.Add Selection.Range, 1, 1
ThisDocument.Tables(1).Row s(1).Cells (1).Range. Text = RandomString
'Take a sounding...
ThisDocument.Tables(1).Sel ect
MyHeight = Selection.Range.Informatio n(wdVertic alPosition RelativeTo Page)
'Then another...
ThisDocument.Paragraphs(Th isDocument .Paragraph s.Count).R ange.Selec t
'Advanced algebraics...
MyHeight = Selection.Range.Informatio n(wdVertic alPosition RelativeTo Page) - MyHeight
'Display results...
MsgBox (Str(MyHeight))
End Sub
I think one could probably use this principle to make it happen.
I'll split the points, since I'm not sure who's input led me here :)
Sub test()
Dim MyRange As Range
Dim MyHeight As Long
Dim RandomString As String
'Some random text...
Randomize Timer
Do While (Int(Rnd * 30) > 0)
RandomString = RandomString + "horses "
Loop
'The table...
ThisDocument.Paragraphs(1)
ThisDocument.Tables.Add Selection.Range, 1, 1
ThisDocument.Tables(1).Row
'Take a sounding...
ThisDocument.Tables(1).Sel
MyHeight = Selection.Range.Informatio
'Then another...
ThisDocument.Paragraphs(Th
'Advanced algebraics...
MyHeight = Selection.Range.Informatio
'Display results...
MsgBox (Str(MyHeight))
End Sub
I think one could probably use this principle to make it happen.
I'll split the points, since I'm not sure who's input led me here :)
You can give to gilbar - but thanks anyway :)
thanxs www (and thank you too JO)
Should I give you a "points for" question gilbar?? I'm not sure - can I give you my points?
nope, i'm good, you keep 'em (i'll never be able to catch you and dreamboat any way ;) , your link was as least as good as my simple idea
Thanks gilbar :)
ASKER
hehe, gosh you guys are altruistic. kinda makes me feel all warm and fuzzy inside!
I had some problems dishing out the points this afternoon. EE seemed to be having some kinda probs...
I'll have another crack now...
=me=
I had some problems dishing out the points this afternoon. EE seemed to be having some kinda probs...
I'll have another crack now...
=me=