为什么字符串搜索不起作用?

时间:2018-01-05 15:43:07

标签: excel vba if-statement

我正在尝试创建一个自动更新的工作表,该工作表跟踪文本框在列方面排列的所有位置。这是为了创建一个甘特图。基本上当我拖动文本框时,它是告诉我它在哪一周,每次我更改一个文本框时它都会更新它。下图很好地说明了这一点。 enter image description here

问题是当我一直拖动文本框并一遍又一遍地改变位置时,周数不会覆盖前一周的7周13,而只是将新旧位置连接起来,如下所示: enter image description here 我正在尝试写一个if语句,基本上说如果子串"周"在标题中然后将多行文本框解析为行并用新位置覆盖第一行。 这是我写的代码我只需要帮助这个if语句:

Option Explicit
Public alltxt As String
Private selectText() As String

Private Sub CommandButton1_Click()
    UF1.Show
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim ws As Worksheet
    Set ws = Target.Parent
    Dim temp
    Dim i
    Dim pos

    Dim shp As Shape
    Dim line As Variant
    For Each shp In ws.Shapes   'loop through all shapes
        If shp.Type = msoTextBox Then 'that are text boxes
            'write the header cells into the text box
            temp = shp.OLEFormat.Object.Caption
            **If InStr(temp, "week")= 0 Then**
                shp.OLEFormat.Object.Caption = ws.Cells(1, shp.TopLeftCell.Column).Text & " - " & ws.Cells(1, shp.BottomRightCell.Column).Text & vbNewLine & shp.OLEFormat.Object.Caption
                Else
                    selectText = Split(shp.OLEFormat.Object.Caption, vbNewLine)
                    selectText(0) = ws.Cells(1, shp.TopLeftCell.Column).Text & " - " & ws.Cells(1, shp.BottomRightCell.Column).Text
                End If

        End If
    Next shp
End Sub

任何正确方向的推动都会非常值得赞赏。请记住,我对vba相对较新,所以这可能是一个非常简单的解决方法。

提前致谢

1 个答案:

答案 0 :(得分:1)

我认为你的if条件没问题,但是在else部分中似乎有一个错误

编辑:最终的if条件可以修改为:

If InStr(temp, "week")= 0 Then
    shp.OLEFormat.Object.Caption = ws.Cells(1, shp.TopLeftCell.Column).Text & " - " & ws.Cells(1, shp.BottomRightCell.Column).Text & vbNewLine & shp.OLEFormat.Object.Caption
Else
    selectText = Split(shp.OLEFormat.Object.Caption, Chr(10))
    shp.OLEFormat.Object.Caption = ws.Cells(1, shp.TopLeftCell.Column).Text & " - " & ws.Cells(1, shp.BottomRightCell.Column).Text
    for i=1 to UBound(selectText)
        shp.OLEFormat.Object.Caption = shp.OLEFormat.Object.Caption & vbNewLine & selectText(i)
    Next i
End If

关注操作系统相关的新行字符(请参阅vbNewline vs Chr(10) as linebreak delimiter in Windows vs. Mac OSX