When I were but a wee nipper, the words "billion" and "trillion" were hardly ever heard, outside of hyperbole, unless one had an interest in astronomy and cosmology. (And even then, we had to be careful in our reading, since the nationality of the author and the editorial policies of their British publisher might make a difference, what with our billion being, until recently, a thousand times larger than the American billion.) These days, "billion" is much more often seen, mostly because of the now-universal adoption of 109 rather than 1012 as the definition of the word, which brings things like world population and national debts into its range; and on the topic of national debts, "trillion" (also shrunken by a factor of one thousand in UK terms) is, distressingly, coming into much more common usage. Which is partly why I found the idea of Microsoft Word's cardtext feature, which converts figures into words—but only up to 999,999—rather less than useful.
Posts Tagged ‘macros’
A goodly while back someone, somewhere, asked me if there was a workaround for this and I said I'd get back to 'em. Problem is I can't remember where the question was asked, so I'm just going to post it here and hope they read the blog…
There's an easy way, in VBA, to tell if a selected string in a Microsoft Word document is a number:
Sub IsNumber() If IsNumeric(Selection) = True Then MsgBox "It's a number" Else MsgBox "It's not a number" End If End Sub
(It will count strings with commas and/or full-stops* (used as decimal points) in them as numbers provided everything else is a digit.)
* That's "periods" to some of you strange foreign types.
Unfortunately there's no equivalent method for telling if a string contains nothing but letters, and that's the workaround I was asked for. Well, my first thought was something like this:
Sub Sub IsABC() If Selection.Range.Case = wdLowerCase Or _ Selection.Range.Case = wdTitleWord Then MsgBox "All letters" End Sub
… but with a complete list of possible cases instead of just the two in that example. Unfortunately, it turns out that provided the selection includes letters, it'll quite happily report spaces, commas, hyphens etc and even numbers, as being letters. Select one of those things on its own however, and it won't do so—which does leave us with the option of checking character-by-character. So here's my workaround. It ain't pretty, but it does do the job asked of it:
Sub IsABC() Dim iSelected As Integer iSelected = Len(Selection) iCount = 0 Do While iCount < iSelected iCount = iCount + 1 If Selection.Range.Characters.Last.Case = wdUpperCase = False And _ Selection.Range.Characters.Last.Case = wdLowerCase = False Then Selection.moveend unit:=wdCharacter, Count:=iCount - 1 MsgBox "Not all letters" Exit Sub End If Selection.moveend unit:=wdCharacter, Count:=-1 Loop Selection.MoveRight unit:=wdCharacter, Count:=iSelected, Extend:=wdExtend MsgBox "All letters" End Sub
All it does is check the final character in the selection, then shrink the selection by one character and check again, until it either runs into something that's not upper or lower case (i.e., not a letter)—in which case it reselects the characters it's deselected and reports that the selection is "Not all letters"—or until it runs out of things to check, in which case it reselects the whole lot and reports that the selection is indeed "All letters." (Presumably, in actual use, it would make a Boolean true or false. I didn't ask what it was wanted for.)
Anyways, that's me lot. As ever, I hope this will be of help to somebody.
You may use these HTML tags in comments
<a href="" title=""></a> <abbr title=""></abbr>
<acronym title=""></acronym> <blockquote></blockquote> <del></del>* <strike></strike>† <em></em>* <i></i>† <strong></strong>* <b></b>†
* is generally preferred over †
I'll begin with a heads-up for John Zande. The first part of this might interest you, John, as I believe it meets a criterion you were asking about a while back.
A kind soul of my acquaintance took it upon herself to beta-test those macros I posted t'other day. Turns out there's a couple of bugs. Both are minor in that they're easily fixed, but one is potentially disastrous in that it causes what I (probably erroneously) think of as a feedback loop. So let's take a look at that first. (I would, in the normal course of things, just edit the post in question and publish a correction-post pointing it out, but as I say, John was asking for an example of this kind of thing a while back, so what the hell; let's expound on it a bit.)
The macro in question is the SelectTheWord macro, and the part that's buggy is this bit: (more…)
Hello there Internet. My, but it's been a while.
To the several readers who've sent me mails enquiring after my health, I'm very sorry to have worried you. Twas nought but a clapped-out router taking way too long to replace. I'm replying to emails individually, but my inbox is, well, you can probably guess, so I figured I'd get a post up letting you know I'm hale and hearty. (more…)