search
Japanese Chinese Nederlands Espanol Italiano Deutsch Francais Twitter Rss Feeds
MicrosoftArticlesForumsFAQs
C# .NET
VB.NET
Visual Studio .NET
ADO.NET
Xml / Xslt
VB 6.0
.NET CF
GDI+
LINQ
Deployment
Security
FoxPro
Silverlight / WPF
Entity Framework
RIA Services

Web ProgrammingArticlesForumsFAQs
JavaScript
ASP
ASP.NET
Web Services

Non-MicrosoftArticlesForumsFAQs
NHibernate
Perl
PHP
Ruby
Java
Linux / Unix
Apple
Open Source

DatabasesArticlesForumsFAQs
SQL Server
Access
Oracle
MySQL
Other Databases

OfficeArticlesForumsFAQs
Excel
Word
Powerpoint
Outlook
Publisher
Money

Operating SystemsArticlesForumsFAQs
Windows 7
Windows Server
Windows Vista
Windows XP
Windows Update
MAC
Linux / UNIX

Server PlatformsArticlesForumsFAQs
BizTalk
Site Server
Exhange Server
IIS

Graphic DesignArticlesForumsFAQs
Macromedia Flash
Adobe PhotoShop
Expression Blend
Expression Design
Expression Web

OtherArticlesForumsFAQs
Subversion / CVS
Ask Dr. Dotnetsky
Active Directory
Networking
Uninstall Virus
Job Openings
Product Reviews
Search Engines
Resumes

 

View Other VB 6.0 Posts   Ask New Question 
Add thousands Separator in VB Message Box
alfred van cleef posted at Saturday, November 01, 2008 6:59 PM

Hi all,

I am a Dutch, professional literary writer and I created a macro that helps me to count the words and pages of the book I am currently writing. For various reasons I chose not to use the regular built-in word counting tool for this goal. I use Windows XP, Word 2003 and VB 6.3. I wrote a macro, in which I would like the words and pages to be displayed with a (European) thousands separator in a Message Box. Now it will read in my Message Box: Words: 13456 or 123456 and I want it to read 13.456 or 123.456.

My regional settings are Dutch. The normal built-in word counting option in the Tools menu of Word 2003 does work well: it uses the regular European thousands separator and will read 13.456 for 13456 or 123.456 for 123456, but my message box numbers won't. Is there a way to change this behaviour? I tried the FontNumbers option, but without success.

Here is my macro (I changed Dutch into English or 'My Text'):

Sub CountWords()

MsgBox "Pages:  " & Selection.Information(wdNumberOfPagesInDocument) & vbCrLf _

& "Words: " & ActiveDocument.Range.ComputeStatistics(wdStatisticWords) _

& vbCrLf & vbCrLf & "My Text", vbOKOnly, "My Text"

End Sub

 

Thanks in advance,

Alfred

PS I am not an expert in programming at all, so I would prefer to just get some lines of code I could add to the above macro that will force the counted pages and words to use a thousands separator


 
Add thousands Separator in VB Message Box
Jack Shah replied to alfred van cleef at Sunday, November 02, 2008 12:46 AM

Hi Alfred,

select all of the doc and try either of below:

MsgBox Selection.Words.Count
MsgBox Selection.Range.ComputeStatistics(wdStatisticWords)

The second comes closer to what you want, though it is regrettable that Word uses different methods for word count.

Alternativelly you can use below macro:

Sub countWords()
   Dim nWords As Long
   Dim rDcm As Range
   Dim oWrd As Range
   Set rDcm = ActiveDocument.Range
   For Each oWrd In rDcm.Words
       If Len(oWrd) > 0 Then
         nWords = nWords + 1
      End If
    Next
MsgBox "Total word count= " & nWords
End Sub

You can also see http://web.ticino.com/multilingual/word_character_count_tips.htm for getting various macros for word count with explaination how to run it and use it.

-Jack

 
counting words and pages with thousands separator
alfred van cleef replied to Jack Shah at Sunday, November 02, 2008 11:53 AM

Hallo Jack,

 

