阙辉

EBS对接系统的开发(Excel VBA连接Oracle数据库、Excel VBA连接MySQL数据库) 有三代

第一代   采用的是窗口gui的形式

功能:总控接口,新房各个业务模块的数据查询

只能单笔查询,不支持批量查询

 

 

 

 

 

以下是第一代的主要代码

------------------------------------------------------------------第一代代码,作者:阙辉---------------------------------------------------------------------------------

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)

Public quehui1 As String           '定义主级传递变量
Public quehui2 As String           '定义次级传递变量
Public aa2, aa3, ii2, ii3 As Integer  '定义传递变量
Public quehui3 As String
Public quehui4 As String
Public quehui5 As String
Public quehui6 As String
Public quehui7 As String
Public quehui8 As String
Public quehui9 As String
Public quehui10 As String
Public quehui11 As String








Private Sub UserForm_Initialize()
With oracle主页.数据库控制区.Frame4.MultiPage1.Page1
    .Label1.Caption = "未标识"
    .Label2.Caption = "未标识"
    .Label3.Caption = "未标识"
    .Label4.Caption = "未标识"
End With
oracle主页.数据库控制区.Frame1.主级.Clear
Dim aa1, ii1 As Integer
aa1 = Range("d2").End(xlToRight).Column
For ii1 = 4 To aa1
    If Sheets("功能表").Cells(2, ii1).Value <> "" Then
        oracle主页.数据库控制区.Frame1.主级.AddItem Sheets("功能表").Cells(2, ii1).Value
    End If
Next

Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
'IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle

End Sub
Private Sub CommandButton2_Click()
With oracle主页.Frame3.MultiPage2
    .Page2.Spreadsheet1.Cells.Clear
    .Page1.ListView1.ColumnHeaders.Clear
    .Page1.ListView1.ListItems.Clear
End With
End Sub

Private Sub 主级_Click()

oracle主页.数据库控制区.Frame5.次级.Clear
With oracle主页.数据库控制区.Frame4.MultiPage1.Page1
    .TextBox1 = ""
    .TextBox2 = ""
    .TextBox3 = ""
    .TextBox4 = ""
End With

Dim aa2, aa3, ii2, ii3 As Integer
aa2 = Range("d3").End(xlToRight).Column
For ii2 = 4 To aa2
    If Sheets("功能表").Cells(3, ii2).Value = oracle主页.数据库控制区.Frame1.主级.Value Then
        aa3 = Sheets("功能表").Cells(10000, ii2).End(xlUp).Row
        oracle主页.数据库控制区.Frame6.Label5.Caption = oracle主页.数据库控制区.Frame1.主级.Value
        'Sheets("功能表").Cells(4, 2).Value = oracle主页.数据库控制区.Frame1.主级.Value
        quehui1 = oracle主页.数据库控制区.Frame1.主级.Value
            For ii3 = 5 To aa3
                oracle主页.数据库控制区.Frame5.次级.AddItem Sheets("功能表").Cells(ii3, ii2).Value
            Next
    End If
Next
End Sub
Private Sub 次级_Click()

With oracle主页.数据库控制区.Frame4.MultiPage1.Page1
    .TextBox1 = ""
    .TextBox2 = ""
    .TextBox3 = ""
    .TextBox4 = ""
End With

Dim aa2, aa3, ii2, ii3 As Integer
aa2 = Range("d3").End(xlToRight).Column
For ii2 = 4 To aa2
    'If Sheets("功能表").Cells(3, ii2).Value = Sheets("功能表").Cells(4, 2).Value Then
    'If Sheets("功能表").Cells(3, ii2).Value = quehui1 Then
    If Sheets("功能表").Cells(3, ii2).Value = oracle主页.数据库控制区.Frame1.主级.Value Then
        aa3 = Sheets("功能表").Cells(10000, ii2).End(xlUp).Row
        For ii3 = 5 To aa3
            If Sheets("功能表").Cells(ii3, ii2).Value = oracle主页.数据库控制区.Frame5.次级.Value Then
                Sheets("功能表").Cells(4, 3).Value = oracle主页.数据库控制区.Frame5.次级.Value
                If Sheets("功能表").Cells(ii3, ii2 + 2).Value <> "" Then
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label1.Caption = Sheets("功能表").Cells(ii3, ii2 + 2).Value
                Else
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label1.Caption = "未标识"
                End If
                If Sheets("功能表").Cells(ii3, ii2 + 4).Value <> "" Then
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label2.Caption = Sheets("功能表").Cells(ii3, ii2 + 4).Value
                Else
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label2.Caption = "未标识"
                End If
                If Sheets("功能表").Cells(ii3, ii2 + 6).Value <> "" Then
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label3.Caption = Sheets("功能表").Cells(ii3, ii2 + 6).Value
                Else
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label3.Caption = "未标识"
                End If
                If Sheets("功能表").Cells(ii3, ii2 + 8).Value <> "" Then
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label4.Caption = Sheets("功能表").Cells(ii3, ii2 + 8).Value
                Else
                    oracle主页.数据库控制区.Frame4.MultiPage1.Page1.Label4.Caption = "未标识"
                End If
            End If
        Next
    End If
