我有一个excel工作表,它将许多信息(如果适用)串在一起,然后有一个选项卡,然后使用聚合功能将所有这些信息放在一个列表中。
然后我得到下面的代码,该代码最初是在这里的人们的帮助下构建的,以完成工作并为每个暗行中的文件创建csv文件。
在创建工作表时,我认为这可以解决问题,但是在构建更多工作表之后,数据长度可能会有所不同,每个csv文件所需的行数也会有所不同,例如,我可以使用一个制表符有6列数据需要制作成一个csv文件,或者有100列数据需要制作成8个csv文件。
我原本以为我会将数据间隔到最坏的情况,比如说30行,并让宏像这样创建csv文件,但是如果有空白行,我需要将csv文件上传到的程序将无法工作在csv的结尾。
所以...我要么需要一种方法来删除每个csv末尾的空白行,当使用时,该范围比包含数据的行数大得多(因为将需要的单元格数拥有聚合公式,即使我将聚合包装在“如果结果=什么都不是,那么””中,csv仍会看到一行中带有“”的单元格)
或
我需要一种更改代码的方法,以便它逐步根据一系列变量创建单独的csv文件,即创建具有6行的csv文件(我可以按照下面的最新代码从单元格中获取此数字)但是无法弄清楚如何逐步通过,并在每次通过时将此参考号更改为另一个单元格?
我敢肯定,“可变长度”选项会更容易,但是我缺乏解决此问题的技能。
谢谢!
'resets used range to try and stop creating blank csv files
a = ActiveSheet.UsedRange.Rows.Count
Dim wb As Workbook
Dim ThisSheet As Worksheet
Dim NumOfColumns As Integer
Dim RangeToCopy As Range
Dim WorkbookCounter As Integer
Dim RowsInFile
Application.ScreenUpdating = True
'Initialize data
Set ThisSheet = ThisWorkbook.ActiveSheet
NumOfColumns = 1
WorkbookCounter = 1
RowsInFile = Sheets("Upload").Cells(1, 4).Value '10 'how many rows (incl. header) in new files?
For p = 1 To ThisSheet.UsedRange.Rows.Count Step RowsInFile
'Paste the chunk of rows for this file
Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + RowsInFile - 1, NumOfColumns))
xName = ThisWorkbook.Path & "\Files for upload testing\" & "Purchase" & Format(Now(), "yyyymmddhhmmss") & ".csv"
Application.Wait (Now + TimeValue("0:00:02"))
Open xName For Output As #1
For Each xRow In RangeToCopy.Rows
xStr = ""
For Each xCell In xRow.Cells
xStr = xStr & xCell.Value & Chr(9)
Next
While Right(xStr, 1) = Chr(9)
xStr = Left(xStr, Len(xStr) - 1)
Wend
Print #1, xStr
Next
Close #1
'Increment file counter
WorkbookCounter = WorkbookCounter + 1
Next p
Application.ScreenUpdating = True
Set wb = Nothing
End Sub
答案 0 :(得分:0)
我无法确定您要复制多少列,或者这是否有所变化。
但是不要尝试删除空白行,只是不要写空行。
这不是最好的方法,但是可以与您的代码一起使用。
For Each xRow In RangeToCopy.Rows
Dim writeThisLine As Boolean
writeThisLine = False
xStr = ""
For Each xcell In xRow.Cells
If xcell.Text <> "" Then writeThisLine = True
xStr = xStr & xcell.Value & Chr(9)
Next
While Right(xStr, 1) = Chr(9)
xStr = Left(xStr, Len(xStr) - 1)
Wend
If writeThisLine Then Print #1, xStr
Next