Editing multiline textbox

G

Guest

Hi!

I have simple userform with one multiline textbox and 6 checkboxes. My
problem is how to make that checking a checkbox will copy the textbox value
to a new line without deleting the upper line. I tried various things but I
cant avoid the deletion of the upper line (especialy in the case of more then
one checked checkbox).
I will be grateful for any suggestion.

Thanks in advance

Eli
 
R

Rick Rothstein \(MVP - VB\)

I have simple userform with one multiline textbox and 6 checkboxes. My
problem is how to make that checking a checkbox will copy the textbox
value
to a new line without deleting the upper line. I tried various things but
I
cant avoid the deletion of the upper line (especialy in the case of more
then
one checked checkbox).

Copy the "textbox value" to a new line? Where is this new line going?

Did you, perhaps, mean to type "copy the CheckBox Caption property to the
bottom of the TextBox? If not, I think you will need to clarify what is
being copied and to where.

Rick
 
G

Guest

Rick,
Before one of the checkboxes are checked the textbox has one line, with for
example the word - apple. I am asking about the creation of new line inside
the textbox that the word apple will appear with the word Juice for example.
So the textbox after one checked checkbox will be:

apple
apple juice
apple pie (after the seconed checked checkbox)

Eli
 
N

NickHK

Something like:
TextBox1.value=TextBox1.value & " juice"
But that is the same line

Or do you mean:
TextBox1.value=TextBox1.value & vbnewline & "juice"

So what happens when the user uncheck that CheckBox ?
Seems that a ListBox would be more appropriate for your needs.

NickHK
 
R

Rick Rothstein \(MVP - VB\)

I have simple userform with one multiline textbox and 6 checkboxes. My
Before one of the checkboxes are checked the textbox has one line, with
for
example the word - apple. I am asking about the creation of new line
inside
the textbox that the word apple will appear with the word Juice for
example.
So the textbox after one checked checkbox will be:

apple
apple juice
apple pie (after the seconed checked checkbox)

Okay, now I think I see what you are asking. While you could concatenate new
text onto the old text like this...

TextBox1.Text = TextBox1 & vbCrLf & "Next Line"

it is more efficient to use the SelText property instead like this...

TextBox1.SelStart = Len(TextBox1.Text)
TextBox1.SelText = vbCrLf & "Juice"

A word about that first line. If, and this is a big if, the user can
possibly move the text cursor before you add your next line, then you need
it (because the new text is placed wherever the text cursor is located at).
On the other hand, if you were adding your text in a loop, you can omit it.
By the way, you can seed the TextBox with its first line by using the Text
property (you have to start somewhere<g>).

Rick
 
R

Rick Rothstein \(MVP - VB\)

Can you explain how to do it with a Listbox?

ListBox1.AddItem "Apple"
ListBox1.AddItem "Juice"

Rick
 
N

NickHK

Here's one way, but whether is suitable depends on what the user needs to do
and what you intend to do after.

Private Sub UserForm_Initialize()
With ListBox1
.AddItem "Apple"
End With
End Sub

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
AddToList ListBox1, CheckBox1.Caption
Else
RemoveFromList ListBox1, CheckBox1.Caption
End If
End Sub

Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
AddToList ListBox1, CheckBox2.Caption
Else
RemoveFromList ListBox1, CheckBox2.Caption
End If
End Sub

Private Function AddToList(WhichList As MSForms.ListBox, WhichText As
String) As Boolean
With WhichList
.AddItem .List(0) & " " & WhichText
End With
End Function

Private Function RemoveFromList(WhichList As MSForms.ListBox, WhichText As
String) As Boolean
Dim i As Long

With WhichList
For i = 1 To .ListCount - 1
If .List(i) = .List(0) & " " & WhichText Then
.RemoveItem i
Exit Function
End If
Next
End With
End Function

NickHK
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top