Solved

Function to Convert HTML to plain text

Posted on 2000-04-12
10
179 Views
Last Modified: 2010-05-02
I want to get the plain text out of an HTML string

Is there are API, or has someone written a function to do this ?

I know you can use a web browser control to do this - and I do, but I also need the functionality in a function call
0
Comment
Question by:tomnich
10 Comments
 
LVL 28

Expert Comment

by:AzraSound
ID: 2709248
0
 
LVL 9

Expert Comment

by:Ruchi
ID: 2709324
I have the code in my computer. I pasted this for you. If you want me to email you, please let me know.


'Put the following code in the module.

Option Compare Text
Option Explicit
Public Function HTML2Text(HTMLString As String, Optional SaveAsFile As String) As String
'USAGE:
'INPUT:  A string containg HTML tags, such as a web page.
'RETURNS:  The text only, with the HTML tags stripped.
'OPTIONAL PARAMETER: The full path of a file name you want to save the text to.

Const MAX_ROW_LENGTH = 65
Const MAX_LINE_LENGTH = 75

Dim sHTML As String
Dim sOut As String
Dim sWkg As String
Dim lLen As Long
Dim lngLoop As Long, lngCtr As Long

Dim sChar As String
Dim sTag As String
Dim bBodyStart As Boolean, bBodyTag As Boolean

Dim bPrevSpace As Boolean
Dim sCharCode As String
Dim bOL As Boolean, bUL As Boolean
Dim iPlaceInList As Integer

Dim iFileNum As Integer

Dim bOneCrLf As Boolean
Dim bTwoCrlf As Boolean
Dim lTempCtr As Long, iTempCtr As Integer
Dim lTempCtr2 As Long

Dim bFormatCell As Boolean

Dim lRowLength As Long
Dim iLineCount As Integer


Dim bInComment As Boolean
Dim sTemp As String, sTemp2 As String


Dim bFlag As Boolean
Dim bSubFlag As Boolean

Dim bOutputCells As Boolean
Dim lRowCharCount As Long
Dim sNestedTag As String
Dim sCharInCell As String
Dim sTagInCell As String
Dim sEndTag As String

Dim bInCells As Boolean
Dim bInScript As Boolean


sHTML = HTMLString
lLen = Len(sHTML)

For lngCtr = 1 To lLen

sTag = ""
sChar = Mid(sHTML, lngCtr, 1)


If sChar = "<" And Not bInComment Then


lngCtr = lngCtr + 1
lngLoop = 1
sWkg = ""
'start new loop to get the tag name
Do
'if we never find end, then we must exit
If lngCtr = lLen Then Exit For

sChar = Mid(sHTML, lngCtr, 1)
If sChar <> ">" Then
sWkg = sWkg & sChar

lngCtr = lngCtr + 1

End If

If sChar = ">" Or lngCtr >= lLen Then
If lngCtr < lLen Then
If Mid(sHTML, lngCtr + 1, 1) < 32 Then bPrevSpace = True
End If
'lTempCtr = lngCtr

Exit Do
End If



If RemoveAllSpaces(sWkg = "!--") Then Exit Do


'lngCtr = lngCtr + 1

Loop
sTag = Trim(sWkg)

'determine if another tag is coming because
'if so, we don't want to output any spaces.

bFlag = False
bSubFlag = False
lTempCtr = lngCtr + 1
If lTempCtr >= lLen Then Exit For
sTemp = Mid(sHTML, lTempCtr, 1)
If Asc(sTemp) <= 32 Then
sTemp = ""


Do

sTemp = sTemp & Mid(sHTML, lTempCtr, 1)
If sTemp = "<" Then
If bFlag Then bPrevSpace = True
Exit Do

ElseIf Asc(sTemp) > 32 Then

bPrevSpace = Not (bSubFlag)

Exit Do
ElseIf Asc(sTemp) <= 32 Then
bFlag = True
bSubFlag = Asc(sTemp) = 32

End If


lTempCtr = lTempCtr + 1
If lTempCtr >= lLen Then Exit For
sTemp = ""
Loop
End If

'Certain tags interest us: TITLE, <BR><P>

If InStr(Left(sTag, 1), "/") = 0 Then
If Left(sTag, 5) = "TITLE" Then
lngCtr = lngCtr + 1

Do

sChar = Mid(sHTML, lngCtr, 1)

If (sChar = "<" And sChar <> Chr$(13) And sChar <> Chr$(10)) Or lngCtr = lLen Then
If Not bInComment And Not bInScript Then sOut = sOut & vbCrLf & vbCrLf
iLineCount = 0
bTwoCrlf = True
lngCtr = lngCtr - 1
Exit Do
End If

