繁体   English   中英

VBA ADO 调用出现问题

[英]Trouble With VBA ADO Call

我对 VBA 比较陌生,需要一些帮助。 我一直在从其他位和样本中拼凑出这个应用程序。 这在周五工作,但现在没有,我不明白是什么导致了这个问题。 我有一个按顺序调用潜艇的主 function。 我写了 UseADO function 来取参数。 第一个调用 UseADO {copyAllRawData()} 的子程序确实有效。 但是,当它调用子 cashDiscounts() 时,我得到一个编译错误:Sheet4 上的变量未定义错误(要传递给 UseADO 的第一个变量。还有另一个创建工作表的子,我已经验证 Sheet4 确实存在并且如果我将此注释掉,我会在 Sheet5 处理的 sub 上得到相同的错误。任何帮助将不胜感激。谢谢!

Public Function UseADO(writeToSheet As Worksheet, writeToStartCell As String, queryString As String)

    'Get the Filename
    Dim filename As String
    filename = ThisWorkbook.Path & Application.PathSeparator & "hdremittance.xlsx"


    'Get the Connection
    Dim conn As New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & filename & ";" & _
        "Extended Properties=""Excel 12.0;HDR=Yes;"";"
        
    'Create the SQL Query
    Dim query As String
    query = queryString
    'Query = "Select * from ....
    'query = "Select * From [hdremittance$]"
        
    'Get the data from the workbook
    Dim rs As New Recordset
    rs.Open query, conn
            
    'Write Data
    'Dim sht As String
    'sht = writeToSheet
   
    writeToSheet.Cells.ClearContents
    writeToSheet.Range(writeToStartCell).CopyFromRecordset rs
        
    'Close the Connection
    conn.Close

End Function

Sub copyAllRawData()

UseADO Sheet1, "A2", "Select * From [hdremittance$]"

ThisWorkbook.Sheets(1).Range("A1").Value = "Invoice Number"
ThisWorkbook.Sheets(1).Range("B1").Value = "Keyrec Number"
ThisWorkbook.Sheets(1).Range("C1").Value = "Doc Type"
ThisWorkbook.Sheets(1).Range("D1").Value = "Transaction Value"
ThisWorkbook.Sheets(1).Range("E1").Value = "Cash Discount Amount"
ThisWorkbook.Sheets(1).Range("F1").Value = "Clearing Document Number"
ThisWorkbook.Sheets(1).Range("G1").Value = "Payment/Chargeback Date"
ThisWorkbook.Sheets(1).Range("H1").Value = "Comments"
ThisWorkbook.Sheets(1).Range("I1").Value = "Reason Code"
ThisWorkbook.Sheets(1).Range("J1").Value = "SAP Company Code"
ThisWorkbook.Sheets(1).Range("K1").Value = "PO Number"
ThisWorkbook.Sheets(1).Range("L1").Value = "Reference/Check Number"
ThisWorkbook.Sheets(1).Range("M1").Value = "Invoice Date"
ThisWorkbook.Sheets(1).Range("N1").Value = "Posting Date"
ThisWorkbook.Sheets(1).Range("O1").Value = "Payment Number"

End Sub

Sub cashDiscounts()
UseADO Sheet4, "A2", "Select Top 10000 [Invoice Number],[Keyrec Number],[Doc Type],[Transaction Value],[Reason Code] From [hdremittance$] WHERE [Reason Code] Like '*CASH DISCOUNT%'  "
'D-4080 (Cash/Trade Discount)

ThisWorkbook.Sheets(4).Range("A1").Value = "Invoice Number"
ThisWorkbook.Sheets(4).Range("B1").Value = "Keyrec Number"
ThisWorkbook.Sheets(4).Range("C1").Value = "Doc Type"
ThisWorkbook.Sheets(4).Range("D1").Value = "Transaction Value"
ThisWorkbook.Sheets(4).Range("E1").Value = "Reason Code"
ThisWorkbook.Sheets(4).Range("F1").Value = "Distribution Account"

Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With

ThisWorkbook.Sheets(4).Range(Cells(2, "F"), Cells(LastRow, "F")).Value = "D-4080"
    
End Sub
Sub buildNameWorksheets()
'Sheets.Add Count:=[10]
Sheets("Sheet1").Name = "rawData"
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "filterCriteria"                 
'Sheet2
'ThisWorkbook.Sheets(2).Range("A1").Value = "Invoice Number"
'ThisWorkbook.Sheets(2).Range("B1").Value = "Keyrec Number"
'ThisWorkbook.Sheets(2).Range("C1").Value = "Doc Type"
'ThisWorkbook.Sheets(2).Range("D1").Value = "Transaction Value"
'ThisWorkbook.Sheets(2).Range("E1").Value = "Reason Code"
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "invoices"                       
'Sheet3
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "cashDiscounts"                  
'Sheet4
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "tradeDiscounts"                 
'Sheet5
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "earlyPmtFees"                   
'Sheet6
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "rtvDamagedFees"                 
'Sheet7
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "rdcComplianceDeductions"        
'Sheet8
Sheets.Add(After:=Sheets(Sheets.Count)).Name = 
"supplierCollabTeamAnalytics"    'Sheet9
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "newStoreDiscount"               
'Sheet10
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "volumeRebate"                   
'Sheet11
End Sub

Tim,下面是显示 Sheet4 实际存在的屏幕截图。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM