• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Opgelost VBA Script actief werkbook save as en overschrijven bestaand

Dit topic is als opgelost gemarkeerd

luitgapj

Gebruiker
Lid geworden
18 jan 2012
Berichten
55
Ik ben op zoek naar een script, hieronder de uitleg van wat ik zoek :

Ik heb 2 Excel workbooks open staan :

Workbook 1 met allerlei vba code, om data vanuit SAP te transporteren naar dit Workbook.
Bijna alles vanuit SAP kan ik rechtstreeks transporteren naar dit Workbook, maar 1 ding niet.
Hiervoor moet ik SAP data laten transporteren naar een nieuw Excel Workboek.
Er wordt dan een nieuw workbook geopend, dus heb ik dan 2 workbooks open staan.
Nu opend dit 2de workbook iedere keer met een andere naam, en dat is mijn probleem.
Ik heb een script waarmee ik van het ene naar het andere Workbook kan kopieeren, maar daarin hebben de beide Workbooks een vooraf gedifinieerde vaste naam (van NaamWorkbook 2.xlsx naar Naam Workbook 1.xlsx).
Als Workbook 2 dus iedere keer opent met een andere naam werkt het script niet.

Ik wil dus graag een code in Workboek 1 welke workbook 2 (als deze actief is) opslaat als b.v. book1.xlsx op locatie c;\Temp
En dan ook nog als book1.xlsx al bestaat deze overschrijft.

Ik hoop dat ik het een beetje duidelijk heb omschreven, en dat er een slimmerik is welke mij verder kan helpen.

Met vriendelijke groet ............. Peter
 
Je kan bij exporteren vanuit SAP altijd een naam meegeven aan het bestand.
 
Maar het zou zo kunnen..

Code:
Sub jec()
 Dim it
 For Each it In Workbooks
   If it.Name <> ThisWorkbook.Name Then
     Application.DisplayAlerts = False
     Workbooks(it.Name).SaveAs "C:\Temp\book1.xlsx", 51
     Application.DisplayAlerts = True
     Exit For
   End If
 Next
End Sub
 
1. laat VBA het meest recente bestand hernoemen: Name (...) As
2. gebruik workbooks(1) en workbooks (2)
 
Als het echt gaat zoals hij beschrijft hoe het gaat, wordt het bestand niet opgeslagen na openen. Dus het opslaan moet nog gebeuren. Sommige transacties, veelal vanuit Query transacties in SAP slaan exports niet direct op (eigenlijk een "view", gekoppeld aan de transactie). In alle andere gevallen heb je de optie om bestanden te overschrijven na exporteren....
 
Je kan bij exporteren vanuit SAP altijd een naam meegeven aan het bestand.
Klopt, maar dan wel bij de functie Exporteren, maar dan wordt het bestand opgeslagen, en dat is niet de bedoeling, het bestand moet als het gexporteerd wordt gelijk openen. Ik gebruik hiervoor de functie " Excel Inplace ". Beide workbooks moeten dus open staan en dan moet mijn probleem zoals beschreven opgelost zien te worden !
 
Je kan het toch opslaan in je temp map? Wat je daarna ook zou doen.
Anders, zie geplaatste code
 
Er zijn overigens betere manieren om data uit SAP te halen. Zoek eens op CDS Views of vraag aan je IT afdeling. Je kunt met Eclipse een verbinding leggen met SAP tabellen en koppelen via SQL (in Eclipse als tussenprogramma). Vervolgens kun je deze tabellen overzetten naar een datawarehouse via Azure Synapse.

Zodra je het in Azure hebt, kun je de data simpelweg ophalen via Power Query, waar je vervolgens verder kunt transformeren naar wens.

Het vergt zeker uitzoekwerk maar het is het waard (elk veld in SAP kun je geautomatiseerd ophalen)
 
Maar het zou zo kunnen..

Code:
Sub jec()
 Dim it
 For Each it In Workbooks
   If it.Name <> ThisWorkbook.Name Then
     Application.DisplayAlerts = False
     Workbooks(it.Name).SaveAs "C:\Temp\book1.xlsx", 51
     Application.DisplayAlerts = True
     Exit For
   End If
 Next
End Sub

Dit werkt, zou je er ook nog aan toe kunnen voegen dat het bestand dat hiermee hernoemd wordt naar Book1.xlsx afgesloten wordt ? ? ?
 
wat ik eigenlijk wil, is het bestand hernoemen naar Book1.xlsx (wat werkt met de opgegeven code), daarna data uit het bestand Book1.xlsx overzetten/kopieeren naar het andere bestand, en dan Book1.xlsx sluiten !
 
bvb

Code:
Sub jec()
 Dim it, ar
 For Each it In Workbooks
   If it.Name <> ThisWorkbook.Name Then
     With Workbooks(it.Name)
       Application.DisplayAlerts = False
       .SaveAs "C:\Temp\book1.xlsx", 51
        ar = .Sheets(1).UsedRange
        ThisWorkbook.Sheets.Add.Cells(1).Resize(UBound(ar), UBound(ar, 2)) = ar
       .Close 0
       Application.DisplayAlerts = True
       Exit For
     End With
   End If
 Next
End Sub
 
Terug
Bovenaan Onderaan