sOut = sOut & sChar

lngCtr = lngCtr + 1
Loop
ElseIf Left(sTag, 4) = "BODY" And Not bInScript Then
bBodyTag = True
ElseIf (sTag = "P" Or Left(sTag, 2) = "P ") And Not bInScript Then
If bBodyStart And Not bTwoCrlf And Not bInScript And Not bInComment Then
sOut = sOut & vbCrLf & vbCrLf
iLineCount = 0
bTwoCrlf = True
End If
ElseIf (sTag = "TR" Or Left(sTag, 3) = "TR ") And Not bInScript Then

lTempCtr = lngCtr + 1
lRowCharCount = 0
bFlag = False
Do
sTemp = Mid(sHTML, lTempCtr, 1)
If sTemp = "<" Then 'get name of tag
    sNestedTag = ""
    Do
        lTempCtr = lTempCtr + 1
        If lTempCtr >= lLen Then Exit For
        sTemp2 = Mid(sHTML, lTempCtr, 1)
        If sTemp2 = ">" Then Exit Do
        sNestedTag = sNestedTag & sTemp2
    Loop
End If

If (sNestedTag = "/TR" Or sNestedTag = "/TABLE") And Not bInScript Then
bOutputCells = (lRowCharCount < MAX_ROW_LENGTH)
Exit Do
ElseIf (sNestedTag = "TABLE" Or Left$(sNestedTag, 6) = "TABLE ") And Not bInScript Then
bOutputCells = False
Exit Do
ElseIf (sNestedTag = "TD" Or Left$(sNestedTag, 3) = "TD " _
Or sNestedTag = "TH" Or Left$(sNestedTag, 3) = "TH ") And Not bInScript Then
lTempCtr = lTempCtr + 1

bFlag = False
Do
If lTempCtr >= lLen Then Exit For
sCharInCell = Mid(sHTML, lTempCtr, 1)
Select Case sCharInCell
Case "<" 'nested tag
 lTempCtr = lTempCtr + 1
 sTagInCell = ""
  Do
   If lTempCtr >= lLen Then Exit For
    sTemp2 = Mid(sHTML, lTempCtr, 1)
     If sTemp2 <> ">" Then
      sTagInCell = sTagInCell & sTemp2
    Else
     Exit Do
    End If
    lTempCtr = lTempCtr + 1
  Loop

 
 If RemoveAllSpaces(sTagInCell) = "/TD" Then
     sNestedTag = ""
     Exit Do
 ElseIf (sTagInCell = "P" Or Left$(sTagInCell, 2) = "P " _
     Or sTagInCell = "BR" Or Left$(sTagInCell, 3) _
     = "BR ") And Not bInScript Then
         
         lRowCharCount = MAX_ROW_LENGTH + 1
         Exit Do
End If
 Case Else
     If Not bFlag And Not bInScript Then lRowCharCount = lRowCharCount + 1
 End Select
lTempCtr = lTempCtr + 1
Loop
End If 'td tag

If lTempCtr = lLen Then Exit For
lTempCtr = lTempCtr + 1
Loop 'loop begins under the TR condition
lRowCharCount = 0

sOut = sOut & vbCrLf
iLineCount = 0
bOneCrLf = True

bInCells = False
ElseIf sTag = "TD" Or Left(sTag, 3) = "TD " _
Or sTag = "TH" Or Left(sTag, 3) = "TH " Then
If bOutputCells Then
If bInCells Then sOut = sOut & Space$(3)
bInCells = True
Else
sOut = sOut & vbCrLf
bOneCrLf = True
End If

ElseIf sTag = "BR" Or sTag = "TABLE" Or Left$(sTag, 5) = "TABLE" Then
If bBodyStart And Not bOneCrLf Then
sOut = sOut & vbCrLf
iLineCount = 0
bOneCrLf = True
End If
ElseIf sTag = "OPTION" Or Left(sTag, 7) = "OPTION " Then
sOut = sOut & vbCrLf & vbTab
iLineCount = 0
ElseIf sTag = "SCRIPT" Or Left(sTag, 7) = "SCRIPT " Then
bInScript = True

