2017-05-04 3 views
1

Durch ein Excel-VBA-Makro, ich versuche, bis zu 10 Leerzeichen getrennte Argumente für einen ausgewählten Bereich in Excel zu drucken.Excel VBA extra Newline wird durch print statement eingefügt

Zum Beispiel habe ich die 24 Werte in meinem Auswahlbereich A1: A24 - (zB Val1, Val2, Val3, Val4, etc.) Mit dem folgenden VBA-Code möchte ich die Ausgabe im "outfile" bekommen .bat "als

"C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe" Val1 Val2 .... Val10

" C: \ Program Files (x86) \ Google \ Chrome \ Anwendung \ chrome.exe "Val11 Val2 .... Val20

" C: \ Programme (x86) \ Google \ Chrome \ Anwendung \ chrome.exe "Val21 Val22 Val23 Val24

, d.h. jede Zeile sollte mit maximal 10 Argumentwerten gedruckt werden (getrennt durch ein Leerzeichen). Alles, was über das sollte zum nächsten Zeile (wieder max von 10 Leerzeichen getrennt Argumenten)

irgendwie bewegt werden, der folgende Code ist (1) nicht die Ausgabe auf die gleiche Linie zu halten und (2) fügt eine neue Zeile in der 10. Wert, aber nicht am 20., 30. und anderen Werten.

Es produziert die folgenden:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 
Val1 
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 
Val2 
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 
Val3 

und so weiter ....

Hier ist mein Code:

Private Sub GetChromeFile_Click() 
Dim myFile As String, rng As Range, cellValue As Variant, i As Integer, j As Integer, a As Integer 
myFile = "C:\Users\User1\" & "outfile.bat" 
Set rng = Selection 

Open myFile For Output As #7 
a = 0 
For i = 1 To rng.Rows.Count 
    Print #7, Chr(34) & "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" & Chr(34) 

     a = a + 1 
     cellValue = rng.Cells(i).Value 
     If (a = 10) Then 
      Print #7, " " & cellValue & vbNewLine 
     Else 
      Print #7, " " & cellValue 
     End If 
Next i 


Close #7 

Range("F5").Value = " Done!" 
End Sub 

Bitte lassen Sie mich wissen, wo dies schief gehen kann. Dank

+1

Schnelltest, Probieren Sie einfach 'Print # 7," "" C: \ ProgramFiles \ ... \ chrome.exe "" "'? (Mit anderen Worten, verwenden Sie doppelte Anführungszeichen, um ein Zitat anstelle der 'CHR()' zu drucken) – BruceWayne

+0

Danke für die Eingabe @BruceWayne. Dies ist in DavidZemens 'Antwort enthalten. Schätze deine Hilfe! – user6337701

Antwort

1

Die print-Anweisung druckt eine Linie auf die Datei, so dass das Hinzufügen vbNewLine am Ende jeder redundant ist. Sie führen auch für jeden Argumentwert (cellValue in Ihrem Code) Aufrufe an Print, weshalb diese in ihrer eigenen Zeile angezeigt werden.

Sie können den gesamten Dateiinhalt höchstwahrscheinlich als eine einzelne Zeichenfolge erstellen und dann eine einzelne -Anweisung verwenden, um die gesamte Datei zu schreiben. Wenn Sie mit einer enormen Menge an Daten zu tun haben, können Sie es zu segmentieren brauchen aber für die meisten Fälle dieser Arbeit sollten:

Option Explicit 
Sub writebat() 
Const pathTxt$ = """C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" " 
Dim lineTxt As String 
Dim cellValue As String 
Dim fname As String 
Dim ff As Long 
Dim a As Long 
Dim i As Long 
Dim rng As Range 

Set rng = Selection ' Range("A1:A37") 

fname = "C:\Users\User1\" & "outfile.bat" ' "C:\debug\output.txt" 

ff = FreeFile() 

Open fname For Output As #ff 
    lineTxt = pathTxt 
    a = 1 
    For i = 1 To rng.Rows.Count 
     '## Add the cell value to the string 
     lineTxt = lineTxt & rng.Cells(i).Value & " " 
     If a Mod 10 = 0 Then 
      '## Start a new line with the executable path 
      lineTxt = lineTxt & vbNewLine & pathTxt 
     End If 
     a = a + 1 
    Next 
    Print #ff, lineTxt 
Close #ff 
End Sub 

Dies ergibt die folgende Ausgabe:

enter image description here

+0

Vielen Dank @DavidZemens. Klappt wunderbar! +1, und markierte dies als die Antwort! – user6337701