我有一个Excel电子表格,其中包含37列,13,580列。我的目标是采取相同的信息并将其导出到记事本中。来自我所做的研究。这是不可能的,因为字符限制是240,而我的电子表格最多是256。
是什么让它变得比它需要的更难,是因为我不能抓住" A1:AK1"并粘贴它。我有要求,我想要每列,并拥有字符串。如:
Trim()
函数,以防某些值涉及多余的空格img:h_ttp://i.stack.imgur.com/pCvDW.png (这里没有空间,有些值落在右侧,其他值从左侧开始)
我尝试了什么
'from rows 1 to end
'for every column in row#
'right align=space(30 - characterlength(column[row#])) & column[row#] &
'left align=column[row#] & space(30 - characterlength(column[row#])) &
txt = txt & UCase(_
rnSelect.Range("B" & lgl).Value & _
rngSelect.Range("C" & lgl) & Space(14 - Len(rngSelect.Range("C" & lgl))) & _
rngSelect.Range("D" & lgl) & Space(8 - Len(rngSelect.Range("D" & lgl))) & _
Left(Trim(rngSelect.Range("E" & lgl)), 12) & Space(12 - Len(rngSelect.Range("E" & lgl))) & _
Left(Trim(rngSelect.Range("F" & lgl)), 30) & Space(30 - Len(rngSelect.Range("F" & lgl))) & _
Space(8 - rngSelect.Range("G" & lgl).Count) & rngSelect.Range("G" & lgl) & Space(8 - rngSelect.Range("H" & lgl).Count) & rngSelect.Range("H" & lgl) &
Space(8 - rngSelect.Range("I" & lgl).Count) & rngSelect.Range("I" & lgl) & Space(8 - rngSelect.Range("J" & lgl).Count) & rngSelect.Range("J" & lgl) & _
Space(8 - rngSelect.Range("K" & lgl).Count) & rngSelect.Range("K" & lgl) & Space(8 - rngSelect.Range("L" & lgl).Count) & rngSelect.Range("L" & lgl) & _
Space(8 - rngSelect.Range("M" & lgl).Count) & rngSelect.Range("M" & lgl) & Space(8 - rngSelect.Range("N" & lgl).Count) & rngSelect.Range("N" & lgl) & _
Space(8 - rngSelect.Range("O" & lgl).Count) & rngSelect.Range("O" & lgl) & Space(8 - rngSelect.Range("P" & lgl).Count) & rngSelect.Range("P" & lgl) & _
Space(8 - rngSelect.Range("Q" & lgl).Count) & rngSelect.Range("Q" & lgl) & Space(4 - rngSelect.Range("R" & lgl).Count) & rngSelect.Range("R" & lgl) & _
Space(6 - rngSelect.Range("S" & lgl).Count) & rngSelect.Range("S" & lgl) & Space(6 - rngSelect.Range("T" & lgl).Count) & rngSelect.Range("T" & lgl) & _
Space(6 - rngSelect.Range("U" & lgl).Count) & rngSelect.Range("U" & lgl) & Space(6 - rngSelect.Range("V" & lgl).Count) & rngSelect.Range("V" & lgl) & _
Space(1 - rngSelect.Range("W" & lgl).Count) & rngSelect.Range("W" & lgl) & Space(6 - rngSelect.Range("X" & lgl).Count) & rngSelect.Range("X" & lgl) & _
Space(6 - rngSelect.Range("Y" & lgl).Count) & rngSelect.Range("Y" & lgl) & Space(6 - rngSelect.Range("Z" & lgl).Count) & rngSelect.Range("Z" & lgl) & _
Space(2 - rngSelect.Range("AA" & lgl).Count) & rngSelect.Range("AA" & lgl) Space(6 - rngSelect.Range("AB" & lgl).Count) & rngSelect.Range("AB" & lgl) & _
Space(2 - rngSelect.Range("AC" & lgl).Count) & rngSelect.Range("AC" & lgl) Space(2 - rngSelect.Range("AD" & lgl).Count) & rngSelect.Range("AD" & lgl) & _
Space(1 - rngSelect.Range("AE" & lgl).Count) & rngSelect.Range("AE" & lgl) Space(1 - rngSelect.Range("AF" & lgl).Count) & rngSelect.Range("AF" & lgl) & _
Space(1 - rngSelect.Range("AG" & lgl).Count) & rngSelect.Range("AG" & lgl) Space(1 - rngSelect.Range("AH" & lgl).Count) & rngSelect.Range("AH" & lgl) & _
Space(2 - rngSelect.Range("AI" & lgl).Count) & rngSelect.Range("AI" & lgl) Space(5 - rngSelect.Range("AJ" & lgl).Count) & rngSelect.Range("AJ" & lgl) & _
Space(5 - rngSelect.Range("AK" & lgl).Count) & rngSelect.Range("AK" & lgl) Space(3) & vbCrLf )
'add 3 spaces and a LineFeed
'next row
最后,我得到的只是一个错误,因为一切都在一行,而且我不太确定如何分解它。
P.S。除了我粘贴的代码之外,代码的每个其他部分都是通用的,我在无数来源的研究中发现了它们。它只是简单地说明了导出功能/脚本。
是否可以连接这么大的宏?如果没有,是否有可以使用的循环? 我想要的只是将其复制并粘贴到记事本中,但相应地间隔开(不能依赖于列宽,因为我不太确定在某些参数中可以容纳多少个字符)。
请,谢谢你。
修改 好的,我要感谢@codejockey,感谢他迄今给予我的帮助。我得到了结果,而不是我喜欢的结果。该脚本正在运行,它的移动速度非常快(令人惊讶)。
以下是我使用的代码:
Public Function ProcessCell(inputString As String, colNum As Integer) As String
Dim tempString As String
Select Case colNum
Case 1 'Column "A"
tempString = UCase("TEST")
Case 2, 3 'Column "B" & "C"
tempString = tempString & Space(14 - Len(inputString))
Case 4 'Column "D"
tempString = tempString & Space(8 - Len(inputString))
Case 5 'Column "E"
tempString = tempString & UCase(Trim(Left(inputString, 12))) & Space(12 - Len(Trim(inputString)))
Case 6 'Column "F"
tempString = tempString & UCase(Trim(Left(inputString, 30))) & Space(30 - Len(Trim(inputString)))
'
' Keep Going...
'
Case 7, 8, 9, 10, 11, 12, 13, 14, 15 'Example for multiple cases handled the same way
tempString = tempString & Space(8 - Len(inputString)) & inputString
Case 16, 17 'Example for multiple cases handled the same way
tempString = tempString & Space(6 - Len(inputString)) & inputString
Case 18 'Example for multiple cases handled the same way
tempString = tempString & Space(4 - Len(inputString)) & inputString
Case 19, 20, 21, 22 'Example for multiple cases handled the same way
tempString = tempString & Space(6 - Len(inputString)) & inputString
Case 23 'Example for multiple cases handled the same way
tempString = tempString & Space(1 - Len(inputString)) & inputString
Case 24, 25, 26 'Example for multiple cases handled the same way
tempString = tempString & Space(6 - Len(inputString)) & inputString
Case 27 'Example for multiple cases handled the same way
tempString = tempString & Space(2 - Len(inputString)) & inputString
Case 28 'Example for multiple cases handled the same way
tempString = tempString & Space(6 - Len(inputString)) & inputString
Case 29, 30 'Example for multiple cases handled the same way
tempString = tempString & Space(2 - Len(inputString)) & inputString
Case 31, 32, 33, 34 'Example for multiple cases handled the same way
tempString = tempString & Space(1 - Len(inputString)) & inputString
Case 35 'Example for multiple cases handled the same way
tempString = tempString & Space(2 - Len(inputString)) & inputString
Case 36, 37 'Example for multiple cases handled the same way
tempString = tempString & inputString & Space(5 - Len(inputString))
'
End Select
tempString = tempString & Space(3) & vbCrLf
ProcessCell = tempString
End Function
但我得到的结果是http://i.stack.imgur.com/AaGeI.png,其中的结果会下降,而不是更多......就像第一个链接http://i.stack.imgur.com/pCvDW.png
我使用的功能不包含在该功能中的脚本如下所示:
Dim rngSelect As Variant
Set rngSelect = Range("A2:AI3")
Dim lgl As Long
Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row
For lgl = 1 To lastRow
For i = 1 To 37
oneLine = oneLine & ProcessCell(rngSelect.Cells(lgl, i), i)
Next i
oFile.Write oneLine
oneLine = vbNullString
Next
Set rngSelect = Nothing
oFile.Close
我做错了什么,我不知道如何解决它,或者为什么它看起来像它...它似乎在代码中有额外的LineFeeds,但我只插入了一次换行..
答案 0 :(得分:1)
你必须打破这个" line"代码分解为更简单的步骤!
编写一个函数,它接受一个字符串并按照你想要的方式处理它。
Public Function ProcessCell(inputString as String, colNum as Integer) As String
Dim tempString as String
Select Case colNum
Case 2 'Column "B"
tempString = inputString
Case 3 'Column "C"
tempString = inputString & Space(14 - Len(inputString))
'
' Keep Going...
'
Case 6, 7, 8, 9 'Example for multiple cases handled the same way
'
'
End Select
ProcessCell = tempString
End Function
现在,您可以遍历所有列:
For i = 1 To 37
oneLine = oneLine & ProcessCell(rngSelect.Cells(lgl, i), i)
Next i
希望这有用!