从MS Word用户表单中获取要从中打印的多选列表框项目

时间:2014-06-26 21:10:33

标签: vba listbox ms-word multi-select userform

我正在努力获取它,以便如果某人在用户窗体的列表框中选择了多个项目,那么这些项目将全部打印在从设置书签开始的Word文档中。我把它们作为连续的If语句来做,希望能够使它们只是叠加在一起。但是不行。任何帮助,将不胜感激。有更多的州有联系信息,但我认为这样可以更容易使用。

With ActiveDocument
  .Bookmarks("Contact").Select
  Dim varItem As Variant
  Dim i As Long
  Do While Len(Me.lstState & vbNullString) > 0
    For Each varItem In lstState
      For i = 0 To Len(Me.lstState) - 1
        If lboState.Selected(i) = "Alabama" Then
          .Selection.WriteLine ("Alabama UI: 866-555-5382")
          .Selection.WriteLine ("www.alabama.com")
          .Selection.WriteLine ("")
        End If
        If lstState.Selected(i) = "Alaska" Then
          .Selection.WriteLine ("Alaska UI: 907-555-5552")
          .Selection.WriteLine ("www.alaska.us")
          .Selection.WriteLine ("")
        End If
      Next i
    Next varItem
  Loop
End With

1 个答案:

答案 0 :(得分:0)

这是你应该寻找的:

Dim i As Integer

With ActiveDocument
  .Bookmarks("Contact").Select

    For i = 0 To lstState.ListCount - 1
      If lstState.Selected(i) = True Then
        If lstState.List(i) = "Alabama" Then
          Selection.TypeText ("Alabama UI: 866-555-5382") & vbCr
          Selection.TypeText ("www.alabama.com") & vbCr
          Selection.TypeText vbCr
        End If
        If lstState.List(i) = "Alaska" Then
          Selection.TypeText ("Alaska UI: 907-555-5552") & vbCr
          Selection.TypeText ("www.alaska.us") & vbCr
          Selection.TypeText vbCr
        End If
      End If
    Next i
End With

夫妻俩错了:

  1. 您试图错误地遍历所选项目;你需要使用lstState.ListCount递增每个项目,它返回列表框中的项目总数。
  2. 您错误地选择了所选值; lstState.List(i)将为您提供项目(选定状态)。
  3. lboState不存在 - 可能只是开发中的一个错误。
  4. 选择是一个应用程序范围的属性(在给定时间只有一个);所以。暗示它属于ActiveDocument的选择是不正确的。
  5. 没有Selection.WriteLine方法;使用TypeText。
  6. 所以只是一点VBA不正确,但你会学习。我在每个项目(vbCr)之后添加了换行符,但您可以更多地使用格式。如果您计划遍历每个州,请查看SELECT ... CASE。

    编辑:我再次将整数调整为整数,因为我已经删掉了一些OP的代码而忘了替换它。