I\'m trying to write an If then statement to see if a string has a space in it. If it does, I want it to put an \" and \" around the variable. Below is my current code:
To properly escape a double quote inside VB's double quoted string literal, you need to double it (no pun intended). This means an empty string ""
. When you squeeze a quote in it, you get 4 quotes """"
, and this really means just one double quote literal.
You should be using:
MsgBox("""" & ColumnText & """")
Instead of:
MsgBox(""" & ColumnText & """)
Another thing - notice how the syntax parser highlights your line when it has 3 quotes. In this case & ColumnText &
is part of the literal, instead of being an inline variable.
Reference:
Using quote literals makes for hard to read code and as seen here, can easily lead to errors. I find it much easier to use (and read) String.Format
and isolate things you want to call out differently. For instance:
msg = String.Format("There is a problem with [{0}]", columnText)
The result: There is a problem with [foobar]
If you really like quotes, or need for something else like a command line argument, you can still make the code more legible this way:
Const quote As String = """"
' or
Private quote = Convert.ToChar(34) ' 34 is the code for the quote char
'...
msg = String.Format("There is a problem with {0}{1}{0}", quote, columnText)
The result: There is a problem with "foobar"
In cases where there are multiple things to wrap with quotes, you just repeat {0}
for each as shown.
You can try this:
If ColumnText.Contains(" ") Then
MsgBox(Chr(34) & ColumnText & Chr(34))
End If
Next