VB程序员博客

VB程序开发

我用VB程序第一次读取EXCEL文件后,用:
Shell "cmd.exe /c taskkill /im EXCEL.exe /f", vbHide
命令彻底杀掉EXCEL.EXE进程,
当第二次读取EXCEL文件时,提示
“远程服务器不存在或不能使用”
错误信息,无法完成读取,请问怎么回事,要怎么办?
注明:
不要给我如下代码结束EXCEL:
    xlBook.Close False
    xlApp.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
因为这段代码我试过多次,无法结束EXCEL.exe进程。此问题已经解决!呵呵,详细说说的你解决过程,说不定对别有用…呵呵接分了<
回答过N遍了,要按照从小到大的次序释放对象。<

<


我自定义了个按钮,用来执行某条宏,在我的电脑上可以正常显示和运行,但是拷贝到同事电脑上就没了,怎么回事?
要怎么解决啊http://www.vcfans.com/2009/02/excel-custom-toolbar-and-preservation.html
我按以上说法,是可以在同事电脑上显示自定义的工具栏,但是该工具栏上的按钮不见了

<
<
是不是他的exCel的宏的安全性设置的太高了?<
有的版本不行,有的可以,真是奇怪……唉……

<
<


1、以下的步骤全部使用VB6写出代码,EXCEL中包含SHEET1和SHEET2
2、向SHEET1自动插入EXCEL中一个按钮控件
3、给此按钮重命名为“跳转到SHEET2”
4、点击此按钮后触发事件,跳转到SHEET2

万分感谢,结贴。我发了两次帖子,请到http://topic.csdn.net/u/20090127/23/39527634-7599-437b-ab35-54d6942f8f85.html
再次给分,还有100分。
学习!!!thanks


1、以下的步骤全部使用VB6写出代码,EXCEL中包含SHEET1和SHEET2
2、向SHEET1自动插入EXCEL中一个按钮控件
3、给此按钮重命名为“跳转到SHEET2”
4、点击此按钮后触发事件,跳转到SHEET2

万分感谢,结贴。我发了两次帖子,请到http://topic.csdn.net/u/20090127/23/39527634-7599-437b-ab35-54d6942f8f85.html
再次给分,还有100分。
学习!!!thanks


我有两张Excel做成的透视表,我想用VB写一个程序,来合并这两张透视表,使这两张表中的数据合二为一,并另存为一个新的Excel文件,请问该怎么弄,谢谢!

<

<


  我想获取当前系统的月份的最大日期,如12月有31天,就获取31天,
  然后或者这个日期下是星期几,如2009.12.16号是星期三.
  因为我要遍历,从1号到31号,然后对应的天是星期几.这样.查查function

format(date,"dddd")有专门的日期控件,你直接用被。。。


vb实现保存到excel中
如何让生成的excel自动筛选(就是表头都有下拉列表)
能用代码实现吗???
。。。。excel中录制宏,拿到vb修改一下

楼上的怎么做成模板?<
我的是个Acess程序
那保存excel的时候还得有什么特殊操作吗
我直接用
DoCmd.TransferSpreadsheet acExport, 5, WRK_EXPORT, export_name, False, "人员名单"
生成的

PS:要是把代码加进去的话,怎么老提示with。。。的错误,应该怎么加

解决了
Set Excel_App = CreateObject("Excel.Application")
    Set Excel_Book = Excel_App.Workbooks.Open(export_name)
    Set Excel_Sheet = Excel_App.Worksheets(1)
    Excel_Sheet.Rows(1).AutoFilter

谢谢楼上两位
揭帖


有没有什么好的方法,将Excel中的数据存入数据库当中呢?
目前的做法,是将数据存成一个数组,然后一条条的写入到数据库,比较繁琐,有没有更为简单的做法呢?

想到使用OpenRowSet来做

