首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VBA >

依据Excel某列填写的值自动与SQL Server中的表实现对应自动更新

2013-10-31 
根据Excel某列填写的值自动与SQL Server中的表实现对应自动更新最近遇到了一个棘手的问题:公司研发新产品

根据Excel某列填写的值自动与SQL Server中的表实现对应自动更新
最近遇到了一个棘手的问题:

公司研发新产品时需要在Excel表中输入BOM,但是在BOM对应的物料信息都是在数据库对应表中存在的。
假设这个表名为A,那么,物料编号 A.ItemCode,标准价格 A.Price

现在想实现这么个功能,就是当我在Excel表中的对应列填入一个物料编号,那么在Excel的“标准价格”列就可以自动根据对应的物料编号,从ERP的数据库(SQL Server) 的A表中取得这个A.Price 字段的值,然后在Excel的“标准价格”列中实现自动更新。

ItemCode   Price
101001

101002

如上所示,当我在Excel的ItemCode 中填写了一个物料编号后,那么我刷新下这个表,在Price一栏就能自动获得从SQL Server的对应表中查到的当前物料的标准价格。

问题比较急,还请各位前辈多多指教,小弟不胜感激~跪谢~
[解决办法]
随手写个例子,作为参考。思路是这样的,具体的参数还是你自己设定。而且好多细节还是得注意。



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim conn As ADODB.Connection
    Dim Rec As ADODB.Recordset
    Dim strConn As String
    Dim strItemCode As String
    Dim strSql As String
    Dim row As Long
    Dim col As Long
    
    '例如编号在A列,PRICE存放在B列
    
    Application.ScreenUpdating = False
    
    strConn = "Provider='sqloledb';Data Source='改为自己的服务器地址';" & _
        "Initial Catalog='改为自己的数据库名称';Trusted_Connection=Yes;"
        
    Set conn = New ADODB.Connection
    conn.ConnectionString = strConn
    conn.CommandTimeout = 15
    conn.Open

    With ActiveSheet
        
        row = Target.row
        col = Target.Column + 1
        
        If col = 2 Then
        
            If Target.Value <> "" Then
            
                StrItemCode = Target.Value
                strSql = "SELECT ItemCode,Price " _
                       & "FROM 你的表名 " _
                       & "WHERE ItemCode=" & " '" & StrItemCode & "'"
                       
                Set Rec = New ADODB.Recordset
                Rec.CursorLocation = adUseClient
                Rec.Open strSql, conn, adOpenKeyset, adLockOptimistic
                
                If Rec.RecordCount <> 0 Then
                
                    Cells(row, col).Value = Rec.Fields("Price").Value
                        
                End If
                
            Else
            
                MsgBox "编号不能为空"
                
            End If
            
        Else
        


            MsgBox "请再第二列填写编号"
            
        End If
                              
    End With
    
    Set Rec = Nothing
    Set conn = Nothing
    
    Application.ScreenUpdating = False
    
End Sub




热点排行