2013-05-21 47 views
0

我有一個電子數據表,看起來像這樣比較兩個字符串:在名稱如何從細胞用繩子從輸入框()

Group | Name | Title 
----------------------------------- 
X   WS  - 
X   DH  - 
X   M  - 
X   DH  - 
X   WS  - 

我要遍歷所有的細胞,並用其全部更換初期存在名稱除了添加正確的標題。我的劇本是無法準確比較字符串和進入if語句

Sub enterNameAndTitle() 

    lastCell = InputBox("Last cell") 
    rInitials = InputBox("Initials") 
    rFullName = InputBox("Full Name") 
    rTitle = InputBox("Title") 

    Dim cell As Range 

    For Each cell In Range("b2:b" & lastCell).Cells 

     MsgBox (cell.Text & " : " & rInitials) 

     If StrComp(UCase(cell.Value), UCase(rInitials)) = 0 Then 
      cell.Value = rFullName 
      ActiveSheet.Cells(cell.Row, cell.Column + 1).Value = rTitle 
     End If 

    Next cell 

End Sub 

所以我先通過所有值收集數據,然後循環。有人知道我做錯了嗎?爲什麼它不準確地比較字符串?

回答

0

我看不出什麼毛病,但是有兩件事我會嘗試

一種是使用TRIM,確保既不串已經開頭或結尾的空白

的第二點是,如果改變到if(ucase(trim(cell.value))=ucase(trim(rInitials)))

+0

我試過這個,但它一直返回「false」,我不知道爲什麼這不起作用 – JeroenEijkhof

+0

解決了它!我必須在兩個字符串上使用CStr()來強制它們的類型。我認爲這是因爲cell.Value返回一個Variant對象。 – JeroenEijkhof

0

的問題是不同的類型和這似乎爲我工作的唯一途徑之一是重新投用CStr的()這兩個變量爲String類型

Sub enterNameAndTitle() 

    Dim lastCell As String 
    lastCell = InputBox("Last cell") 

    'Cast to string 
    Dim rInitials As String 

    rInitials = CStr(InputBox("Initials")) 
    Dim rFullName As String 
    rFullName = InputBox("Full Name") 
    Dim rTitle As String 
    rTitle = InputBox("Title") 

    Dim cell As Range 

    For Each cell In Range("b2:b" & lastCell).Cells 

     Dim cellText As String 

     'Cast to string 
     cellText = CStr(cell.Text) 

     If (Trim(UCase(cell.Value)) = Trim(UCase(rInitials))) Then 
      MsgBox ("test1") 
      cell.Value = rFullName 
      ActiveSheet.Cells(cell.Row, cell.Column + 1).Value = rTitle 
     End If 

    Next cell 

End Sub