ElseIf Left(sTag, 3) = "!--" And bBodyTag Then
bInComment = True
ElseIf sTag = "OL" Or Left(sTag, 3) = "OL " Then
bOL = True
sOut = sOut & vbCrLf & vbCrLf
iLineCount = 0
ElseIf sTag = "UL" Or Left(sTag, 3) = "UL " Then
bUL = True
sOut = sOut & vbCrLf & vbCrLf
iLineCount = 0
ElseIf sTag = "LI" Or Left(sTag, 3) = "LI " Then
'if not in the middle of a numbered list, just add bullet
sOut = sOut & vbCrLf
iLineCount = 0
If bOL Then
iPlaceInList = iPlaceInList + 1
sOut = sOut & iPlaceInList & ". "
iLineCount = iLineCount + 2
Else
sOut = sOut & Chr$(149) & " "
iLineCount = iLineCount + 2
End If

End If

Else 'end tag

If Left(RemoveAllSpaces(sTag), 7) = "/SCRIPT" Then bInScript = False

If bBodyStart Then
'we need to find the end for bOL and bUL
'if you want to process other end tags
'do it here.
Select Case Left(RemoveAllSpaces(sTag), 3)
Case "/OL"
bOL = False
If Not bTwoCrlf Then
sOut = sOut & vbCrLf & vbCrLf
iLineCount = 0
bTwoCrlf = True
End If
iPlaceInList = 0
Case "/UL"
bUL = False
If Not bTwoCrlf Then
sOut = sOut & vbCrLf & vbCrLf
iLineCount = 0
bTwoCrlf = True
End If
End Select

End If 'instr(stag, "/")
End If 'bbodystart

Else 'not a tag
sChar = Mid(sHTML, lngCtr, 1)
If bBodyTag Then
Select Case sChar
Case "<" 'another new tag
If Not bInComment And Not bInScript Then
lngCtr = lngCtr - 1 'go back and let top of loop handle tag
sTag = ""
sWkg = ""
End If

Case " "
'only one space is processed in HTML
'rest are ignored
If bPrevSpace = False Then
If Not bInComment And Not bInScript Then sOut = sOut & sChar
bPrevSpace = True
iLineCount = iLineCount + 1

If iLineCount >= MAX_LINE_LENGTH Then
sOut = sOut & vbCrLf
iLineCount = 0
End If
End If
Case "-" 'see if this is the end of the comment
If bBodyStart Then
If bInComment Then
sTemp = ""


lTempCtr = lngCtr
lTempCtr2 = 0

Do
sTemp = sTemp & Mid(sHTML, lTempCtr, 1)

If Mid(sHTML, lTempCtr, 1) = ">" Then
sTemp2 = RemoveAllSpaces(sTemp)
If Right$(sTemp2, 3) = "-->" Then
bInComment = False
Exit Do
End If
End If
If lTempCtr = lLen Then Exit For
lTempCtr = lTempCtr + 1
lTempCtr2 = lTempCtr2 + 1
Loop
If lTempCtr < lLen Then lngCtr = lngCtr + lTempCtr2
Else

bPrevSpace = False
sOut = sOut & "-"
bOneCrLf = False
bTwoCrlf = False
iLineCount = iLineCount + 1
End If
End If
Case "&" 'special character code, or maybe just an ampersand

sTemp = ""
bFlag = False

For lTempCtr = (lngCtr + 1) To (lngCtr + 7)
sTemp = Mid(sHTML, lTempCtr, 1)
If sTemp = ";" Then
bFlag = True
Exit For
ElseIf sTemp = "&" Then
bFlag = False
Exit For
End If

Next

If bFlag Then
sCharCode = ""
lngCtr = lngCtr + 1
Do
sChar = Mid(sHTML, lngCtr, 1)
If sChar = ";" Then Exit Do
sCharCode = sCharCode + sChar
lngCtr = lngCtr + 1

Loop
'special character. must end with ";"
If Not bInComment And Not bInScript Then
sTemp2 = HTMLSpecChar2ASCII(sCharCode)
sOut = sOut & sTemp2
bPrevSpace = False
bOneCrLf = False
bTwoCrlf = False
iLineCount = iLineCount + Len(sTemp2)
End If
Else
If Not bInComment And Not bInScript Then
sOut = sOut & "&"
bPrevSpace = False
bOneCrLf = False
bTwoCrlf = False
iLineCount = iLineCount + 1
End If
End If


Case Else
bBodyStart = True
'asc below 31 = nonprintable
If Asc(sChar) < 31 Then
If bPrevSpace = False Then
If Not bInComment And Not bInScript Then sOut = sOut & " "
iLineCount = iLineCount + 1
bPrevSpace = True

