谢谢楼上回贴的大虾。我号几次贴子里面你们都给我回贴了。thanksPrivate Sub Excel_TorisakiM() Dim i, count As Long
On Error Resume Next
CommonDialog1.ShowSave
'When this property is set to True, error number 32755 (cdlCancel) occurs whenever the user chooses the Cancel button If Err.Number = 32755 Then Err.Clear Exit Sub End If
special
Set xlApp = CreateObject("excel.application") Set xlBook = xlApp.Workbooks.Open(myFilename) Set xlSheet = xlBook.Worksheets(1)
count = Oradyn.RecordCount Screen.MousePointer = vbHourglass If Oradyn.RecordCount <> 0 Then Oradyn.MoveFirst i = 2 Do Until Oradyn.EOF = True DoEvents WaitL.Caption = "Excel出力中..." & Str(i - 1) & "/" & Str(count) & "件" WaitL.Refresh If IsNumeric(Oradyn!TORI_CODE) = False Then xlSheet.Cells(i, 1) = NullStrConv(Oradyn!TORI_CODE) Else xlSheet.Cells(i, 1) = NullNumConv(Oradyn!TORI_CODE) End If Debug.Print 2; xlSheet.Cells(i, 1) Debug.Print 4; NullNumConv(Oradyn!TORI_CODE)
xlSheet.Cells(i, 2) = NullStrConv(Oradyn!TORI_KANA) xlSheet.Cells(i, 3) = NullStrConv(Oradyn!TORI_NAME) xlSheet.Cells(i, 4) = NullStrConv(Oradyn!TORI_RYAKU) xlSheet.Cells(i, 5) = NullStrConv(Oradyn!TORI_ADDRESS1) xlSheet.Cells(i, 6) = NullStrConv(Oradyn!TORI_ADDRESS2) xlSheet.Cells(i, 7) = NullStrConv(Oradyn!TORI_TEL) xlSheet.Cells(i, 8) = NullStrConv(Oradyn!TORI_FAX) xlSheet.Cells(i, 9) = NullStrConv(Oradyn!TORI_AITE_TANMEI) i = i + 1 Oradyn.MoveNext LoopEnd If xlApp.Visible = False xlBook.Save xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing Screen.MousePointer = vbDefault
でも、でも。发音是dei mo ,dei mo.就是但是,但是的意思。大家不要踢我。我学日语和国际贸易的,进了公司才转行做程序的,所以好多都不懂。 谢谢两个阿勇,谢谢柏油。 你们的方法我式过了,还是没有起效,我想这会不会和我把数据改成了数字型有关系啊。 数据库里面本来的数据是 :0000001,0000002。000100。zasb28,zasmcn这样的,我为了区分数字和英文的数据,就吧000001什么的都用val转型了。 Hincd1T,Hincd2T都是文本框。Oradyn!TORI_CODE是数据库里面TORI_CODE那一列所有的数据。 现在要不要再给提取出来的数据转型啊,转回文字型? 对不起,菜鸟一只,麻烦大家了 Do DoEvents If IsNumeric(Hincd1T.Text) = True And IsNumeric(Hincd2T.Text) = True Then If IsNumeric(Oradyn!TORI_CODE) And Val(Oradyn!TORI_CODE) >= Val(Hincd1T.Text) And Val(Oradyn!TORI_CODE) <= Val(Hincd2T.Text) Then Excel_TorisakiF i = i + 1 End If
Else 'if the textbox's value is word then put the code here If Not IsNumeric(Oradyn!TORI_CODE) Then Excel_TorisakiF i = i + 1 End If End If
Public Function NullStrConv(dstr As Variant) As String If IsNull(dstr) = True Then NullStrConv = vbNullString Else NullStrConv = dstr End If End FunctionPublic Function NullNumConv(dstr As Variant) As Double If IsNull(dstr) = True Then NullNumConv = 0# Else NullNumConv = dstr End If End Function 还有,为什么要加'号呢
On Error Resume Next
CommonDialog1.ShowSave
'When this property is set to True, error number 32755 (cdlCancel) occurs whenever the user chooses the Cancel button
If Err.Number = 32755 Then
Err.Clear
Exit Sub
End If
special
Set xlApp = CreateObject("excel.application")
Set xlBook = xlApp.Workbooks.Open(myFilename)
Set xlSheet = xlBook.Worksheets(1)
count = Oradyn.RecordCount Screen.MousePointer = vbHourglass
If Oradyn.RecordCount <> 0 Then
Oradyn.MoveFirst
i = 2
Do Until Oradyn.EOF = True
DoEvents
WaitL.Caption = "Excel出力中..." & Str(i - 1) & "/" & Str(count) & "件"
WaitL.Refresh If IsNumeric(Oradyn!TORI_CODE) = False Then
xlSheet.Cells(i, 1) = NullStrConv(Oradyn!TORI_CODE)
Else
xlSheet.Cells(i, 1) = NullNumConv(Oradyn!TORI_CODE)
End If
Debug.Print 2; xlSheet.Cells(i, 1)
Debug.Print 4; NullNumConv(Oradyn!TORI_CODE)
xlSheet.Cells(i, 2) = NullStrConv(Oradyn!TORI_KANA)
xlSheet.Cells(i, 3) = NullStrConv(Oradyn!TORI_NAME)
xlSheet.Cells(i, 4) = NullStrConv(Oradyn!TORI_RYAKU)
xlSheet.Cells(i, 5) = NullStrConv(Oradyn!TORI_ADDRESS1)
xlSheet.Cells(i, 6) = NullStrConv(Oradyn!TORI_ADDRESS2)
xlSheet.Cells(i, 7) = NullStrConv(Oradyn!TORI_TEL)
xlSheet.Cells(i, 8) = NullStrConv(Oradyn!TORI_FAX)
xlSheet.Cells(i, 9) = NullStrConv(Oradyn!TORI_AITE_TANMEI) i = i + 1
Oradyn.MoveNext
LoopEnd If xlApp.Visible = False xlBook.Save xlApp.Quit Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Screen.MousePointer = vbDefault
MsgBox myFilename & " を作成終了しました。", vbInformation, "情報"
WaitL.Caption = vbNullString
CloseB.Enabled = True 我excel的部分是这样的,设置断点的时候,鼠标到了 Debug.Print 4; NullNumConv(Oradyn!TORI_CODE)的时候显示为00100,但是打开excel九还是100。这个是怎么回事??怎么改呢??
如果你经常使用 excel ,就不会有些疑问。
如果你不在一串数字前加 ' ,它会默认的将其转换成数值!!!
包括你直接在 excel 中输入也一样。
不信你输入 000100 试试?
只要加 ' 就行了,excel 本身的规则。xlSheet.Cells(i, 1) = "'" & NullNumConv(Oradyn!TORI_CODE)
将A1转化为文本类型,当然,你应该在给它赋值前用上句设置单元格格式
谢谢两个阿勇,谢谢柏油。
你们的方法我式过了,还是没有起效,我想这会不会和我把数据改成了数字型有关系啊。
数据库里面本来的数据是 :0000001,0000002。000100。zasb28,zasmcn这样的,我为了区分数字和英文的数据,就吧000001什么的都用val转型了。
Hincd1T,Hincd2T都是文本框。Oradyn!TORI_CODE是数据库里面TORI_CODE那一列所有的数据。
现在要不要再给提取出来的数据转型啊,转回文字型?
对不起,菜鸟一只,麻烦大家了
Do
DoEvents
If IsNumeric(Hincd1T.Text) = True And IsNumeric(Hincd2T.Text) = True Then
If IsNumeric(Oradyn!TORI_CODE) And Val(Oradyn!TORI_CODE) >= Val(Hincd1T.Text) And Val(Oradyn!TORI_CODE) <= Val(Hincd2T.Text) Then
Excel_TorisakiF
i = i + 1
End If
Else
'if the textbox's value is word then put the code here
If Not IsNumeric(Oradyn!TORI_CODE) Then
Excel_TorisakiF
i = i + 1
End If
End If
Oradyn.MoveNext
Loop Until Oradyn.EOF = True
xlApp.Columns("A:A").Select
xlApp.Selection.NumberFormatLocal = "@"
xlSheet.Range("A1").Value = "001"
但为什么xlSheet.Cells(i, 1) = "'" & NullStrConv(Oradyn!TORI_CODE)就不行呢?
Public Function NullStrConv(dstr As Variant) As String
If IsNull(dstr) = True Then
NullStrConv = vbNullString
Else
NullStrConv = dstr
End If
End FunctionPublic Function NullNumConv(dstr As Variant) As Double
If IsNull(dstr) = True Then
NullNumConv = 0#
Else
NullNumConv = dstr
End If
End Function
还有,为什么要加'号呢
========================
要是用val转换,哪就不行了,0000001就成了1了,你必须用字符类型,才能保持0000001,如需要计算,先val转型,在计算后还要给它前面补0,转成字符串才可以
xlApp.Columns("A:A").Select
xlApp.Selection.NumberFormatLocal = "@"
xlSheet.Range("A1").Value = "001"
xlSheet.Cells(i, 1) = "'" & NullNumConv(Oradyn!TORI_CODE)
就可以了
是专业的报表工具,提供了丰富的报表分析方法,具有可视化的报表设计器WinTable,更好的支持WEB报表打印,连续打印、报表套打,对aspx.net、asp、Java报表、jsp、pphp提供了专门的类库,方便WEB报表开发人员进行快速开发.
网址:http://www.etcell.com/
下载地址:http://www.etcell.com/download.asp?ID=51
支持的报表功能如下:
1、支持主从报表
2、交叉报表
3、支持分组报表:小计、汇总自由设置
4、支持的套打报表,让套打简单灵活
5、支持分组报表的每组打印控制
6、支持连续打印,解决了票据打印的难题
7、支持自定义报表
8、支持MIS开发的各种开发工具:如VC、VB、Delphi、C Bulider、InterDev
9、支持WEB开发,FrontPage、InterDev、ASP.NEt、C#
10、EtCell内置支持VBScript脚本包括事件
11、在WEB上支持VBScript、JavaScript脚本
12、支持URL连接
13、支持的WEB服务器:NT的WEB服务器、Linux、Unix、WebLogic、TOMCAT、IIS;
14、在MIS开发中直接支持数据库,让程序开发更方便快捷
15、WEB插件和浏览器紧密融合,完全成为浏览器的一个分子!
16、一个页面安放多个ATGrid报表插件,再也不会出现其他控件的闪烁变动的效果!
17、完全支持XML,后台程序可以通过XML控制报表的每一部分!
18、让WEB开发变的更加简单,在WEB页[html]可以不用写一行代码.......
19、报表的单元格类型多大几十种,如:Text,Num,Button,Radio,CheckBox,Combox.....
20、不但实现报表展示功能,更重要突破了报表在线编辑功能........
21、和后端服务器程序的交互更加简单...............
22、可以把多个ATGrid控件的数据打印到一起,在也不用担心页眉和页脚问题......
功能多多,肯定会让你满意,不必再为选择报表控件发愁!!!