Quel est le meilleur moyen de convertir une plage de cellules en chaîne? J'ai une fonction qui ne prend qu'une chaîne en entrée, donc je dois convertir la plage en chaîne, tout en conservant autant de formatage que possible ( c’est-à-dire qu’il doit ressembler à une table ou à une liste, et pas seulement à une chaîne de caractères) .J'ai essayé de travailler avec CStr (), ainsi que de convertir une plage en tableau juste avoir des erreurs.
Edit: tentative de code
Dim email_answer As Integer
email_answer = MsgBox("Do you want to be emailled a copy of this schedule?", vbYesNo)
If email_answer = vbYes Then
Dim wb As Workbook
Dim to_send As Range
to_send = Range("D3", "D10")
If Val(Application.Version) < 14 Then Exit Sub
Set wb = ActiveWorkbook
With wb
MailFromMacWithMail body content:=CStr(to_send), _
mailsubject:="Schedule", _
toaddress:="email address", _
ccaddress:="", _
bccaddress:="", _
attachment:=.FullName, _
displaymail:=False
End With
Set wb = Nothing
End If
Pour créer une liste de valeurs de cellules séparées par des virgules dans une plage:
Function RangeToString(ByVal myRange as Range) as String
RangeToString = ""
If Not myRange Is Nothing Then
Dim myCell as Range
For Each myCell in myRange
RangeToString = RangeToString & "," & myCell.Value
Next myCell
'Remove extra comma
RangeToString = Right(RangeToString, Len(RangeToString) - 1)
End If
End Function
Vous pouvez ajouter des fonctionnalités supplémentaires telles que l’insertion d’un point-virgule au lieu d’une virgule si le nombre de lignes augmente.
Pour utiliser cette fonction:
Sub AnySubNameHere()
Dim rng As Range
Set rng = ActiveSheet.Range("A3:A10")
Dim myString as String
myString = RangeToString(rng)
End Sub
vous pouvez utiliser cette fonction:
Function Rang2String(rng As Range) As String
Dim strng As String
Dim myRow As Range
With rng
For Each myRow In .Rows
strng = strng & Join(Application.Transpose(Application.Transpose(myRow.value)), "|") & vbLf
Next
End With
Rang2String = Left(strng, Len(strng) - 1)
End Function
qui renverrait une chaîne avec un caractère de saut de ligne comme séparateur de lignes de rangée et des tuyaux ("|") comme séparateur de colonnes
Je sais que cette question a déjà presque presque un an, mais j'ai trouvé une solution rapide qui fonctionne pour moi: Vous devez créer une référence à la bibliothèque d'objets Microsoft Forms 2.0 pour utiliser le DataObject.
Public Function GetStringFromRange(RNG As Range) As String
Dim DOB As New MSForms.DataObject
RNG.Copy
DOB.GetFromClipboard
GetStringFromRange = DOB.GetText
End Function
Vous pouvez utiliser la solution suivante pour convertir une plage en chaîne dans VBA:
Sub convert()
Dim rng As Range, cell As Range
Dim filter As String
filter = ""
Set rng = Selection
For Each cell In rng
If Not cell Is Nothing Then
filter = """" & cell & """" & "," & filter
End If
Next cell
End Sub
Chacune de ces fonctions le fera pour vous.
Function ConCatRange2(CellBlock As Range) As String
'for non-contiguous cells =ccr((a1:a10,c4,c6,e1:e5))
Dim Cell As Range
Dim sbuf As String
For Each Cell In CellBlock
If Len(Cell.Text) > 0 Then sbuf = sbuf & Cell.Text & ","
Next
ConCatRange2 = Left(sbuf, Len(sbuf) - 1)
End Function
OR
Function mergem(r As Range) As String
mergem = r.Cells(1, 1).Value
k = 1
For Each rr In r
If k <> 1 Then
mergem = mergem & "," & rr.Value
End If
k = 2
Next
End Function
OR
Function spliceUm(r As Range) As String
spliceUm = ""
For Each rr In r
spliceUm = spliceUm & rr.Value & ";"
Next
End Function