If iLineCount >= MAX_LINE_LENGTH Then
sOut = sOut & vbCrLf
iLineCount = 0
End If
End If
Else
If Not bInComment And Not bInScript And Asc(sChar) > 31 Then
sOut = sOut & sChar

bPrevSpace = False
bOneCrLf = False
bTwoCrlf = False
iLineCount = iLineCount + 1

End If
End If
End Select
End If 'bbodystart
End If 'sChar = "<"

DoEvents


Next



'return output
HTML2Text = sOut

If SaveAsFile <> "" Then
On Error GoTo ErrorHandler
'save output to string
iFileNum = FreeFile
Open SaveAsFile For Output As #iFileNum
Print #iFileNum, sOut
Close #iFileNum

End If


Exit Function
ErrorHandler:

On Error Resume Next
Close #iFileNum
Exit Function

End Function

Private Function BinaryEqualityTest(String1 As String, _
String2 As String) As Boolean

BinaryEqualityTest = (StrComp(String1, String2, _
vbBinaryCompare) = 0)

End Function
Private Function HTMLSpecChar2ASCII(ByVal HTMLCode As String) As String

Dim sAns As String, sInput As String

sInput = LCase(HTMLCode)
If Left$(sInput, 1) = "#" Then
sInput = Mid(sInput, 2)
End If

If IsNumeric(sInput) Then
sAns = Chr$(Val(sInput))
Else
Select Case sInput
Case "quot"
sAns = ""
Case "amp"
sAns = "&"
Case "lt"
sAns = "<"
Case "gt"
sAns = ">"
Case "nbsp"
sAns = Chr$(160)
Case "iexcl"
sAns = Chr$(161)
Case "cent"
sAns = Chr$(162)
Case "pound"
sAns = Chr$(163)
Case "curren"
sAns = Chr$(164)
Case "yen"
sAns = Chr$(165)
Case "brvbar"
sAns = Chr$(166)
Case "sect"
sAns = Chr$(167)
Case "uml"
sAns = Chr$(168)
Case "copy"
sAns = Chr$(169)
Case "ordf"
sAns = Chr$(170)
Case "laquo"
sAns = Chr$(171)
Case "not"
sAns = Chr$(172)
Case "shy"
sAns = Chr$(173)
Case "reg"
sAns = Chr$(174)
Case "macr"
sAns = Chr$(175)
Case "deg"
sAns = Chr$(176)
Case "plusmn"
sAns = Chr$(177)
Case "sup2"
sAns = Chr$(178)
Case "sup3"
sAns = Chr$(179)
Case "acute"
sAns = Chr$(180)
Case "micro"
sAns = Chr$(181)
Case "para"
sAns = Chr$(182)
Case "middot"
sAns = Chr$(183)
Case "cedil"
sAns = Chr$(184)
Case "supl"
sAns = Chr$(185)
Case "ordm"
sAns = Chr$(186)
Case "raquo"
sAns = Chr$(187)
Case "frac14"
sAns = Chr$(188)
Case "frac12"
sAns = Chr$(189)
Case "frac34"
sAns = Chr$(190)
Case "iquest"
sAns = Chr$(191)
Case "agrave"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(224), Chr$(192))
Case "aacute"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(225), Chr$(193))
Case "acirc"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(226), Chr$(194))
Case "atilde"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(227), Chr$(195))
Case "auml"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(228), Chr$(196))
Case "aring"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(229), Chr$(197))
Case "aelig"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(230), Chr$(198))
Case "ccedil"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(231), Chr$(199))
Case "egrave"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(232), Chr$(200))
Case "eacute"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(233), Chr$(201))
Case "ecirc"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(234), Chr$(202))
Case "euml"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(235), Chr$(203))
Case "igrave"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(236), Chr$(204))
Case "iacute"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(237), Chr$(205))
Case "icirc"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(238), Chr$(206))
Case "iuml"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(239), Chr$(207))
Case "eth"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(240), Chr$(208))
Case "ntilde"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(241), Chr$(209))
Case "ograve"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(242), Chr$(210))
Case "oacute"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(243), Chr$(211))
Case "ocirc"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(244), Chr$(212))
Case "otilde"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(245), Chr$(213))
Case "otilde"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(245), Chr$(213))
Case "ouml"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(246), Chr$(214))
Case "times"
sAns = Chr$(215)
Case "oslash"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(248), Chr$(216))
Case "ugrave"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(249), Chr$(217))
Case "uacute"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(250), Chr$(218))
Case "ucirc"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(251), Chr$(219))
Case "uuml"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(252), Chr$(220))
Case "yacute"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(253), Chr$(221))
Case "thorn"
sAns = IIf(BinaryEqualityTest(sInput, HTMLCode) = True, Chr$(254), Chr$(222))
Case "szlig"
sAns = Chr$(223)
Case "divide"
sAns = Chr$(247)
Case "yuml"
sAns = Chr$(255)