Next
End Sub
Private Sub CommandButton1_Click()
Dim cnn As New ADODB.Connection
Dim quehuirs1 As New ADODB.Recordset
Dim sql As String
Dim i, k, j As Long
Dim ii1 As Long
Dim tiaojian1, tiaojian2 As String
cnn.Open "Provider=msdaora;Data Source=PROD;User Id=账号;Password=密码;persist security info=true"
aa2 = Range("d3").End(xlToRight).Column
For ii2 = 4 To aa2   '获取sql脚本
    If Sheets("功能表").Cells(3, ii2).Value = oracle主页.数据库控制区.Frame1.主级.Value Then
            aa3 = Sheets("功能表").Cells(10000, ii2).End(xlUp).Row
            For ii3 = 5 To aa3
                If Sheets("功能表").Cells(ii3, ii2).Value = oracle主页.数据库控制区.Frame5.次级.Value Then
                    quehui3 = Sheets("功能表").Cells(ii3, ii2 + 1).Value   '获取主查询语句
                    If Sheets("功能表").Cells(ii3, ii2 + 3).Value <> "" Then
                        quehui4 = Sheets("功能表").Cells(ii3, ii2 + 3).Value
                    Else
                        quehui4 = ""
                    End If
                    If Sheets("功能表").Cells(ii3, ii2 + 5).Value <> "" Then
                        quehui5 = Sheets("功能表").Cells(ii3, ii2 + 5).Value
                    Else
                        quehui5 = ""
                    End If
                    If Sheets("功能表").Cells(ii3, ii2 + 7).Value <> "" Then
                        quehui6 = Sheets("功能表").Cells(ii3, ii2 + 7).Value
                    Else
                        quehui6 = ""
                    End If
                    If Sheets("功能表").Cells(ii3, ii2 + 7).Value <> "" Then
                        quehui7 = Sheets("功能表").Cells(ii3, ii2 + 9).Value
                    Else
                        quehui7 = ""
                    End If
                End If
            Next
    End If
Next

With oracle主页.数据库控制区.Frame4.MultiPage1.Page1
    If .TextBox1 = "" And .TextBox2 = "" And .TextBox3 = "" And .TextBox4 = "" Then
        MsgBox "请至少输入一个条件(QH)"
        Exit Sub
    End If
    
    For ii1 = 1 To 4  '循环组合查询条件和值(qh)
        Select Case ii1
             Case Is = 1
                If .TextBox1 = "" Then
                    tiaojian1 = ""
                Else
                    tiaojian1 = quehui4 & " '" & .TextBox1 & "' "
                End If
             Case Is = 2
                If .TextBox2 = "" Then
                    tiaojian1 = ""
                Else
                    tiaojian1 = quehui5 & " '" & .TextBox2 & "' "
                End If
             Case Is = 3
                If .TextBox3 = "" Then
                    tiaojian1 = ""
                Else
                    tiaojian1 = quehui6 & " '" & .TextBox3 & "' "
                End If
             Case Is = 4
                If .TextBox4 = "" Then
                    tiaojian1 = ""
                Else
                    tiaojian1 = quehui7 & " '" & .TextBox4 & "' "
                End If
        End Select
        tiaojian2 = tiaojian2 & tiaojian1
    Next ii1
    
    sql = quehui3 & " " & tiaojian2
    End With
    
    quehuirs1.Open sql, cnn
    
'    If quehui4 <> "" Then
'        If .TextBox1 <> "" Then
'            quehui8 = .TextBox1
'        Else
'            quehui8 = "%"
'        End If
'    Else
'        quehui8 = ""
'    End If
'
'    If quehui5 <> "" Then
'        If .TextBox2 <> "" Then
'            quehui9 = .TextBox2
'        Else
'            quehui9 = "%"
'        End If
'    Else
'        quehui9 = ""
'    End If
'
'    If quehui6 <> "" Then
'        If .TextBox3 <> "" Then
'            quehui10 = .TextBox3
'        Else
'            quehui10 = "%"
'        End If
'    Else
'        quehui9 = ""
'    End If
'
'    If quehui7 <> "" Then
'        If .TextBox4 <> "" Then
'            quehui11 = .TextBox4
'        Else
'            quehui11 = "%"
'        End If
'    Else
'        quehui11 = ""
'    End If


'If quehui4 <> "" And quehui5 = "" And quehui6 = "" And quehui7 = "" Then
'    sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'"
'Else
'    If quehui4 <> "" And quehui5 <> "" And quehui6 = "" And quehui7 = "" Then
'        sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'"
'    Else
'        If quehui4 <> "" And quehui5 <> "" And quehui6 <> "" And quehui7 = "" Then
'            sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'" & " " & quehui6 & " " & "'" & quehui10 & "'"
'        Else
'            If quehui4 <> "" And quehui5 <> "" And quehui6 <> "" And quehui7 <> "" Then
'                sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'" & " " & quehui6 & " " & "'" & quehui10 & "'" & " " & quehui7 & " " & "'" & quehui11 & "'"
'            Else
'                Exit Sub
'            End If
'        End If
'    End If
'End If

'If quehui4 <> "" And quehui5 <> "" And quehui6 <> "" And quehui7 <> "" Then
'    sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'" & " " & quehui6 & " " & "'" & quehui10 & "'" & " " & quehui7 & " " & "'" & quehui11 & "'"
'Else
'    If quehui4 <> "" And quehui5 <> "" And quehui6 <> "" And quehui7 = "" Then
'        sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'" & " " & quehui6 & " " & "'" & quehui10 & "'"
'    Else
'        If quehui4 <> "" And quehui5 <> "" And quehui6 = "" And quehui7 = "" Then
'            sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'"
'        Else
'            If quehui4 <> "" And quehui5 = "" And quehui6 = "" And quehui7 = "" Then
'                sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'"
'            Else
'                Exit Sub
'            End If
'        End If
'    End If
'End If

