Содержание
- 1 Add items to ListBox
- 2 Add item to List Box
- 3 Add names of all open workbooks to the list box
- 4 Assign the data in a worksheet to RowSource of a ListBox
- 5 Determining the selected item
- 6 Evaluating Which Items Are Selected in the Multiselect List Box
- 7 Get all selected items in a list box
- 8 Get selected from ListBox
- 9 Get the selected items in a ListBox
- 10 Make sure the RowSource property is empty
- 11 Select the items programmatically
Add items to ListBox
<source lang="vb">
Sub ShowDialog()
With UserForm1.ListBox1
.MultiSelect = fmMultiSelectSingle
.RowSource = ""
.AddItem "January"
.AddItem "February"
.AddItem "March"
.AddItem "April"
.AddItem "May"
.AddItem "June"
.AddItem "July"
.AddItem "August"
.AddItem "September"
.AddItem "October"
.AddItem "November"
.AddItem "December"
End With
UserForm1.Show
End Sub
</source>
Add item to List Box
<source lang="vb">
Private Sub Form_Load()
Dim obj As AccessObject
For Each obj In CurrentData.AllTables
Me.yourListBox.AddItem obj.Name
Next obj
End Sub
</source>
Add names of all open workbooks to the list box
<source lang="vb">
Sub UserForm_Initialize()
Dim wkBook As Workbook
For Each wkBook In Workbooks
lstWorkbooks.AddItem wkBook.Name
Next
End Sub
</source>
Assign the data in a worksheet to RowSource of a ListBox
<source lang="vb">
Private Sub obMonths_Click()
ListBox1.RowSource = "Sheet1!Months"
End Sub
</source>
Determining the selected item
<source lang="vb">
Private Sub OKButton_Click()
Dim Msg As String
Msg = "You selected item # "
Msg = Msg & ListBox1.ListIndex
Msg = Msg & vbNewLine
Msg = Msg & ListBox1.Value
MsgBox Msg
Unload UserForm1
End Sub
</source>
Evaluating Which Items Are Selected in the Multiselect List Box
<source lang="vb">
Private Sub cmdRunReports_Click()
Dim varItem As Variant
Dim lst As ListBox
Set lst = Me.yourList
If lst.MultiSelect > 0 Then
If lst.ItemsSelected.Count > 0 Then
For Each varItem In lst.ItemsSelected
DoCmd.OpenReport lst.ItemData(varItem), acViewPreview
Next varItem
End If
End If
End Sub
</source>
Get all selected items in a list box
<source lang="vb">
Private Sub OKButton_Click()
If ListBox1.ListIndex = -1 Then
msg = "Nothing"
Else
msg = ""
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then _
msg = msg & ListBox1.List(i) & vbCrLf
Next i
End If
MsgBox "You selected: " & vbCrLf & msg
Unload Me
End Sub
</source>
Get selected from ListBox
<source lang="vb">
Private Sub OKButton_Click()
ActiveCell = ListBox1.Value Unload Me
End Sub
</source>
Get the selected items in a ListBox
<source lang="vb">
Private Sub OKButton_Click()
Dim Msg As String
Dim i As Integer
Msg = "You selected" & vbNewLine
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
Msg = Msg & ListBox1.List(i) & vbNewLine
End If
Next i
MsgBox Msg
Unload UserForm1
End Sub
</source>
Make sure the RowSource property is empty
<source lang="vb">
Sub ShowDialog1()
With UserForm1
.ListBox1.RowSource = "Sheet1!Months"
.obMonths.Value = True
End With
UserForm1.Show
End Sub
</source>
Select the items programmatically
<source lang="vb">
Private Sub SelectAllButton_Click()
For r = 0 To ListBox1.ListCount - 1
ListBox1.Selected(r) = True
Next r
End Sub
</source>
- Remove From My Forums
-
Question
-
I am creating a listbox for an online Word form I am creating. I am using the legacy list box as I have about 70 records that I need to include in this listbox. I’m in the Visual Basic area and learned my «line was too long» so I researched that
I could add «& _» to break up the lines. That worked great. However, now the record at the end of the line before «& _» shows up on the same line as the record on the next line, when I run the code. How can I fix this. I have searched
and searched and can’t find it.Example:
ListBox1.List = Array(«Apples», «Oranges», «Watermelon», «Kiwi», «Bananas» & _
«Limes», «Lemons», «Grapes», «Cherries», «Cantelope», «Blackberry»)After I run and go back to see how it works in the Word form, here is how it shows up in the listbox:
Apples
Oranges
Watermelon
Kiwi
BananasLimes (HERE LIES THE PROBLEM. How do I get «Limes» to go to the next line in the Listbox?)
Lemons
Grapes
etc.
I really appreciate your help. I’m spending way too much time trying to figure this out.
Thanks,
Lauren
Answers
-
Try:
ListBox1.List = Array(«Apples», «Oranges», «Watermelon», «Kiwi», «Bananas», _
«Limes», «Lemons», «Grapes», «Cherries», «Cantelope», «Blackberry»)(note the comma after «Bananas»)
Cheers
Paul Edstein
[MS MVP — Word]-
Edited by
Monday, April 7, 2014 4:42 PM
remove & -
Marked as answer by
George Hua
Monday, April 7, 2014 4:43 PM
-
Edited by
-
Sorry, you should omit the & as well.
Cheers
Paul Edstein
[MS MVP — Word]-
Marked as answer by
lawoman728
Thursday, March 6, 2014 10:13 PM
-
Marked as answer by
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
private void button1_Click(object sender, EventArgs e) { var nomerzakaza = textBox8.Text; var firstName = textBox3.Text; var lastName = textBox2.Text; var otchestvo = textBox4.Text; var marka = textBox5.Text; var model = textBox6.Text; var godvipyska = textBox7.Text; var gosnomer = textBox9.Text; var opisanie = textBox1.Text; var wordApp = new Word.Application(); wordApp.Visible = false; try { var wordDocument = wordApp.Documents.Open(TemplateFileName); ReplaceWordSub("{nomerzakaza}", nomerzakaza, wordDocument); ReplaceWordSub("{firstname}", firstName, wordDocument); ReplaceWordSub("{lastname}", lastName, wordDocument); ReplaceWordSub("{otchestvo}", otchestvo, wordDocument); ReplaceWordSub("{marka}", marka, wordDocument); ReplaceWordSub("{model}", model, wordDocument); ReplaceWordSub("{godvipyska}", godvipyska, wordDocument); ReplaceWordSub("{gosnomer}", gosnomer, wordDocument); ReplaceWordSub("{opisanie}", opisanie, wordDocument); ReplaceWordSub("{repairitem}", repairitem, wordDocument); { wordDocument.SaveAs(@"C:UsersOberleutnantDesktopReportszakaz-naryad.docx"); wordApp.Visible = false; MessageBox.Show("Заказ-наряд создан. Вы можете найти его на рабочем столе в папке Reports"); //Сообщение об успешном сохранении файла wordDocument.Close(); //Закрытие документа MS Word } } catch { MessageBox.Show("Error"); //Вывод сообщения в случае ошибки } finally { wordApp.Quit(); //Выход из MS Word } } |
You say you don’t want to open the Excel file? The second line of your code «Opens» the Excel file.
You could use and ADODB connection:
Code:
Option Explicit
Public Function xlFillList(oListOrComboBox As Object, strWorkbook As String, _
bSuppressHeader As Boolean, strSQL As String, _
bSingleColumn As Boolean)
Dim oConn As Object
Dim oRecordSet As Object
Dim lngNumRecs As Long, lngIndex As Long
Dim strWidth As String
Dim strConnection As String
'Create connection:
Set oConn = CreateObject("ADODB.Connection")
If bSuppressHeader Then
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strWorkbook & ";" & _
"Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
Else
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strWorkbook & ";" & _
"Extended Properties=""Excel 12.0 Xml;HDR=NO"";"
End If
oConn.Open ConnectionString:=strConnection
Set oRecordSet = CreateObject("ADODB.Recordset")
'Read the data from the worksheet.
oRecordSet.Open strSQL, oConn, 3, 1 '3: adOpenStatic, 1: adLockReadOnly
With oRecordSet
'Find the last record.
.MoveLast
'Get count.
lngNumRecs = .RecordCount
'Return to the start.
.MoveFirst
End With
With oListOrComboBox
.Clear
'Load the records into the columns of the named list/combo box.
.ColumnCount = oRecordSet.Fields.Count
.Column = oRecordSet.GetRows(lngNumRecs)
strWidth = vbNullString
If bSingleColumn Then
'Set the widths of the combo/list box columns to display only the first column.
strWidth = .Width - 20 & " pt;"
For lngIndex = 2 To .ColumnCount
strWidth = strWidth & "0 pt"
If lngIndex < .ColumnCount Then
strWidth = strWidth & ";"
End If
Next lngIndex
Else
For lngIndex = 1 To .ColumnCount
strWidth = strWidth & Val(.Width .ColumnCount) - 10 & " pt;"
Next lngIndex
.ColumnWidths = strWidth
End If
End With
Cleanup:
If oRecordSet.State = 1 Then oRecordSet.Close
Set oRecordSet = Nothing
If oConn.State = 1 Then oConn.Close
Set oConn = Nothing
lbl_Exit:
Exit Function
End Function
Call from form like this:
Code:
Private Sub UserForm_Initialize() Dim DataSourcePath As String Dim strSQL As String DataSourcePath = ThisDocument.Path & "Basic Fill.xlsx" 'Get all data from sheet named "BasicI", exclude heading row, single Column strSQL = "SELECT * FROM [BasicI$];" mod_ExcelInteropSA.xlFillList lstBasicI, DataSourcePath, "True", strSQL, "True" 'Get all data from sheet named "BasicII", including heading row, show all columns strSQL = "SELECT * FROM [BasicII$];" mod_ExcelInteropSA.xlFillList lstBasicII, DataSourcePath, "False", strSQL, "False" 'Get data from columns headed "Name" and "Amount" from sheet named "BasicIII", exclude heading row, show all columns strSQL = "SELECT Name, Amount From [BasicIII$];" mod_ExcelInteropSA.xlFillList lstBasicIII, DataSourcePath, "True", strSQL, "False" lbl_Exit: Exit Sub End Sub
Kevin Tang said:
Hello,
I have a ListBox in my VBA Form, named ListBox1
In UserForm_Initialize(), I have two statements to enable List Column Head:
ListBox1.ColumnCount = 2
ListBox1.ColumnHeads = TrueMy questions are:
1) how to set the Column Head’s name? such as «ID», «Name»….
You can’t. There is a bug in VBA and Microsoft never got round to fixing it.
Instead, set ColumnHeads to False, and position a couple of labels
immediately above the listbox whose captions will show the column headings.
2) how to add item into ListBox1 in both columns?? (e.g. Add (00001,
Kevin) )
Two possible approaches to this.
1. If you want to load the entire listbox in one go, put all your items into
a 2-dimensional array, and then assign the array to the List property of the
Listbox.
2. If you just want to add a single new row, use AddItem to add the new row
and assign text to the cell pointed to by the BoundCOlumn property (column 0
by default), Then add the text to the second column by using
ListBox1.List(n, 1) = «My new text», where n is the row number you want.
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS
Contact US
Thanks. We have received your request and will respond promptly.
Log In
Come Join Us!
Are you a
Computer / IT professional?
Join Tek-Tips Forums!
- Talk With Other Members
- Be Notified Of Responses
To Your Posts - Keyword Search
- One-Click Access To Your
Favorite Forums - Automated Signatures
On Your Posts - Best Of All, It’s Free!
*Tek-Tips’s functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.
Posting Guidelines
Promoting, selling, recruiting, coursework and thesis posting is forbidden.
Students Click Here
ListBox in MS WordListBox in MS Word(OP) 24 Apr 01 14:53 I guess I’m spoiled by Access, but I can’t figure out how to insert a listbox into a Word macro to enable the user to select text to be inserted into a document. Everything I’ve read leaves me very confused. Can anyone help a senile old man do this?? Thanks. Red Flag SubmittedThank you for helping keep Tek-Tips Forums free from inappropriate posts. |
Join Tek-Tips® Today!
Join your peers on the Internet’s largest technical computer professional community.
It’s easy to join and it’s free.
Here’s Why Members Love Tek-Tips Forums:
Talk To Other Members
- Notification Of Responses To Questions
- Favorite Forums One Click Access
- Keyword Search Of All Posts, And More…
Register now while it’s still free!
Already a member? Close this window and log in.
Join Us Close
Add a reference to Microsoft.Office.Interop.Word to your project, it is under the Extensions tab:
This code will generate a document, create a table, and just populate the table with the string hello. I assume that you know how to read data from your listboxes, so you should be able to easily adapt this code to do that:
Imports Word = Microsoft.Office.Interop.Word
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim word As New Word.Application()
word.Visible = True
Dim doc = word.Documents.Add()
Dim table = doc.ActiveWindow.Selection.Tables.Add(doc.ActiveWindow.Selection.Range, 30, 10)
For i As Integer = 0 To 9
table.Cell(i, i).Range.Text = "hello"
Next
End Sub
End Class


Talk To Other Members