我正在尝试创建一个自动更新的工作表,该工作表跟踪文本框在列方面排列的所有位置。这是为了创建一个甘特图。基本上当我拖动文本框时,它是告诉我它在哪一周,每次我更改一个文本框时它都会更新它。下图很好地说明了这一点。
问题是当我一直拖动文本框并一遍又一遍地改变位置时,周数不会覆盖前一周的7周13,而只是将新旧位置连接起来,如下所示: 我正在尝试写一个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相对较新,所以这可能是一个非常简单的解决方法。
提前致谢
答案 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)