'sql = quehui3 & " " & quehui4 & " " & "'" & quehui8 & "'" & " " & quehui5 & " " & "'" & quehui9 & "'" & " " & quehui6 & " " & "'" & quehui10 & "'" & " " & quehui7 & " " & "'" & quehui11 & "'"


                
With oracle主页.Frame3.MultiPage2
    .Page2.Spreadsheet1.Cells.Clear
    .Page1.ListView1.ColumnHeaders.Clear
    .Page1.ListView1.ListItems.Clear
    .Page1.ListView1.View = lvwReport
    .Page1.ListView1.FullRowSelect = True
    .Page1.ListView1.Gridlines = True
'    .Page1.ListView1.BackColor = &HE0E0E0
    .Page1.ListView1.ForeColor = &HFF0000
    .Page1.ListView1.Font = "华文楷体"
    .Page1.ListView1.Font.Size = 12
        For i = 1 To quehuirs1.Fields.Count
            .Page1.ListView1.ColumnHeaders.Add , , quehuirs1.Fields(i - 1).Name
            .Page2.Spreadsheet1.Cells(1, i) = quehuirs1.Fields(i - 1).Name
        Next i
        
        On Error Resume Next
         Do Until quehuirs1.EOF
         k = k + 1
            .Page1.ListView1.ListItems.Add , , quehuirs1.Fields(0).Value
           
            For j = 1 To quehuirs1.Fields.Count
                .Page1.ListView1.ListItems(k).SubItems(j - 1) = quehuirs1.Fields(j - 1).Value
                .Page2.Spreadsheet1.Cells(k + 1, j) = quehuirs1.Fields(j - 1).Value
            Next j
            quehuirs1.MoveNext
        Loop
    End With
    
     quehui1 = ""
     quehui2 = ""
     quehui3 = ""
     quehui4 = ""
     quehui5 = ""
     quehui6 = ""
     quehui7 = ""
     quehui8 = ""
     quehui9 = ""
     quehui10 = ""
     quehui11 = ""

     Set quehuirs1 = Nothing
     Set cnn = Nothing

End Sub
Private Sub CommandButton3_Click()
Dim cnn As New ADODB.Connection
Dim quehuirs1 As New ADODB.Recordset
Dim sql As String
Dim i, k, j As Long

cnn.Open "Provider=msdaora;Data Source=PROD;User Id=账号;Password=密码;persist security info=true"
sql = Sheets("功能表").Range("e3")
quehuirs1.Open sql, cnn

With oracle主页.Frame3.MultiPage2
    .Page2.Spreadsheet1.Cells.Clear
    .Page1.ListView1.ColumnHeaders.Clear
    .Page1.ListView1.ListItems.Clear
    .Page1.ListView1.View = lvwReport
    .Page1.ListView1.FullRowSelect = True
    .Page1.ListView1.Gridlines = True
'    .Page1.ListView1.BackColor = &HE0E0E0
    .Page1.ListView1.ForeColor = &HFF0000
    .Page1.ListView1.Font = "华文楷体"
    .Page1.ListView1.Font.Size = 12
        For i = 1 To quehuirs1.Fields.Count
            .Page1.ListView1.ColumnHeaders.Add , , quehuirs1.Fields(i - 1).Name
            .Page2.Spreadsheet1.Cells(1, i) = quehuirs1.Fields(i - 1).Name
        Next i
        
        On Error Resume Next
         Do Until quehuirs1.EOF
         k = k + 1
            .Page1.ListView1.ListItems.Add , , quehuirs1.Fields(0).Value
           
            For j = 1 To quehuirs1.Fields.Count
                .Page1.ListView1.ListItems(k).SubItems(j - 1) = quehuirs1.Fields(j - 1).Value
                .Page2.Spreadsheet1.Cells(k + 1, j) = quehuirs1.Fields(j - 1).Value
            Next j
            quehuirs1.MoveNext
        Loop
    End With

End Sub
Private Sub CommandButton5_Click()
Dim cnn As New ADODB.Connection
Dim quehuirs1 As New ADODB.Recordset
Dim sql As String
Dim i, k, j As Long

cnn.Open "Provider=msdaora;Data Source=PROD;User Id=账号;Password=密码;persist security info=true"
sql = Sheets("功能表").Range("f3")
quehuirs1.Open sql, cnn

With oracle主页.Frame3.MultiPage2
    .Page2.Spreadsheet1.Cells.Clear
    .Page1.ListView1.ColumnHeaders.Clear
    .Page1.ListView1.ListItems.Clear
    .Page1.ListView1.View = lvwReport
    .Page1.ListView1.FullRowSelect = True
    .Page1.ListView1.Gridlines = True
'    .Page1.ListView1.BackColor = &HE0E0E0
    .Page1.ListView1.ForeColor = &HFF0000
    .Page1.ListView1.Font = "华文楷体"
    .Page1.ListView1.Font.Size = 12
        For i = 1 To quehuirs1.Fields.Count
            .Page1.ListView1.ColumnHeaders.Add , , quehuirs1.Fields(i - 1).Name
            .Page2.Spreadsheet1.Cells(1, i) = quehuirs1.Fields(i - 1).Name
        Next i
        
        On Error Resume Next
         Do Until quehuirs1.EOF
         k = k + 1
            .Page1.ListView1.ListItems.Add , , quehuirs1.Fields(0).Value
           
            For j = 1 To quehuirs1.Fields.Count
                .Page1.ListView1.ListItems(k).SubItems(j - 1) = quehuirs1.Fields(j - 1).Value
                .Page2.Spreadsheet1.Cells(k + 1, j) = quehuirs1.Fields(j - 1).Value
            Next j
            quehuirs1.MoveNext
        Loop
    End With

