2012-12-09 147 views
0

我想根據特定條件在Excel表格中的單個單元格中輸入多個值,如在工作簿中是否有多個工作表,然後是以名稱TC開頭的任何工作表包含顏色,然後我必須將Excel Workbook的「自述」部分中的信息輸入另一個工作表。我的代碼的問題是,它不顯示包含着色的唯一表單...假設工作表「TC_1」和「TC_3」在任何單元格中都包含顏色,則其顯示輸出爲「; TC_3; TC_3; TC_3;」儘管這裏的預期產出是「TC_1; TC_3」。在excel中在單個單元格中輸入多個值

這裏是代碼:

Sub ErrorInSheet() 
    Dim Row 
    Dim Names As String 
    Names = "" 

    For Row = 2 To tsheet.UsedRange.Rows.Count 
     For Chkcol = 1 To tsheet.UsedRange.Columns.Count 
      If tsheet.Cells(Row, Chkcol).Interior.ColorIndex = 3 Then 
       Names = Names & ";" & tsheet.Name 
      End If 
     Next 
    Next Row 

    Sheets("Read Me").Cells(13, 5).Value = Names 

End Sub 

Sub iterateSheets() 

    For Each sheet1t In Worksheets 

     If InStr(1, sheet1t.Name, "TC") Then 
      Set tsheet = sheet1t 
      Call ErrorInSheet 
     End If 
    Next 
End Sub 

回答

2

我認爲這會爲你工作 - 我測試了它,併爲我工作。

Sub FindErrors() 
    Dim sht As Worksheet, cl As Range, shtNames As String 

    shtNames = vbNullString 

    For Each sht In Worksheets 
     If Left$(sht.Name, 2) = "TC" Then 
      For Each cl In sht.UsedRange.Cells 
       If cl.Interior.ColorIndex = 3 Then 
        shtNames = IIf(shtNames = vbNullString, sht.Name, shtNames & ";" & sht.Name) 
       End If 
      Next cl 
     End If 
    Next sht 

    Worksheets("Read Me").Cells(13, 5) = shtNames 
End Sub 

注:

  1. 我明確聲明的變量
  2. 我假設你所有的牀單與「TC」開始,所以我用過Left$但你可以使用InStr,如果你喜歡
  3. 我已使用三元IIF聲明來阻止您獲得領先;
  4. 我已將所有代碼放入一個Sub但你可以分開它,如果你喜歡
+0

謝謝你向我展示完成這種情況的另一種方式。 –

+0

沒問題 - 很高興它幫助你。 –

相關問題