2017-11-16 7 views
1

Ich habe dies:Row String mit Abstand zwischen den Elementen

| col1 | col2 | col 3 | 
| 5 | FA | OFF | 
| 107 | FA | ON | 
| 96 | FO | ON | 

und ich möchte jede Zeile MsgBox wie die

Dim str As String 
Dim r As Long 

r = 2 
While Celles(r,1).Value <> "" 
    str = Rows(r)     ' don't know how get row with space between items 
    MsgBox str 
    Set WshShell = CreateObject("WScript.Shell") 
    Set WshShellExec = WshShell.Exec("""C:\mypath\prog.exe"" " & str) 

    r = r+1 
Wend 

I 3 MsgBox wollen 5 FA OFF107 FA ON96 FO ON erscheinen.

Deshalb, wie eine Zeile korrekt und fügen Sie Abstand zwischen den Elementen zu bekommen?

+0

Was gehen, ist die gewünschte Ausgabe? Ich konnte keine Antwort finden. –

+0

Wie bekomme ich eine ganze Zeile in eine Zeichenfolge? :) – Rodrigue

+0

Betrachten Sie "Join" und "transpose" Excel-Bereiche. Rückgabewerte sind Arrays in VBA. 'join (Application.Transpose (Application.Transpose (Bereich (" a1: c1 "). Wert))," | ")' –

Antwort

5
Sub x() 

For i = 1 To 3 
a = Application.Transpose(Application.Transpose(Range("a1:c1").Offset(i, 0).Value)) 
Debug.Print Join(a, "|") 
Next i 

End Sub 
1

Versuchen Sie den Code unten zu kombinieren, um die String s pro Zeile (Nachdem ich WshShellExec mit Parametern aufgerufen werden soll):

Option Explicit 

Sub CombStringinRow() 

Dim str As String 
Dim r As Long, Col As Long 
Dim LastCol As Long 
Dim LastRow As Long 

LastRow = Cells(Rows.Count, "A").End(xlUp).Row ' get last row with data from column "A" 

For r = 2 To LastRow 
    LastCol = Cells(r, Columns.Count).End(xlToLeft).Column ' get last column in current row 

    For Col = 1 To LastCol 
     If str <> "" Then 
      str = str & " " & Cells(r, Col) 
     Else 
      str = Cells(r, Col) 
     End If 
    Next Col 

    MsgBox str 
    str = "" 
Next r 

End Sub 
1

nur bauen str von Werten in allen Spalten

Dim i as Long 'HERE EDITED 
For i = 0 To 2 
str = str & " " & Cells(r, 1).Offset(,i) 'HERE EDITED 
Next i 
MsgBox str 
str = "" 
+0

Dies wird nicht funktionieren. Sie verweisen nicht auf "i" in Ihrem Code – Tom

+0

es wird, wenn Option Explicit nicht vorhanden ist. – MarcinSzaleniec

+0

Sie haben gerade – Tom

1

Bitte geben diesem einen Versuch ...

Sub ConcatenateRowValues() 
Dim x 
Dim i As Long 
Dim Str As String 
x = Range("A1").CurrentRegion.Value 
For i = 2 To UBound(x, 1) 
    Str = Join(Application.Index(x, i, 0), " ") 
    MsgBox Str 
Next i 
End Sub 
1

Geben Sie eine dieser

Sub example() 
    Dim str As String 
    Dim r As Long 
    Dim c 

    ' I'd recommend changing this to your actual sheet 
    With ActiveSheet 
     For r = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row 
      str = vbNullString 
      For Each c In Range(.Cells(r, 1), .Cells(r, .Cells(r, .Columns.Count).End(xlToLeft).Column)) 
       str = str & " " & c.Value2 
      Next c 
      MsgBox WorksheetFunction.Trim(str) 
     Next r 
    End With 
End Sub 
+0

@Shairado Ich entferne es mit dem 'Trim' am Ende. Ich benutze 'WorkSheetFunction.Trim' im Gegensatz zu' Trim', da dadurch zusätzliche Leerzeichen zwischen Wörtern entfernt werden und das Szenario einer leeren Zelle in der Mitte vermieden wird, um 3 Leerzeichen zu erzeugen, wenn es nur eines geben sollte – Tom

Verwandte Themen