我想在VBA中編寫一個函數,它允許我連接單元格並在元素之間添加「,」。這個函數的另一個方面是,我只想連接與所選範圍中的第一個填充顏色和字體顏色相同的單元格。 (我的電子表格中包含不同顏色和字體顏色的單元格列表)。 如果在網上找到一個代碼,可以在沒有條件的情況下工作。但是當我嘗試添加它們時,它會返回一個值錯誤。 這裏是我的功能:VBA連接選中的單元格填充條件
Function Concat(rng As Range) As String
Dim rngCell As Range
Dim strResult As String
Dim bcolor As Long
Dim fcolor As Long
bcolor = rng.Cells(1, 1).Interior.ColorIndex
fcolor = rng.Cells(1, 1).Font.ColorIndex
For Each rngCell In rng
If rngCell.Value <> "" And rngCell.Interior.ColorIndex = bcolor And rngCell.Font.ColorIndex = fcolor Then
strResult = strResult & "," & rngCell.Value
End If
Next rngCell
If rngCell.Value <> "" And rngCell.Interior.ColorIndex = rng.Cells(1, 1).Interior.ColorIndex And rngCell.Font.ColorIndex = rng.Cells(1, 1).Font.ColorIndex Then
strResult = Mid(strResult, Len(",") + 1)
End If
Concat = strResult
End Function
我很新的VBA(我開始今天下午),所以我之所以加入bcolor和fcolor是進行調試。其實我覺得有一些基本的東西我不理解VBA,因爲即使下面的函數不返回任何值:
Function Concat(rng As Range) As Long 'Replace "Long" by "String" after debug is over
Dim rngCell As Range
Dim strResult As String
Dim bcolor As Long
Dim fcolor As Long
bcolor = rng.Cells(1, 1).Interior.ColorIndex
fcolor = rng.Cells(1, 1).Font.ColorIndex
For Each rngCell In rng
If rngCell.Value <> "" And rngCell.Interior.ColorIndex = bcolor And rngCell.Font.ColorIndex = fcolor Then
strResult = strResult & "," & rngCell.Value
End If
Next rngCell
If rngCell.Value <> "" And rngCell.Interior.ColorIndex = rng.Cells(1, 1).Interior.ColorIndex And rngCell.Font.ColorIndex = rng.Cells(1, 1).Font.ColorIndex Then
strResult = Mid(strResult, Len(",") + 1)
End If
Concat = bcolor
End Function
這真讓我心煩,這個函數不返回電池,同時顏色他如下:
Function color1(rng As Range) As Long
color1 = rng.Cells(1, 1).Font.ColorIndex
End Function
我知道有一些基本的東西,我不明白這裏的VBA編碼。但我不知道是什麼。如果你看到什麼是錯的,我會很感激糾正和解釋我的錯誤是什麼。 謝謝! Xavier
感謝您的回覆,我會立即嘗試您的代碼。這裏額外的原因是,否則,我返回的字符串以「,」開頭。試過這個功能後我會回來一點。 – XababaX
其實在嘗試之後,我的理解更少。編譯時,編譯器告訴我有一個錯誤,因爲Next沒有For(這顯然不是真的),因爲只有一個Next和一個For! 閱讀你的代碼,我認爲它在刪除第一個「,」時更優雅! – XababaX
其實這個錯誤的原因是什麼,一個End If在你添加If後就失蹤了。代碼有效! – XababaX