Thanks very much for your fast answer. In my macro I did use already the ComputeStatistics (wdStatisticWords) method and it does count the words correctly. It does not use a thousands separator, however, as the regular words counting option in the Word 2003 Tools menu does. So the word count that is displayed in my Message Box reads 123456 instead of 123.456 which is how I want the numbers to be displayed. Your CountWords macro does not display a thousands separator either.

Alfred

 
  reply
Jack Shah replied to alfred van cleef at Sunday, November 02, 2008 10:48 PM

Ohhh...Ok use below code it does it: You will need to user Format function thats it :-)

Sub countWords()
   Dim nWords As Long
   Dim rDcm As Range
   Dim oWrd As Range
   Set rDcm = ActiveDocument.Range
   For Each oWrd In rDcm.Words
       If Len(oWrd) > 0 Then
         nWords = nWords + 1
      End If
    Next
MsgBox "Total word count= " & Format(nWords,"#,##0.0")

End Sub
 

Details of functions that you can use:

For example: a = 12345000

 Format(a,"#,##0.0") --> 12,345,000.0
 Format(a,"#,###") --->12,345,000

value = 1234567890
value.ToString("#,#", CultureInfo.InvariantCulture))  --> 1,234,567,890      
value.ToString("#,#",CultureInfo.CreateSpecificCulture("el-GR")))  --> 1.234.567.890
Jack
 
try this example
C_A P replied to alfred van cleef at Monday, November 03, 2008 9:47 AM

Example

This example shows various uses of the Format function to format values using both String formats and user-defined formats. For the date separator (/), time separator (:), and the AM/PM indicators (t and tt), the actual formatted output displayed by your system depends on the locale settings the code is using. When times and dates are displayed in the development environment, the short time format and short date format of the code locale are used.

Dim MyDateTime As Date = #1/27/2001 5:04:23 PM#
Dim MyStr As String
' Returns current system time in the system-defined long time format.
MyStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
MyStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
MyStr = Format(Now(), "D")
' Returns the value of MyDateTime in user-defined date/time formats.
MyStr = Format(MyDateTime, "h:m:s") ' Returns "5:4:23".
MyStr = Format(MyDateTime, "hh:mm:ss tt") ' Returns "05:04:23 PM".
MyStr = Format(MyDateTime, "dddd, MMM d yyyy") ' Returns "Saturday,
' Jan 27 2001".
MyStr = Format(MyDateTime, "HH:mm:ss") ' Returns "17:04:23"

MyStr = Format(23) ' Returns "23".
' User-defined numeric formats.
MyStr = Format(5459.4, "##,##0.00") ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00") ' Returns "334.90".
MyStr = Format(5, "0.00%") ' Returns "500.00%".

MyStr = Format(23.99, "$##,##0.00") ' Returns "$23.00".


more info available on
http://www.seattlecentral.edu/~ymoh/mic110vb/function_list.htm
 
Thanks + Save document that does not have focus
alfred van cleef replied to Jack Shah at Monday, November 03, 2008 10:24 AM

Hi Jack,

 

Thanks for your answer. Since the CountWords macro also counts paragraphs and punctuation as words, I kept on using the WordStatistic method, because it only counts real words. Using the principle of your format code, I managed to have it work exactly as desired. Thank you so much!!

I feel free to ask you one more – very last! – question. After having lost a day’s work when shutting down Word in a regular way, but without saving my work, I installed – to prevent this ever happening again - the following macro that I found on the internet:

 

Sub AutoOpen()

            WordSaver

End Sub

 

Sub WordSaver()

            Application.OnTime When:=Now + _

            TimeValue("00:10:00"), _

            Name:="Saver"

End Sub

 

Sub Saver()

            ActiveDocument.Save

WordSaver

End Sub

 

I attached this macro to the specific document that I am working on, which is called Boek (Book). This macro gives an error, however, when the active document does not have focus. Is there a way to make this macro work, whenever the document called ‘Boek’ is open, even when it does not have focus?

 

Thanks!

Alfred

 

 
Problem solved but thanks!
alfred van cleef replied to C_A P at Monday, November 03, 2008 10:28 AM
Hallo Adarsh! I just managed to solve my problem, but I will keep your information for future use. Thanks!