时间:2016-06-03 13:44:32

标签: excel-vba excel-2013 vba excel

我的列范围约为500行。大多数这些单元格都以文本形式存储。我使用该范围内的值填充userform上的列表框。当用户从列表框中选择其中一个值时,事件将使用“索引和匹配”在另一列的同一行中找到该值,并将其显示在userform的标签中。当我从列表框中选择少数单元格中的一个未存储为范围内的文本时,我会收到错误,因为存在前导空格。我假设填充的列表框自动从范围中的任何单元格中删除前导空格。因此,当它试图从列表框中找到值12345时,例如,在该范围内它找不到它,因为该范围包含(空格)12345。我试过了:

Public Sub UserForm_Initialize()

Dim arr() As Variant
Dim rNum As Range

Const sNum As String = "Number"

Me.EnableEvents = False

wsName = "Report"
Set curWb = ActiveWorkbook
Set pReport = curWb.Worksheets(wsName)
Set pTable = pReport.ListObjects("tableName")

With pReport
    If .AutoFilterMode = True Then .ShowAllData
    .Cells.Rows.Hidden = False
    .Cells.Columns.Hidden = False
End With

Set wf = Application.WorksheetFunction

With pTable
    Set rNum = .ListColumns(.ListColumns(sNum).Range.column).DataBodyRange
End With

-- HERE is where I tried all my implementations without success

arr = wf.Transpose(pReport.Range(rNum.address).Value)

Call BubbleSort(arr)

frmIssues.lstIssues1.List = arr

lstIssues1.ListStyle = 1
lstIssues2.ListStyle = 1
lstIssues1.MultiSelect = 2
lstIssues2.MultiSelect = 2
txtFocus.SetFocus

Me.EnableEvents = True

End Sub
Private Sub lstIssues1_Change()

Dim rNum As Range
Dim rTitle As Range
Dim strResult As String
Dim intIndex As Integer
Dim intCount As Integer

Const sNum As String = "Number"
Const sTitle As String = "Title"

If EnableEvents = False Then Exit Sub

With lstIssues1
    For intIndex = 0 To .ListCount - 1
        If .Selected(intIndex) Then intCount = intCount + 1
    Next
End With

If intCount = 1 Then
    Set wf = Application.WorksheetFunction
    wsName = "Report"
    Set curWb = ActiveWorkbook
    Set pReport = curWb.Worksheets(wsName)
    Set pTable = pReport.ListObjects("tableName")

    With pTable
        Set rNum = .ListColumns(.ListColumns(sNum).Range.column).DataBodyRange
        Set rTitle = .ListColumns(.ListColumns(sTitle).Range.column).DataBodyRange
    End With

    With pReport
        strResult = wf.Index(.Range(rTitle.address), wf.Match(lstIssues1.List(lstIssues1.ListIndex), .Range(rNum.address), 0))
    End With

    lblDescription.Caption = wf.Trim(strResult)
    txtFocus.SetFocus
Else
    lblDescription.Caption = ""
    txtFocus.SetFocus
    Exit Sub
End If

Me.EnableEvents = False

For i = 0 To lstIssues2.ListCount - 1
    If lstIssues2.Selected(i) = True Then lstIssues2.Selected(i) = False
Next

Me.EnableEvents = True

End Sub

及其众多变体(Clean,CStr,.Text等)并没有任何效果。真的,我不知道如何解决这个问题,任何帮助都非常感激。谢谢!

澄清

1)此Excel文件是从Web生成的。

2)宏将工作表转换为表格

3)Left(Range("D362"),1)返回1(数字,例如12345)

4)错误发生前Range("D362")返回(space)12345

5)错误发生后Range("D362")返回(space)12345

1 个答案:

答案 0 :(得分:0)

我刚测试了这个,它可以在字符串的开头删除空格。可悲的是,它不是一行,因为我(很可能你)会喜欢

Sub test()

Dim CellValue As String
Dim lngNumberOfCharacters As Long

CellValue = ActiveCell.Value
CellValueCheck = Left(CellValue, 1)

If CellValueCheck = " " Then
lngNumberOfCharacters = Len(CellValue) - 1

CellValue = Right(CellValue, lngNumberOfCharacters)
ActiveCell.Value = CellValue
End If

End Sub

如果您需要任何确认,请告诉我

相关问题