Gamma di impostazione correttamente in DoCmd.Trasferiscifogliocalcolo (VBA di Access in Excel)?

For Each Page In Worksheets
    PageName = Split(Page.Name, " ")
    If UBound(PageName) > 0 Then
        Worksheets(Page.Name).Activate
        lRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
        LCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
        Fullrange = Worksheets(Page.Name).Range(Worksheets(Page.Name).Cells(1, 1), _
            Worksheets(Page.Name).Cells(lRow, LCol))
        accappl.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
            Page.Name, strpathxls, True, Fullrange
    End If
Next

Ho scritto questo codice in VBA di Excel per il backup di dati in access da excel. Il codice non piace il modo in cui ho scritto la gamma nel mio per ogni loop. Ho provato anche il 2 ° per ogni ciclo, ma che solo il backup della pagina principale ripetutamente( con la tabella corretta nomi però).

Penso che il 1 ° modo è vicino, ma non capisco cosa c’è di sbagliato con FullRange linea che è di tipo Gamma.

EDIT: L’errore è variabile oggetto o variabile del blocco with non impostata nel FullRange linea

Aggiornamento 6-18, sembra che il fullrange dovrebbe essere in forma di stringa. Ho modificato un po’, ma l’errore che sto ottenendo ora sul trasferiscifogliocalcolo la linea è “Il motore di database di Microsoft potrebbe non trovare l’oggetto’1301 Matrice$A$1:J$12′. Assicurarsi che l’oggetto esiste e si scrive il suo nome correttamente.

Ho preso fullrange e mettere in pagina.nome e mi ha dato lo stesso errore.

For Each Page In Worksheets
    PageName = Split(Page.Name, " ")
    If UBound(PageName) > 0 Then
        ' Worksheets(Page.Name).Activate - this line is most likely not needed
        lRow = Page.Range("A" & Rows.Count).End(xlUp).Row
        LCol = Page.Cells(2, Columns.Count).End(xlToLeft).Column
        fullRange = Page.Name & Page.Range(Page.Cells(1, 1), _
            Page.Cells(lRow, LCol)).Address
        accappl.DoCmd.TransferSpreadsheet acImport, _
            acSpreadsheetTypeExcel12Xml, Page.Name, strpathxls, True, Page.Name
    End If
Next  

 

2 Replies
  1. 0

    Ho modificato il tuo codice un po’, hanno un aspetto di vedere se è possibile vedere dove hai sbagliato.

    Dim Page As Worksheet
    Dim lRow As Long, LCol As Long
    Dim fullRange As Range
    Dim PageName As Variant
    
    For Each Page In Worksheets
    
        PageName = Split(Page.Name, " ")
    
        If UBound(PageName) > 0 Then
            ' Worksheets(Page.Name).Activate - this line is most likely not needed
            lRow = Page.Range("A" & Rows.Count).End(xlUp).Row
            LCol = Page.Cells(1, Columns.Count).End(xlToLeft).Column
            Set fullRange = Page.Range(Cells(1, 1), Cells(lRow, LCol))
            accappl.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, Page.Name, strpathxls, True, fullRange
        End If
    Next
    • Ho commentato il fullrange sotto la fioca pagename come variante, dal momento che ho bisogno di aggiornamento. Fullrange in per ogni ciclo mi ha dato il metodo range failed error. Ho apportato alcune modifiche, e ora hanno lo stesso errore di prima.
    • hm… prova con il Set fullRange
    • Ho messo un piccolo aggiornamento. Si rivelasse gamma completa deve essere una stringa, ma perché ho bisogno di un intero foglio comunque sostituire la gamma in accppl.docmd linea come nome della pagina, Aggiornamento 6-18, sembra che il fullrange dovrebbe essere in forma di stringa. Ho modificato un po’, ma l’errore che sto ottenendo ora sul trasferiscifogliocalcolo la linea è “Il motore di database di Microsoft potrebbe non trovare l’oggetto’1301 Matrice$A$1:J$12′. Assicurarsi che l’oggetto esiste e si scrive il suo nome correttamente.
    • Range("A1:A50").Address restituisce una rappresentazione in forma di Stringa di gamma
    • Ottenuto di lavoro post di risposta, vi ringrazio per il vostro aiuto
  2. 0

    Qui è qualche codice di lavoro, la scelta di un ! per qualche motivo.

      Sub BU_ACCESS()
    
    Dim accappl As Access.Application
    Dim strpathdb As String
    Dim strpathxls As String
    'Dim myrange As String, myrow1 As String, myrow2 As String
    'Dim fullRange As Range
    
    
    
    strpathdb = "C:\Users\tgfesaha\Desktop\Database1.accdb"
    'path to the upload file
    
    strpathxls = ActiveWorkbook.FullName
    
    
    
    
    Set accappl = New Access.Application
    
    accappl.OpenCurrentDatabase strpathdb
    Dim Page As Worksheet
    Dim lRow As Long, LCol As Long
    Dim fullrange As String
    Dim PageName As Variant
    'fullRange = Worksheets(Page.Name).Range(Worksheets(Page.Name).Cells(1, 1), Worksheets(Page.Name).Cells(lRow, LCol))
    
    For Each Page In Worksheets
    
        PageName = Split(Page.Name, " ")
    
        If UBound(PageName) > 0 Then
            ' Worksheets(Page.Name).Activate - this line is most likely not needed
            lRow = Page.Range("A" & Rows.Count).End(xlUp).Row
            LCol = Page.Cells(2, Columns.Count).End(xlToLeft).Column
            fullrange = Page.Range(Page.Cells(1, 1), Page.Cells(lRow, LCol)).Address
            xclam = Page.Name & "!" & fullranges
    
            accappl.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, Page.Name, strpathxls, True, xclam
        End If
    Next
    
    accappl.Quit
    
    End Sub

Lascia un commento