End Sub
Private Sub CommandButton6_Click()
Dim cnn As New ADODB.Connection
Dim quehuirs1 As New ADODB.Recordset
Dim sql As String
Dim i, k, j As Long

cnn.Open "Provider=msdaora;Data Source=QFANG_UAT;User Id=账号;Password=密码;persist security info=true"
sql = Sheets("功能表").Range("f3")
quehuirs1.Open sql, cnn

With oracle主页.Frame3.MultiPage2
    .Page2.Spreadsheet1.Cells.Clear
    .Page1.ListView1.ColumnHeaders.Clear
    .Page1.ListView1.ListItems.Clear
    .Page1.ListView1.View = lvwReport
    .Page1.ListView1.FullRowSelect = True
    .Page1.ListView1.Gridlines = True
'    .Page1.ListView1.BackColor = &HE0E0E0
    .Page1.ListView1.ForeColor = &HFF0000
    .Page1.ListView1.Font = "华文楷体"
    .Page1.ListView1.Font.Size = 12
        For i = 1 To quehuirs1.Fields.Count
            .Page1.ListView1.ColumnHeaders.Add , , quehuirs1.Fields(i - 1).Name
            .Page2.Spreadsheet1.Cells(1, i) = quehuirs1.Fields(i - 1).Name
        Next i
        
        On Error Resume Next
         Do Until quehuirs1.EOF
         k = k + 1
            .Page1.ListView1.ListItems.Add , , quehuirs1.Fields(0).Value
           
            For j = 1 To quehuirs1.Fields.Count
                .Page1.ListView1.ListItems(k).SubItems(j - 1) = quehuirs1.Fields(j - 1).Value
                .Page2.Spreadsheet1.Cells(k + 1, j) = quehuirs1.Fields(j - 1).Value
            Next j
            quehuirs1.MoveNext
        Loop
    End With
End Sub
------------------------------------------------------------------第一代代码,作者:阙辉---------------------------------------------------------------------------------

 

第二代   采用的是Excel表格形式交互,主要支持的批量查询

功能:和第一代基本报错一致,主要就是批量查询

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------------------------------------------------------------第二代代码,作者:阙辉---------------------------------------------------------------------------------

批量查询显示表  事件动态代码

 

 

 

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

Dim d2, d3, vv2, vv3, vv4, vv5 As Long    '定义变量 d2主级最右端个数 d3次级下最大行数 vv2循环主级所在列  vv4循环次级所在行  vv5循环并组合序列(QH)
d2 = Sheets("批量查询脚本表").Range("iv3").End(xlToLeft).Column     '获取主级栏最右端个数(QH)

If Target.Column = 3 And Target.row = 2 Then        '如果sheet7.range(c2)有变动(QH)
    Sheets("批量查询显示表").Range("c3").Validation.Delete      '清空sheet7.range(c3)序列(QH)
    Sheets("批量查询显示表").Range("c3").ClearContents      '清空sheet7.range(c3)数据(QH)
'    Sheets("批量查询显示表").Range("d11:iv100000").ClearContents       '清空sheet7查询的结果数据(QH)
    For vv2 = 4 To d2       'for循环查找主级所在列(QH)
        If Sheets("批量查询脚本表").Cells(3, vv2).Value = Sheets("批量查询显示表").Cells(2, 3).Value Then       '如果如果sheet7.range(c2)数值和主级相同(QH)
            d3 = Sheets("批量查询脚本表").Cells(60000, vv2).End(xlUp).row       '获取主级下次级最大行数(QH)
            With Sheets("批量查询脚本表")
                For vv3 = 5 To d3       'for循环获取次级序列值(QH)
                    xulie2 = xulie2 & .Cells(vv3, vv2) & ","        '组合次级序列值(QH)
                Next
            End With
            With Sheets("批量查询显示表").Range("c3").Validation
                .Delete        '再次清空序列(QH)
                .Add Type:=xlValidateList, Formula1:=xulie2     '将序列赋值给sheet7.range(c3)(QH)
            End With
        End If
    Next vv2
Else        '如果sheet7.range(c2)无变动
    If Target.Column = 3 And Target.row = 3 Then       '如果sheet7.range(c3)变动
        Sheets("批量查询显示表").Range("c4").Validation.Delete       '清空sheet7.range(c4)序列(QH)
        Sheets("批量查询显示表").Range("c4").ClearContents      '清空sheet7.range(c4)数据(QH)
'        Sheets("批量查询显示表").Range("d11:iv100000").ClearContents        '清空sheet7查询的结果数据(QH)
        For vv2 = 4 To d2       'for循环查找主级所在列(QH)
            If Sheets("批量查询脚本表").Cells(3, vv2).Value = Sheets("批量查询显示表").Cells(2, 3).Value Then       '如果如果sheet7.range(c2)数值和主级相同(QH)
                d3 = Sheets("批量查询脚本表").Cells(60000, vv2).End(xlUp).row       '获取主级下次级最大行数(QH)
                    For vv4 = 5 To d3        'for循环获取条件序列值(QH)
                        If Sheets("批量查询脚本表").Cells(vv4, vv2).Value = Sheets("批量查询显示表").Cells(3, 3).Value Then     '如果如果sheet7.range(c3)数值和次级相同(QH)
                            For vv5 = vv2 + 3 To vv2 + 6
                                xulie3 = xulie3 & Sheets("批量查询脚本表").Cells(vv4, vv5) & ","
                            Next vv5
                            With Sheets("批量查询显示表").Range("c4").Validation
                                .Delete     '再次清空序列(QH)
                                .Add Type:=xlValidateList, Formula1:=xulie3         '将序列赋值给sheet7.range(c4)(QH)
                            End With
                        End If
                    Next vv4
            End If
        Next vv2
    Else
        If Target.Column = 3 And Target.row = 4 Then
           Sheets("批量查询显示表").Range("c12:c100000").ClearContents        '清空条件数据(QH)
           Sheets("批量查询显示表").Range("d11:iv100000").ClearContents
        End If
    End If
End If
Application.ScreenUpdating = ture
End Sub

 

批量查询主代码

 

 

 

 

Sub 关键查询001()
't = Timer
Sheets("批量查询显示表").Range("d11:iv100000").ClearContents        '清空sheet7查询的结果数据(QH)
'Sheets("批量查询显示表").Range("d11:iv100000").NumberFormatLocal = "@"
Dim ax1, ax2, ax3, iv1, iv2, iv3, aa, qh1 As Long
Dim qhwt1, qhwt2, qhwt3 As String     '定义变量(QH)
Dim qh3, qhsh2, i, k, q, h, g, row As Long    '定义变量(QH)
Dim qhs1 As String      '定义变量(QH)
Dim cnn As New ADODB.Connection     '定义变量(QH)
Dim quehuirs1 As New ADODB.Recordset        '定义变量(QH)
qh1 = Sheets("批量查询显示表").Range("c65536").End(xlUp).row       '获取查询数据最大行(QH)
Dim sql As String
If qh1 - 11 > 1000 Then
    MsgBox ("条件数量超过范围(1000),阙辉提醒!")
Else
ax1 = Sheets("批量查询脚本表").Range("iv3").End(xlToLeft).Column
    For iv1 = 4 To ax1
        If Sheets("批量查询脚本表").Cells(3, iv1).Value = Sheets("批量查询显示表").Range("c2").Value Then
            ax2 = Sheets("批量查询脚本表").Cells(60000, iv1).End(xlUp).row
            For iv2 = 5 To ax2
                 If Sheets("批量查询脚本表").Cells(iv2, iv1).Value = Sheets("批量查询显示表").Range("c3").Value Then
                    For iv3 = iv1 + 3 To iv1 + 6
                        If Sheets("批量查询脚本表").Cells(iv2, iv3).Value = Sheets("批量查询显示表").Range("c4").Value Then
                        qhwt1 = Sheets("批量查询脚本表").Cells(iv2, iv1 + 1).Value
                        qhwt2 = Sheets("批量查询脚本表").Cells(iv2, iv1 + 2).Value
                        qhwt3 = Sheets("批量查询脚本表").Cells(iv2, iv3 + 4).Value
                        
                            With Sheets("批量查询显示表")
                            qh1 = .Range("c65536").End(xlUp).row       '获取查询数据最大行(QH)
                                If qh1 - 11 = 1 Then    '判断是否只有一条记录(QH)
                                    qhs1 = "('" & .Cells(qh1, 3) & "')"        '是一条记录则取此格式(QH)
                                Else        '否则(QH)
                                    If qh1 - 11 = 2 Then     '判断是否只有两条记录(QH)
                                        qhs1 = "('" & .Cells(qh1 - 1, 3) & "'," & vbLf & "'" & .Cells(qh1, 3) & "')"      '是两条记录则取此格式(QH)
                                    Else    '否则(QH)
                                        If qh1 - 11 > 2 Then     '判断是否大于三条记录(QH)
                                            For i = 12 To qh1
                                                If i = 12 Then
                                                    qhs1 = "('" & .Cells(i, 3) & "'," & vbLf
                                                Else
                                                    If i <> qh1 Then
                                                        qhs1 = qhs1 & "'" & .Cells(i, 3) & "'," & vbLf
                                                    Else
                                                        qhs1 = qhs1 & "'" & .Cells(qh1, 3) & "')"
                                                    End If
                                                End If
                                            Next i
                                       End If
                                    End If
                                End If
                                
                               t = Timer
                               cnn.Open "Provider=msdaora;Data Source=PROD;User Id=账号;Password=密码;persist security info=true"    '获取查询数据条数
                               sql = qhwt2 & " " & qhwt3 & " " & qhs1 '组合SQL脚本
                               quehuirs1.Open sql, cnn
                                    Do Until quehuirs1.EOF
                                        For k = 1 To quehuirs1.Fields.Count
                                            qhsh2 = quehuirs1.Fields(k - 1).Value       '总条数
                                        Next
                                        quehuirs1.MoveNext
                               Loop
                               Set quehuirs1 = Nothing
                               Set cnn = Nothing
                               
                               cnn.Open "Provider=msdaora;Data Source=PROD;User Id=账号;Password=密码;persist security info=true"     '查询数据
                               sql = qhwt1 & " " & qhwt3 & " " & qhs1  '组合SQL脚本
                               quehuirs1.Open sql, cnn
                                    aa = quehuirs1.Fields.Count + 4
                                    For q = 5 To aa
                                        .Cells(11, q) = quehuirs1.Fields(q - 5).Name
                                        Next q
                                        row = 11
                                        On Error Resume Next
                                        Do Until quehuirs1.EOF
                                        row = row + 1
                                        n = n + 1
                                        .Cells(row, 4) = n
                                        w = UserForm1.Label3.Width      '获取文本框长度(QH)
                                        UserForm1.Show 0     '显示窗口(QH)
                                        g = g + w / qhsh2       '将文本框长度平均到条数(QH)
                                        UserForm1.Label2.Width = g      '实时更新文本框的长度(QH)
                                        UserForm1.Label1 = "已完成" & Format((row - 11) / qhsh2, "0.00%")        '文本框中央显示百分比(QH)
                                        UserForm1.Caption = "正在运行,已耗时" & Format(Timer - t, "0.00") & "秒,请稍后!!!阙辉提醒~_~"      '标题栏显示耗(QH)
                                        DoEvents
                                        
                                        For h = 5 To aa
                                            .Cells(row, h) = quehuirs1.Fields(h - 5).Value
                                        Next h
                                            quehuirs1.MoveNext
                                        Loop
                                        Set quehuirs1 = Nothing
                                        Set cnn = Nothing
                               End With
                        Exit For
                        End If
                    Next iv3
                 Exit For
                 End If
            Next iv2
        Exit For
        End If
    Next iv1
