我有一个包含多个工作表的工作簿,每个工作表都包含一个库存清单。在该工作簿中,我有另一个"生成订单"包含表格的工作表,我已将其设置为合并其他工作表中的数据。我希望该表上有一个名为" Export Order,"它会将generateOrder
表的内容导出为.csv文件。
捕获的是,为了将订单上传到供应商的系统,.csv文件必须只包含项目编号和数量,设置为"编号,数量"每个项目都在自己的行上。
目前我已经设置了这个宏:
Sub export_button()
Dim tbl As ListObject
Dim csvFilePath As String
Dim fNum As Integer
Dim tblArr
Dim rowArr
Dim csvVal
Set tbl = Worksheets("Generate Order").ListObjects("generateOrder")
csvFilePath = "C:\Users\username\Desktop\order.csv"
tblArr = tbl.DataBodyRange.Value
fNum = FreeFile()
Open csvFilePath For Output As #fNum
For i = 1 To UBound(tblArr)
rowArr = Application.Index(tblArr, i, 0)
csvVal = VBA.Join(rowArr, ",")
Print #1, csvVal
Next
Close #fNum
Set tblArr = Nothing
Set rowArr = Nothing
Set csvVal = Nothing
End Sub
通过大量谷歌搜索,我设法让它工作,以便它导出generateOrder
的内容并将其保存为.csv,但我试图找出以下修改:
PUBLISHER ITEM #
,REORDER QTY
的两列(按此顺序)。如果重要,那么第一列标题中的PUBLISHER和ITEM之间会有换行符。value in cell C3
- 订单 - current date
。csv value in cell C3
的订单中创建一个子文件夹,然后将文件保存在那里(而不是像当前那样保存到桌面)。我需要弄清楚所有这一切,但如果你至少可以帮我弄清楚如何只获得两列,我可以尝试找出如何以我想要的方式保存它。非常感谢!
答案 0 :(得分:1)
从listobject的标题行中收集两个所需列的列索引号,并使用它们来解析databodyrange值数组。
?dplyr::if_else
请注意,我在发布商之后没有空格dim c1 as long, c2 as long
Set tbl = Worksheets("Generate Order").ListObjects("generateOrder")
csvFilePath = "C:\Users\username\Desktop\order.csv"
tblArr = tbl.DataBodyRange.Value
'you should really know where the two columns are but this should fetch their
'position from the header row. Hard-code the positions if you run into trouble.
c1 = application.match("publisher" & vblf & "item #", tbl.HeaderRowRange, 0)
c2 = application.match("reorder qty", tbl.HeaderRowRange, 0)
fNum = FreeFile()
Open csvFilePath For Output As #fNum
For i = LBound(tblArr, 1) To UBound(tblArr, 1)
csvVal = Join(array(tblArr(i, c1), tblArr(i, c2)), ",")
Print #1, csvVal
Next
。 excel单元格中的多行值仅使用换行符;没有回车和换行。