End Select
End If

HTMLSpecChar2ASCII = sAns
End Function

Private Function RemoveAllSpaces(ByVal InputString As String) _
As String

Dim sAns As String
Dim lLen As String
Dim lCtr As Long, lCtr2 As Long
Dim sChar As String


lLen = Len(InputString)
sAns = InputString
lCtr2 = 1

For lCtr = 1 To lLen
sChar = Mid(InputString, lCtr, 1)
If sChar <> " " Then
Mid(sAns, lCtr2, 1) = sChar
lCtr2 = lCtr2 + 1
End If
Next

If lCtr2 > 1 Then
sAns = Left(sAns, lCtr2 - 1)
Else
sAns = ""
End If

RemoveAllSpaces = sAns
End Function



0
 
LVL 4

Expert Comment

by:dreamvb
ID: 2709519
here try this it should work for you

 Sub StripHtml(HtmlFile As String, SaveTxt As String)
 Dim FileNum As Integer
 Dim ReadLine As Integer
 Dim StrBuffer As String
 Dim TagFound As Boolean
  FileNum = FreeFile
  ReadCount = 0
   Open HtmlFile For Input As #FileNum
     Open SaveTxt For Output As #2
    Do While Not EOF(FileNum)
    Input #FileNum, StrBuffer
     B = ""
     
        For ReadLine = 1 To Len(StrBuffer)
       Select Case Mid(StrBuffer, ReadLine, 1)
        Case "<"
         TagFound = True
         Case ">"
         TagFound = False
         Case Else
          If Not TagFound Then B = B & Mid(StrBuffer, ReadLine, 1)
          End Select
           Next
             Print #2, B
     Loop
     
      Close #FileNum
     Close #2
End Sub


Just add the code in a command buton below

StripHtml "C:\Test.htm", "c:\Test.txt"

 hope this helps
0
 
LVL 1

Author Comment

by:tomnich
ID: 2711477
Ruchi, that is a perfect answer

Post an answer and I'll give you the points

dreamvb, yours seems a little too basic, and I also don't want to pass it a file - just an HTML string
0
 
LVL 9

Accepted Solution

by:
Ruchi earned 100 total points
ID: 2712689
Tomnich, thank you for the points. I'm glad that I could be of any help to you! :-)
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 1

Author Comment

by:tomnich
ID: 2716370
I've had a problem

Converting the following

<BODY>T&lt; B&gt;om<BR>Hi&lt; /B&gt;</A></BODY>

gives

T< B>om
Hi< /B>

and not

Tom
Hi
0
 
LVL 9

Expert Comment

by:Ruchi
ID: 2716715
I did what you say, and I got the same result what you have mentioned the above. Remember that most of the formatting is sspecified by using pairs of tags of the form <Tagname> and </Tagname> that indicate the start and end of the format. Remember?? You should put the <B> and </B> instead.

i.e.
<BODY>T&lt;<B>&gt;om<BR>Hi&lt;</B>&gt;</A></BODY>

which gives you
T < >om
Hi< >


I modifed a few lines...

Change

    Case "lt"
        sAns = "<"
    Case "gt"
        sAns = ">"
to

    Case "lt;"
        sAns = "<"
    Case "gt;"
        sAns = ">"

That will give you Tom
                   Hi

Hope this helps.
0
 
LVL 1

Author Comment

by:tomnich
ID: 2716759
I see what you're saying.  The problem is I'm getting the HTML out of an HTML control - so I have no control of the use of </B> rather than /B
0
 
LVL 9

Expert Comment

by:Ruchi
ID: 2716896
Ok..

If you want to download HTML to Text from CNET site, it is located at http://download.cnet.com/downloads/0-10092-100-862877.html?tag=st.dl.10092.dir.10092-100-862877. I did convert by using that software, it gave the same result ---
T< B>om
Hi< /B>
Well, all I can say is that I don't know how to do with your latest problem. Maybe someone else can help you.
0
 
LVL 1

Author Comment

by:tomnich
ID: 2716948
I assume my HTML is a bit unusual

Perhaps somewhere in my code I'm messing it up - I'll look more closely

Thanks for your help, that's a monster of a function !
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now