'    MsgBox (Timer - t)

qhwt1 = ""
qhwt2 = ""
qhwt3 = ""
ax1 = ""
ax2 = ""
ax3 = ""
iv1 = ""
iv2 = ""
iv3 = ""
aa = ""
qh1 = ""
End If
Unload UserForm1
End Sub

CUX客户化编码  单功能

 

 CUX客户化编码  单功能 代码

 

 Sub cuxkehuhuachaxun()
t = Timer

Sheets("CUX客户化编码").Range("b6:m10000").ClearContents

Dim ztshu1 As Long  '查询数据总条数变量(QH)
Dim iq1, h, iq2, iq3, i As Long 'FOR循环数量变量(QH)
Dim row As Long  '查询数据存表起始变量(QH)
Dim lie1 As Long  '查询结果总列数变量(QH)
Dim lie2 As Long  '查询总数总列数变量(QH)
Dim n As Long  '查询结果行数变量(QH)
Dim w As Long '进度条固定长度(QH)
Dim g As Single  '进度条变动长度(QH)
Dim tiao1 As Long  '批量查询条件最后行数变量(QH)
Dim zhusql1 As String   '主SQL变量(QH)
Dim jishusql1 As String   '计数SQL变量(QH)
Dim tiaojian1 As String   '条件SQL变量(QH)
Dim tiaojian2 As String   '批量条件SQL变量(QH)
Dim tiaojianzhi1 As String   '批量条件值变量(QH)
Dim shujuku1, yonghu1, kouling1 As String '定义登录信息常量(QH)
Dim cnn As New ADODB.Connection     '定义变量(QH)
Dim quehuirs2 As New ADODB.Recordset

shujuku1 = Sheets("login").Range("c3").Value
yonghu1 = Sheets("login").Range("c4").Value
kouling1 = Sheets("login").Range("c5").Value

With Sheets("CUX客户化编码")
zhusql1 = .Range("z3").Value  '主SQL获取(QH)
jishusql1 = .Range("aa3").Value  '计数SQL获取(QH)
If .Range("a3") = False Then  '是否批量查询(QH)
    If .Range("c4") = "" Then   '验证含义名是否为空,为空则抛出提示并退出程序(QH)
        MsgBox ("含义名为空则退出程序,阙辉提醒!")
        Exit Sub
    Else
       For iq1 = 3 To 13
           If .Cells(4, iq1) <> "" Then
               tiaojian1 = tiaojian1 & .Cells(3, iq1) & " like" & " '" & .Cells(4, iq1) & "' " '组合查询的条件语句部分(QH)
           End If
       Next
   End If
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"    '获取查询数据条数
            sql = jishusql1 & " " & tiaojian1 '组合SQL脚本
            quehuirs2.Open sql, cnn
                 Do Until quehuirs2.EOF
                     For iq2 = 1 To quehuirs2.Fields.Count
                         ztshu1 = quehuirs2.Fields(iq2 - 1).Value       '总条数
                     Next
                     quehuirs2.MoveNext
            Loop
            Set quehuirs2 = Nothing
            Set cnn = Nothing
            
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"      '查询数据
            sql = zhusql1 & " " & tiaojian1  '组合SQL脚本
            quehuirs2.Open sql, cnn
                        lie1 = quehuirs2.Fields.Count + 4
                            row = 5
                            On Error Resume Next
                            Do Until quehuirs2.EOF
                                row = row + 1
                                n = n + 1
                                .Cells(row, 2) = n
                                w = UserForm1.Label3.Width      '获取文本框长度(QH)
                                UserForm1.Show 0     '显示窗口(QH)
                                g = g + w / ztshu1     '将文本框长度平均到条数(QH)
                                UserForm1.Label2.Width = g      '实时更新文本框的长度(QH)
                                UserForm1.Label1 = "已完成" & Format((row - 5) / ztshu1, "0.00%")        '文本框中央显示百分比(QH)
                                UserForm1.Caption = "正在运行,已耗时" & Format(Timer - t, "0.00") & "秒,请稍后!!!阙辉提醒~_~"      '标题栏显示耗(QH)
                                DoEvents
                            
                                For h = 3 To lie1
                                    .Cells(row, h) = quehuirs2.Fields(h - 3).Value
                                Next h
                                    quehuirs2.MoveNext
                            Loop
                            Set quehuirs2 = Nothing
                            Set cnn = Nothing
                            zhusql1 = ""
                            jishusql1 = ""
                            tiaojian1 = ""
                            
