Posts Tagged ‘macros’

It's a thing which annoyed me a little until I found out that users of later (2010 and on) versions of M/S Word than mine could do it. Then, while it still would never have featured anywhere near my top ten list of Most Annoying Things Ever, the green-eyed god on my be-chipped shoulder certainly hoisted it several feet further up the flag-pole of pesky annoyances….

If you have a macro which makes multiple changes, each of them is added to the undo stack separately, which means, obviously, that you have to hit the undo button or Ctrl+Z multiple times to undo those changes. Which is kind of a bugger if you're unsure how many changes it actually made, either 'cause you've forgotten the workings of the macro or 'cause there's a few if…then clauses in there.


Read Full Post »

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.


Read Full Post »

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"
    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
  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 †

Read Full Post »


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…)

Read Full Post »

Some M/S Visual Basic Macros

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…)

Read Full Post »