我正在开发用户可以填写的工作表,以生成可以上传到SAP的文件。
工作表将生成单个条目的批量上传。将要求用户为他们请求的每个行项目提供属性,这可以根据所做的选择而变化(即,一行可以具有5个属性,而下一行可以具有7个属性)。
我想编写一个宏,它将从顶部开始查看每一行,并且只连接非空白的属性列(由每个实例中的两个其他列分隔)并在每个字段之间使用分隔符。
我已经能够使用我通过Microsoft找到的一些代码来完成循环(见下文),但我无法弄清楚如何在列空白时停止连接移到下一行。
Sub Submit()
Range("C2").Activate
Do While ActiveCell <> ""
ActiveCell.Offset(0, 21).FormulaR1C1 = _
ActiveCell.Offset(0, 0) & "-" & ActiveCell.Offset(0, 3) & "-" &
ActiveCell.Offset(0, 6) & "-" & ActiveCell.Offset(0, 9) & "-" & ActiveCell.Offset(0, 12) & "-" & ActiveCell.Offset(0, 15) & "-" & ActiveCell.Offset(0, 18)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
现在,这段代码将采用五个属性输入并留下&#34; 1-2-3-4-5 - &#34;,当我真的希望它显示为&#34 ; 1-2-3-4-5&#34;
关于如何做到这一点的任何想法?最终,我希望能够存储这些字符串并将它们填充到新工作簿中,并从原始工作簿中复制其他一些信息。
答案 0 :(得分:1)
未测试:
Sub Submit()
Dim c As Range, c2 As Range, v as String
Set c = Range("C2")
Do While c.Value <> ""
Set c2 = c
v = ""
Do While c2.value <> ""
v = v & IIf(v <> "", "-", "") & c2.value
Set c2 = c2.offset(0, 3)
Loop
c.offset(0, 21).Value = v
Set c = c.Offset(1, 0)
Loop
End Sub
答案 1 :(得分:0)
这是一个快速的答案,所以可能没有您之后的所有内容:
Public Function Submit(Target As Range) As String
Dim sFinalOutput As String
Dim rCell As Range
'Cylce through each cell in your range.
For Each rCell In Target
'Look at the column number divided by 3 - if it's 0 then carry on.
If rCell.Column Mod 3 = 0 Then
If rCell.Value2 <> "" Then
'Grab the value from the cell and add it to the final output.
sFinalOutput = sFinalOutput & "-" & rCell.Value2
End If
End If
Next rCell
Submit = sFinalOutput
End Function
在公式中使用它,例如:=submit(C4:L4)