Else
    For iq3 = 3 To 13   '获取批量查询条件语句(QH)
        If .Range("a5") = .Cells(2, iq3) Then
            tiaojian2 = .Cells(3, iq3) & " in "
        End If
    Next
    
        tiao1 = .Range("a65536").End(xlUp).row       '获取查询数据最大行(QH)
        If tiao1 - 5 = 1 Then    '判断是否只有一条记录(QH)
            tiaojianzhi1 = "('" & .Cells(tiao1, 1) & "')"        '是一条记录则取此格式(QH)
        Else        '否则(QH)
            If tiao1 - 5 = 2 Then     '判断是否只有两条记录(QH)
                tiaojianzhi1 = "('" & .Cells(tiao1 - 1, 1) & "'," & vbLf & "'" & .Cells(tiao1, 1) & "')"      '是两条记录则取此格式(QH)
            Else    '否则(QH)
                If tiao1 - 5 > 2 Then     '判断是否大于三条记录(QH)
                    For i = 6 To tiao1
                        If i = 6 Then
                            tiaojianzhi1 = "('" & .Cells(i, 1) & "'," & vbLf
                        Else
                            If i <> tiao1 Then
                                tiaojianzhi1 = tiaojianzhi1 & "'" & .Cells(i, 1) & "'," & vbLf
                            Else
                                tiaojianzhi1 = tiaojianzhi1 & "'" & .Cells(tiao1, 1) & "')"
                            End If
                        End If
                    Next i
               End If
            End If
        End If
        
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"     '获取查询数据条数
            sql = jishusql1 & " " & tiaojian2 & " " & tiaojianzhi1 '组合SQL脚本
            quehuirs2.Open sql, cnn
                 Do Until quehuirs2.EOF
                     For iq2 = 1 To quehuirs2.Fields.Count
                         ztshu1 = quehuirs2.Fields(iq2 - 1).Value       '总条数
                     Next
                     quehuirs2.MoveNext
            Loop
            Set quehuirs2 = Nothing
            Set cnn = Nothing
            
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"      '查询数据
            sql = zhusql1 & " " & tiaojian2 & " " & tiaojianzhi1  '组合SQL脚本
            quehuirs2.Open sql, cnn
                            lie1 = quehuirs2.Fields.Count + 4
                            row = 5
                            On Error Resume Next
                            Do Until quehuirs2.EOF
                            row = row + 1
                            n = n + 1
                            .Cells(row, 2) = n
                            w = UserForm1.Label3.Width      '获取文本框长度(QH)
                            UserForm1.Show 0     '显示窗口(QH)
                            g = g + w / ztshu1     '将文本框长度平均到条数(QH)
                            UserForm1.Label2.Width = g      '实时更新文本框的长度(QH)
                            UserForm1.Label1 = "已完成" & Format((row - 5) / ztshu1, "0.00%")        '文本框中央显示百分比(QH)
                            UserForm1.Caption = "正在运行,已耗时" & Format(Timer - t, "0.00") & "秒,请稍后!!!阙辉提醒~_~"      '标题栏显示耗(QH)
                            DoEvents
                            
                            For h = 3 To lie1
                                .Cells(row, h) = quehuirs2.Fields(h - 3).Value
                            Next h
                                quehuirs2.MoveNext
                            Loop
                            Set quehuirs2 = Nothing
                            Set cnn = Nothing
                            zhusql1 = ""
                            jishusql1 = ""
                            tiaojian2 = ""
                            tiaojianzhi1 = ""
        
          
End If
End With
Unload UserForm1
End Sub

CUX支付申请   功能

 

 CUX支付申请   功能代码

 

 Sub cuxkehuhuachaxun001()
t = Timer

Sheets("CUX支付申请").Range("b6:ah1000000").ClearContents

Dim ztshu1 As Long  '查询数据总条数变量(QH)
Dim iq1, h, iq2, iq3, i As Long 'FOR循环数量变量(QH)
Dim row As Long  '查询数据存表起始变量(QH)
Dim lie1 As Long  '查询结果总列数变量(QH)
Dim lie2 As Long  '查询总数总列数变量(QH)
Dim n As Long  '查询结果行数变量(QH)
Dim w As Long '进度条固定长度(QH)
Dim g As Single  '进度条变动长度(QH)
Dim tiao1 As Long  '批量查询条件最后行数变量(QH)
Dim zhusql1, sql As Variant  '主SQL变量(QH)
Dim jishusql1 As Variant   '计数SQL变量(QH)
Dim tiaojian1 As Variant   '条件SQL变量(QH)
Dim tiaojian2 As Variant   '批量条件SQL变量(QH)
Dim tiaojianzhi1 As Variant   '批量条件值变量(QH)
Dim shujuku1, yonghu1, kouling1 As String '定义登录信息常量(QH)
Dim cnn As New ADODB.Connection     '定义变量(QH)
Dim quehuirs2 As New ADODB.Recordset
Dim qh001 As Long
Dim qh1 As Long


shujuku1 = Sheets("login").Range("c3").Value
yonghu1 = Sheets("login").Range("c4").Value
kouling1 = Sheets("login").Range("c5").Value
qh001 = 32

With Sheets("CUX支付申请")
zhusql1 = .Range("ap3").Value  '主SQL获取(QH)
jishusql1 = .Range("aq3").Value  '计数SQL获取(QH)
If .Range("a3") = False Then  '是否批量查询(QH)
    If .Range("c4") = "" Then   '验证含义名是否为空,为空则抛出提示并退出程序(QH)
        MsgBox ("含义名为空则退出程序,阙辉提醒!")
        Exit Sub
    Else
       For iq1 = 3 To qh001 + 2
           If .Cells(4, iq1) <> "" Then
               tiaojian1 = tiaojian1 & .Cells(3, iq1) & " like" & " '" & .Cells(4, iq1) & "' " '组合查询的条件语句部分(QH)
           End If
       Next
   End If
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"    '获取查询数据条数
            sql = jishusql1 & " " & tiaojian1 '组合SQL脚本
            quehuirs2.Open sql, cnn
                 Do Until quehuirs2.EOF
                     For iq2 = 1 To quehuirs2.Fields.Count
                         ztshu1 = quehuirs2.Fields(iq2 - 1).Value       '总条数
                     Next
                     quehuirs2.MoveNext
            Loop
            Set quehuirs2 = Nothing
            Set cnn = Nothing
            
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"      '查询数据
            sql = zhusql1 & " " & tiaojian1  '组合SQL脚本
