救命,救命,有在VBA代码中处理CSV文件的大侠进来帮帮我,急死了!

[复制链接]
查看11 | 回复5 | 2011-5-24 16:07:27 | 显示全部楼层 |阅读模式
我想用VBA写一个宏,在一个新的工作簿中(即下面代码中的wb2)做一个按钮,点击此按钮可以处理一个CSV文件(即下面代码中的wb1),主要是根据改CSV的A列(日期列)来进行某些行的选择性删除,然后再保存,关闭。看起来不是很难,但是我出问题,因为这个CSV文件的A列是一个日期列,操作之前的日期格式是2011/5/1.......2011/5/31。 但是我用宏对它进行行删除操作并保存关闭之后,再打开这个CSV文件,发现A列的日期格式变了,变成5/1/2011.....5/31/2011了。怎么回事啊?有类似经历的朋友没?帮帮忙?
我的VBA代码如下:
privatesub A()
dim wb1 as workbook '(csv文件对应的workbook)
dim wb2 as workbook
dim s1 as string '(csv文件A列的日期)
dim s2 as string '(wb1上面输入的日期)
set wb2 = thisworkbook
set wb1 = workbooks.open(filename:="F:\123.csv")
max = wb1.sheet(1).Range("A65536").end(xlup).row
For i = max to 1 step-1
'这里分别给s1和s2赋值
if s2s1 then
wb1.sheets(1).Rows(i).select
selection.delete
end if
next
wb1.save
wb1.close
end

回复

使用道具 举报

千问 | 2011-5-24 16:07:27 | 显示全部楼层
把你的指定单元格的内容 放到一个新的Sheet中 并把这个Sheet设置为当前活动的Sheet 然后使用下面的代码 Sub SaveAsCSV() ActiveSheet.SaveAs "c:\aaaaa.csv", xlCSV End Sub比如你原来有3个Sheet 那你可以再创建一个新的Sheet 然后通过VBA把这个Sheet切换到当前活动的状态 然后把原来的某个Sheet中的你想要的那一行内容 复制到新的这个Sheet中 然后用上面的命令 保存掉然后再把这个新添加的Sheet删除掉 在把焦点切换回原来你停留的Sheet 就可以了 天衣无缝.
回复

使用道具 举报

千问 | 2011-5-24 16:07:27 | 显示全部楼层
把那个CSV文件的A列的格式改成你要的就是了,可以手工来,也可以写在代码里,具体的代码可以建个新文件,然后录制个宏,看看宏里面的代码。
回复

使用道具 举报

千问 | 2011-5-24 16:07:27 | 显示全部楼层
在你的代码中加一句:Local:=True这个是excel的一个bug,已经被修复,也可以下载相关补丁,window文章地址:http://support.microsoft.com/kb/829348
回复

使用道具 举报

千问 | 2011-5-24 16:07:27 | 显示全部楼层
wb1.SaveAs "F:\123.xls"wb1.Close另存为xls文件看看
回复

使用道具 举报

千问 | 2011-5-24 16:07:27 | 显示全部楼层
你用F8逐步运行VBA程序看看,你会发现,其实用set wb1 = workbooks.open(filename:="F:\123.csv")这样打开csv后,原来2011/5/1.......2011/5/31已经变成5/1/2011.....5/31/2011了,我也遇到这个问题,也还没解决,请问你解决了吗?求教!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行