insert into  table1  select  *  from  OpenRowSet('Microsoft.Jet.OLEDB.4.0','Excel 8.0;hdr=yes;database=" & ThisWorkbook.FullName & ";','select  *  from  [数据]'

发现这个做法不行~,会报错“未给出错误信息”

大家给点意见,谢谢OpenRowSet 不能用当前正在使用(打开中)的 .xls 文件,你可以复制 .xls 文件,再导入试试。http://blog.csdn.net/liangsx/archive/2009/01/06/3722438.aspx

opendatasource ….

还有一种方案一条条读

但是组合成一个长串插入

比如

sql="insert …. ; insert…"

这样也可以执行我可以把Excel中的数据保存为一个Reset,但是怎么能够存储到远程的数据库当中呢?没遇到过 学习了。我觉得,本地的Excel文件,可以通过Oledb连接,当做是一个数据库来使用,那也应该可以执行跨数据库的一些操作,但是,直接使用openrowset有问题,不知道应该如何使用。OpenRowSet 是可以的,只要该 xls 不在使用中。
这还说得不够明白?<
解决了,呵呵。谢谢大家了。方法有点土,呵呵,过两天我会放在自己的博客中。


把EXCEL的数据放入了DATAGRID中,怎么样把DATAGRID的数据保存到数据库的某个表中。
在线等。DATAGRID不灵活,改用msflexgrid吧msflexgrid中怎么来实现呢,急
用adodc+DATAGRID数据绑定即可完成
给你段代码做示例
    Adodc1.Recordset.AddNew
    Adodc1.Recordset.Fields("编号") = dmin + 1
    Adodc1.Recordset.Fields("账号") = Val(sh.Cells(1, 2))
    Adodc1.Recordset.Fields("金额") = Val(sh.Cells(1, 3))
    Adodc1.Recordset.Update
    Adodc1.Recordset.MoveFirst
    Adodc1.Recordset.MoveLast
    Adodc1.Refresh
    DataGrid1.Refresh
Private Sub Command1_Click()
        Dim iiRow As Integer
        Dim iiCol As Integer
        Dim tempSql As String
        Dim DcolCount As Integer
        Dim DrowCount As Integer
        Dim Fld() As String
        DcolCount = DataGrid1.Columns.Count - 1
        DrowCount = 100 '你导入到datagrid中EXCEL记录的行数
        ReDim Fld(DcolCount)
        iiRow = 0: iiCol = 0
        Adodc2.Refresh
        Do While iiRow < DrowCount
            Adodc2.Recordset.AddNew
            Do While iiCol <= DcolCount
                DataGrid1.Row = iiRow
               
                Adodc2.Recordset.Fields(iiCol).Value = Format(DataGrid1.Columns(iiCol).Value)
                iiCol = iiCol + 1
               
                DoEvents
            Loop
            Adodc2.Recordset.Update
           
            Adodc2.Refresh
           
            iiCol = 0
            tmpCol = 0
            tempSql = ""
            iiRow = iiRow + 1
            DoEvents
        Loop
       
End Sub

没什么不灵活。

你把 Excel 作为 Jet Engine 的外部数据库连接;用记录集对象查询其中的数据,可以直接挂接到 DataGrid 上。

另外,导入到例如 Access 数据库表时,用 Connection 对象的 Execute 方法,就可以执行类似

Insert Into Access_Table IN 'your_Access_Path&Filename.mdb' From [your_Excel_sheet$] Where …

这样的语句。 做个循环就可以了。下面的代码是把datagrid中的数据倒入到密码为11的access数据库。代码如下:
    Dim Res As New ADODB.Connection
    Dim Rs As New ADODB.Recordset
    Res.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
          & App.Path & "hushiAgu.mdb;Persist Security Info=False;Jet OLEDB:Database Password=11"
  Rs.MoveFirst
  Do While Not frmMain.Rs.EOF
  Res.Execute  "Insert Into table.name (编号,账号,金额)values ('" & Rs("编号") & "','" & Rs("账号") & "','" & Rs("金额") & "')"                                                                 
  Rs.MoveNext
  Loop


就是把Excel的数据导入到Access数据库中,代码如下:

Private Sub cmdInput_Click()
CommonDialog1.CancelError = True
On Error GoTo Err:
CommonDialog1.Filter = "(*.xls)|*.xls"
CommonDialog1.FileName = ""
CommonDialog1.ShowOpen
Dim excelPath As String
excelPath = CommonDialog1.FileName
Err:
If Err.Number <> 0 Then
Exit Sub
End If
Dim Msg, Style, Title, Response
Msg = "导入新数据前将清空原有数据(不可恢复),您确定要导入吗?"
Style = vbYesNo + vbExclamation + vbDefaultButton2
Title = "提醒"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & App.Path & "dbemp.mdb;" & "Persist Security Info=False"
conn.Open
Dim tableName As String
tableName = "Emptable"
Set rs = conn.OpenSchema(adSchemaTables, Array(Empty, Empty, tableName, "Table"))
If Not rs.EOF Then
conn.Execute "Drop Table [Emptable]"
End If
Dim db As Database
Dim sheet As String
Dim accessPath As String
Dim accessTable As String
Dim SQL As String
accessPath = App.Path & "dbemp.mdb"
accessTable = "Emptable"
sheet = "sheet1"
Set db = OpenDatabase(excelPath, True, False, "Excel 8.0")
SQL = ("Select * into [;database=" & accessPath & "]." & accessTable & " from [" & sheet & "$]")
db.Execute (SQL)
rs.Close
conn.Close

现在有个很奇怪的问题,如果Excel的每个单元格中的数据都是字母或者都是数字的话,那么可以正常导入,而那些数据中如果既有字母也有数字的话,那么那些纯为数字的单元格中的数据将无法导入,这是怎么回事呀,而且就算事先把所有单元格格式设定为“文本”类型,那些数字还是无法导入,郁闷!

补充一点:如果表中已有数据的情况,把单元格格式设定为“文本”类型,那也是无法导入的;但如果是设定“文本”类型以后,再向单元格中输入数字,那这些数字可被导入!现在有个很奇怪的问题,如果Excel的每个单元格中的数据都是字母或者都是数字的话,那么可以正常导入,而那些数据中如果既有字母也有数字的话,那么那些纯为数字的单元格中的数据将无法导入,这是怎么回事呀,而且就算事先把所有单元格格式设定为“文本”类型,那些数字还是无法导入,郁闷!

看了一下你代码,只是想说ado的方式操作excel不是很稳定,一般来说 可以用 加一个

空格的方式,是ado不把这行当成数字格式的。。。不过这个我记不清楚了,如果不成功的话

我研究一下

保底的方式是vba 但是从难易度 和  效率来看都不好。。。http://www.cnblogs.com/frostcity/archive/2008/03/07/1095484.html

这个方案也可以考虑,文本数字的混合型输入本身就不太好解决<
<
<
有这种事,我想不是ado不稳定,还是数据格式问题,Excel2003将数字作为字符处理比较怪,左上角有个黄色的小三角<
<
主要是先输入还是先设格式的问题,呵呵