'            .Range("c1") = sql   '调试用
            quehuirs2.Open sql, cnn
                        lie1 = quehuirs2.Fields.Count + 4
                            row = 5
                            On Error Resume Next
                            Do Until quehuirs2.EOF
                            row = row + 1
                            n = n + 1
                            .Cells(row, 2) = n
                            w = UserForm1.Label3.Width      '获取文本框长度(QH)
                            UserForm1.Show 0     '显示窗口(QH)
                            g = g + w / ztshu1     '将文本框长度平均到条数(QH)
                            UserForm1.Label2.Width = g      '实时更新文本框的长度(QH)
                            UserForm1.Label1 = "已完成" & Format((row - 5) / ztshu1, "0.00%")        '文本框中央显示百分比(QH)
                            UserForm1.Caption = "正在运行,已耗时" & Format(Timer - t, "0.00") & "秒,请稍后!!!阙辉提醒~_~"      '标题栏显示耗(QH)
                            DoEvents
                            
                            For h = 3 To lie1
                                .Cells(row, h) = quehuirs2.Fields(h - 3).Value
                            Next h
                                quehuirs2.MoveNext
                            Loop
                            Set quehuirs2 = Nothing
                            Set cnn = Nothing
                            zhusql1 = ""
                            jishusql1 = ""
                            tiaojian1 = ""
                            
Else
    For iq3 = 3 To qh001 + 2 '获取批量查询条件语句(QH)
        If .Range("a5") = .Cells(2, iq3) Then
            tiaojian2 = .Cells(3, iq3) & " in "
        End If
    Next
    
        tiao1 = .Range("a65536").End(xlUp).row       '获取查询数据最大行(QH)
        If tiao1 - 5 = 1 Then    '判断是否只有一条记录(QH)
            tiaojianzhi1 = "('" & .Cells(tiao1, 1) & "')"        '是一条记录则取此格式(QH)
        Else        '否则(QH)
            If tiao1 - 5 = 2 Then     '判断是否只有两条记录(QH)
                tiaojianzhi1 = "('" & .Cells(tiao1 - 1, 1) & "'," & vbLf & "'" & .Cells(tiao1, 1) & "')"      '是两条记录则取此格式(QH)
            Else    '否则(QH)
                If tiao1 - 5 > 2 Then     '判断是否大于三条记录(QH)
                    For i = 6 To tiao1
                        If i = 6 Then
                            tiaojianzhi1 = "('" & .Cells(i, 1) & "'," & vbLf
                        Else
                            If i <> tiao1 Then
                                tiaojianzhi1 = tiaojianzhi1 & "'" & .Cells(i, 1) & "'," & vbLf
                            Else
                                tiaojianzhi1 = tiaojianzhi1 & "'" & .Cells(tiao1, 1) & "')"
                            End If
                        End If
                    Next i
               End If
            End If
        End If
        
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"     '获取查询数据条数
            sql = jishusql1 & " " & tiaojian2 & " " & tiaojianzhi1 '组合SQL脚本
            quehuirs2.Open sql, cnn
                 Do Until quehuirs2.EOF
                     For iq2 = 1 To quehuirs2.Fields.Count
                         ztshu1 = quehuirs2.Fields(iq2 - 1).Value       '总条数
                     Next
                     quehuirs2.MoveNext
            Loop
            Set quehuirs2 = Nothing
            Set cnn = Nothing
            
            cnn.Open "Provider=msdaora;Data Source=" & shujuku1 & ";User Id=" & yonghu1 & ";Password=" & kouling1 & ";persist security info=true"      '查询数据
            sql = zhusql1 & " " & tiaojian2 & " " & tiaojianzhi1  '组合SQL脚本
            quehuirs2.Open sql, cnn
                            lie1 = quehuirs2.Fields.Count + 4
                            row = 5
                            On Error Resume Next
                            Do Until quehuirs2.EOF
                            row = row + 1
                            n = n + 1
                            .Cells(row, 2) = n
                            w = UserForm1.Label3.Width      '获取文本框长度(QH)
                            UserForm1.Show 0     '显示窗口(QH)
                            g = g + w / ztshu1     '将文本框长度平均到条数(QH)
                            UserForm1.Label2.Width = g      '实时更新文本框的长度(QH)
                            UserForm1.Label1 = "已完成" & Format((row - 5) / ztshu1, "0.00%")        '文本框中央显示百分比(QH)
                            UserForm1.Caption = "正在运行,已耗时" & Format(Timer - t, "0.00") & "秒,请稍后!!!阙辉提醒~_~"      '标题栏显示耗(QH)
                            DoEvents
                            
                            For h = 3 To lie1
                                .Cells(row, h) = quehuirs2.Fields(h - 3).Value
                            Next h
                                quehuirs2.MoveNext
                            Loop
                            Set quehuirs2 = Nothing
                            Set cnn = Nothing
                            zhusql1 = ""
                            jishusql1 = ""
                            tiaojian2 = ""
                            tiaojianzhi1 = ""
        
          
End If


End With
Unload UserForm1

End Sub

 

posted on 2019-12-10 17:04  真辉辉  阅读(605)  评论(0)    收藏  举报

导航