| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8623 人关注过本帖
标题:VB自动保存EXCEL
只看楼主 加入收藏
ranxian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-6-11
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:13 
VB自动保存EXCEL
各位好,我现在想用VB打开一个现有的EXCEL,并往里面写数据,写一行保存一行,XECEL要不可见,应该怎么写,现在我写这个是直接新建一个EXCEL(可见),然后MSCOMM触发一次就写一行数据,可是不能保存。
Option Explicit
Dim xlapp As Variant
Dim xlBook As Variant
Dim xlsheet As Variant
Dim i As Variant
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
Set xlapp = CreateObject("excel.application")
xlapp.Visible = True
Set xlBook = xlapp.Workbooks.Add
Set xlsheet = xlBook.Worksheets(1)
MSComm1.Settings = "9600,n,8,1"
= 3
MSComm1.NullDiscard = False
MSComm1.RThreshold = 62
MSComm1.InputMode = 0
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
xlapp.Quit '关闭EXCEL
Set xlapp = Nothing '释放EXCEL对象
End Sub
Private Sub MSComm1_OnComm()
Text1 = ""
If i = 0 Then
i = 2
Else
i = i + 1
End If
Text1.Text = MSComm1.Input
Text2.Text = Mid(Text1, 6, 10) '日期
Text3.Text = Mid(Text1, 17, 8) '时间
Text4.Text = Mid(Text1, 32, 6) '压力
Text5.Text = Mid(Text1, 39, 3) '压力单位
Text6.Text = Mid(Text1, 44, 2) '测试结果
Text7.Text = Mid(Text1, 48, 5) '泄漏量
Text8.Text = Mid(Text1, 54, 8) '泄漏单位
xlsheet.Cells(i, 2) = Text2.Text
xlsheet.Cells(i, 3) = Text3.Text
xlsheet.Cells(i, 4) = Text4.Text
xlsheet.Cells(i, 5) = Text5.Text
xlsheet.Cells(i, 6) = Text6.Text
xlsheet.Cells(i, 7) = Text7.Text
xlsheet.Cells(i, 8) = Text8.Text
xlsheet.Cells(1, 1) = "序号"
xlsheet.Cells(1, 2) = "日期"
xlsheet.Cells(1, 3) = "时间"
xlsheet.Cells(1, 4) = "测试压力"
xlsheet.Cells(1, 5) = "单位"
xlsheet.Cells(1, 6) = "测试结果"
xlsheet.Cells(1, 7) = "泄露量"
xlsheet.Cells(1, 8) = "单位"
xlsheet.Cells(i, 1) = 0 + i
End Sub
搜索更多相关主题的帖子: EXCEL 新建 
2011-06-15 13:53
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
程序代码:
    前略.......
    xlsheet.Cells(i, 1) = 0 + i
    xlApp.ActiveWorkbook.SaveAs (File_name)    '保存EXCEL的文件到 file_name=(完整路径) 中
End Sub


但是会有档案复写问题~
http://www.
档案名称重覆,可以用下列两种解法.
一种是把Excel的警告讯息关掉.
另一种是先判断档案是否存在,若存在就先删除再存档.

大概是这样~如果要选择删档案~我是先用FSO去处理这段~或用 Shell(Command)去处理这段~

不要選我當版主
2011-06-15 14:48
ranxian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-6-11
收藏
得分:0 
谢谢wube,我把我的全部思路说一下吧,我先在D盘建一个EXCEL,然后让VB去打开这个EXECL,但是EXCEL只能在后台运行,不能显示,MSCOMM触发一次就往里面写一行数据,并保存一次。
唉,其实这也有个问题,VB下次再往里面写的时候怎么知道写到那一行了,还有EXCEL写满了怎么办。
2011-06-15 15:37
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
回复 3楼 ranxian
我也坦白说我回你文章的困难点在于~"MSCOMM触发一次就往里面写一行数据"这句话在我电脑没有~所以我先假设你这段代码没问题的状况下~来回答你的问题~

首先~你的EXCEL的档预计要写几行~每行多少资料~2003一个分页好像可以写65535行~256栏~分页最多可以开几个我就不清楚了~我还没用超过50个以上~2010的~好像都没限制~只能先建议~看你的代码只是写资料进去~并没对储存格做特殊动作~不如写成CSV档就行了~写法简单很多~而且他也可以用EXCEL的开~

CSV格式记得好像没分页功能~所以写到65535行左右~就要再新开个CSV档~从你的说明看起来~好像你的程序是要启动之后就不管~让它自动跑的那种~那就写成自动一天存一个档~或一个月~或一星期~档名就直接用日期做区分~我是不清楚你资料量大小和写入频率~你要自己估算~弄清楚之后才好继续~

不要選我當版主
2011-06-15 17:08
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
补充~CSV档要是写入超过65536行~EXCEL2003开不起来~也还能用UltraEdit开~
CSV也不用去算现在写到第几行了~直接Append上去就行了~严格说行数应该是无上限的~

不要選我當版主
2011-06-15 17:15
ranxian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-6-11
收藏
得分:0 
MSCOMM触发一次就往里面写一行数据,这里已经没有问题了,可以一行一行的写进数据,格式是有要求的,text1收到的是一串数据,我把收到的数据分别存在TEXT2-TEXT8里面,然后再分别写到EXCEL的A2-G8里面,然后写入一次就换一次行。每天的数据量大概是2500行左右,EXCEL按65000行来算的哈,20几天就写满了,列数倒是只有10列, 如果可以,可以用EXCEL2007,大不了我过段时间就备份一次,然后清空EXCEL,
EXCEL里的格式大概是这样的
序号  日期   时间    压力    单位     结果    泄漏量    单位  
1    2011.    09      09      KP       OK       0.1      CM
2011-06-15 17:45
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
回复 6楼 ranxian
你有点误会我的意思~换个说法~我是说照你要的格式~不一定要用EXCEL中的方法来写~用文字档的写法来写~但是扩展名存成CSV格式~

因为照你的需求~用的CSV档来实现比较简单方便~因为你的代码中~没有使用到对储存格涂颜色或加框线....等的巨集功能~只是单纯写资料进去~所以的CSV格式可以符合你的需求~顺便附上一个的CSV档~

111.rar (467 Bytes)


你可以用notepad去开看看~了解一下的CSV的格式资料组成~(它用文字档方式写入~用逗点隔开每个格子)~然后关掉后再用EXCEL的开起来看~看这格式是否符合你的需求~因为你只是单纯要数据排版~而没有要用到EXCEL中独特的功能~却大费周章的写成XLS档~感觉绕一大圈~我个人觉得好像自找麻烦~你先看看CSV档和你要的有差别吗?也许有我没注意到~非要用EXCEL的地方~

不要選我當版主
2011-06-15 19:01
ranxian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-6-11
收藏
得分:0 
是这样啊,那完全可以用这个方法来写嘛,只不过这个东西从来都没有用过,不知道怎么弄啊,我先去下载个过来看看。
2011-06-15 19:32
ranxian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-6-11
收藏
得分:0 
要是你手上有案例的哈,可以发个给我看看吗。
2011-06-15 19:34
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:20 
我猜大概是这样吧〜我没法帮你先试〜

程序代码:
Option Explicit

Const FilePath = "D:\123.csv"

Dim iCount As Long

Private Sub Command1_Click()
    End
End Sub

Private Sub Form_Initialize()
    iCount = 0
End Sub

Private Sub Form_Load()

 
    MSComm1.Settings = "9600,n,8,1"
     = 3
    MSComm1.NullDiscard = False
    MSComm1.RThreshold = 62
    MSComm1.InputMode = 0
    MSComm1.PortOpen = True

End Sub

Private Sub MSComm1_OnComm()
Dim i As Integer, FileNum As Integer
Dim TempString As String

 
    Text1(0) = ""
    Text1(0).Text = MSComm1.Input

    Text1(1).Text = Mid(Text1(0), 6, 10) '日期
    Text1(2).Text = Mid(Text1(0), 17, 8) '时间
    Text1(3).Text = Mid(Text1(0), 32, 6) '压力
    Text1(4).Text = Mid(Text1(0), 39, 3) '压力单位
    Text1(5).Text = Mid(Text1(0), 44, 2) '测试结果
    Text1(6).Text = Mid(Text1(0), 48, 5) '泄漏量
    Text1(7).Text = Mid(Text1(0), 54, 8) '泄漏单位
 
    TempString = ""

 
    For i = 1 To 7    'TextBox控件数组
     
        If i = 1 Then
            TempString = Trim(Text1(i).Text)
        Else
            TempString = TempString & "," & Trim(Text1(i).Text)
        End If
     
        MSFlexGrid1.TextMatrix(iCount + 1, i) = Trim(Text1(i).Text)    '这行是我拉出一个MSFlexGrid的控件〜纪录每次数值用〜拿掉也行〜
 
    Next i
     
    FileNum = FreeFile

 
    If iCount = 0 Then
        Open FilePath For Output As #FileNum
            Print #FileNum, " 序号" & "," & "日期" & "," & "时间" & "," & "测试压力" & "," & "单位" & "," & "测试结果" & "," & "泄露量" & "," & "单位"
            Print #FileNum, (iCount+1) & "," & TempString
        Close #FileNum
    Else
        Open FilePath For Append As #FileNum
            Print #FileNum, (iCount+1) & "," & TempString
        Close #FileNum
    End If
  
    iCount = iCount + 1

 
End Sub

其实会用的CSV格式最重要的是〜为求稳定一般机器上都不安装任何Office软件的〜而CSV格式就算不安装Office软件也能正常运作〜
只需把档案复制到其他有安装Office软件的电脑照样能开〜或是要用UltraEdit开也行〜他也能拿来当Buff用〜累积够多的资料后〜
在一次汇到另一个EXCEL的档内〜即可再做其他后制动作〜再说他耗费的资源比较少〜开启速度比较快〜读取也比EXCEL快〜效率也高〜
除非必要〜一般机器上都是先存文字档〜再开发转档程式把文字档转存EXCEL档作后制和分析〜试想你开启一个300MB的文字档比较快〜
还是开启一个300MB的EXCEL档比较快就知道了〜


[ 本帖最后由 wube 于 2011-6-16 01:40 编辑 ]

不要選我當版主
2011-06-15 21:16
快速回复:VB自动保存EXCEL
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033383 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved