• 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.

Vaste tabelnaam voor nieuw te importeren XML tabel/gegevens

Status
Niet open voor verdere reacties.

Paradoxx

Gebruiker
Lid geworden
2 nov 2007
Berichten
135
Goedemiddag,

onze nieuwe tarreerlijn genereert XML data per behandeld monster. Aangezien dit in een testfase zit, komt nog niet alle data direct binnen op het systeem. Hiervoor hebben we een bestand gemaakt zodat de die data uit het XML bestand wat voor onze afdeling zinvol is, van het betreffende monster, duidelijk en leesbaar in een overzichtje wordt gezet.
Vanwege het feit dat het een testfase is, zullen de headers van het XML bestand wel eens kunnen veranderen. Ik wil dus bij de import een compleet nieuwe tabel willen importeren, en niet opnieuw data wegschrijven in een reeds bestaande tabel.
Hoe kan ik er voor zorgen dat wanneer ik een XML bestand importeer, dit altijd onder dezelfde tabelnaam gebeurd, zodat de VBA-code blijft werken.

Onderstaand mij VBA code... in de bijlage een bestand met fictieve testgegevens.
(vergeef me voor de wellicht te uitgebreide code,... ik sta open voor verbeteringen)

Code:
Sub ImportXML()

Dim fdgOpen As FileDialog
Set fdgOpen = Application.FileDialog(msoFileDialogOpen)
fdgOpen.Title = "Kies een XML bestand..."
fdgOpen.InitialFileName = "N:\Tarreer-Kwaliteitslijn\Rest\"
fdgOpen.Show

Application.DisplayAlerts = False
Application.ScreenUpdating = False

    
    Sheets("Import XML").Select
    Range("Tabel1[[#Headers],[Type_monster]]").Select        'Wanneer ik helemaal een nieuwe XML tabel importeer, is dat niet meer "Tabel1", maar Tabel5 ofzo...  hoe kan ik dit ondervangen??
    ActiveWorkbook.XmlMaps("Monster_toewijzing").Import URL:=fdgOpen.SelectedItems(1)      
    
   
    Sheets("Omrekentabel").Select
    ActiveSheet.Unprotect
    Sheets("Import XML").Select
    Range("Tabel1[[#Headers],[Type_monster]]").Select
    Range("Tabel1[[#Headers],[Ondermaat]]").Select
    Selection.End(xlDown).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Omrekentabel").Select
    Range("A4").Select
    ActiveSheet.Paste
    Range("A4").Select
    Application.CutCopyMode = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    
    'evt correctie uit vorige import verwijderen
    Sheets("Tarreerrapport").Select
    Range("I3:I8").Select
    Selection.ClearContents
    Range("I13").Select
    Selection.ClearContents
    Range("I17:I19").Select
    Selection.ClearContents
    Range("I21").Select
    Selection.ClearContents
    
    Sheets("Proefrooi").Select
    Range("I3:I8").Select
    Selection.ClearContents
    Range("I10:I11").Select
    Selection.ClearContents
    Range("I16").Select
    Selection.ClearContents
    Range("I23:I25").Select
    Selection.ClearContents
    Range("I27").Select
    Selection.ClearContents

Sheets("Import XML").Select
If Range("A2") = "Rooi" Then
Sheets("Proefrooi").Select
Else
Sheets("Tarreerrapport").Select
End If


Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
 

Bijlagen

Plaats ook een .XML voorbeeld. Alle selects en slections kan je beter weglaten. Uit de code kan ik niet opmaken wat er moet gebeuren. Het beveiligen lijkt mij in deze fase ook vrij onzinnig.
 
Laatst bewerkt:
Plaats ook een .XML voorbeeld. Alle selects en slections kan je beter weglaten. Uit de code kan ik niet opmaken wat er moet gebeuren. Het beveiligen lijkt mij in deze fase ook vrij onzinnig.

De gegevensuitwisseling tussen tarreerlijn en systeem is in testfase, de tarreeruitslagen zijn gewoon goed. Ik ben niet degene die met het bestand werkt, dus om onbedoelde wijzigingen in de tabbladen te voorkomen staat de beveiliging aan.

** Wat er gebeurd is dat een gebruiker de macro start, en uit de map een .xml bestand importeert. In deze opzet wordt de tabel waarin de xml wordt geïmporteerd leeggehaald, en de nieuwe data wordt in dezelfde oude tabel weggezet. Probleem waar ik nu tegenaan loop is dat nieuwe headers niet als nieuwe kolommen worden toegevoegd. Ik moet dus de aanwezige tabel verwijderen en een helemaal nieuwe tabel importeren. Hierdoor wijzigt de naam van de tabel, en wordt dus "tabel??" in plaats van "tabel1".
Mijn vraag is dus,.. hoe kan ik ervoor zorgen middels een code, dat de naamgeving van de tabel altijd hetzelfde is...**
 
Je kan de tabelnaam toch aanpassen?
Code:
Sheets("Import XML").ListObjects(1).name = "Table1"

Zonder gebruik te maken van alle selects en met het gebruik van het indexnummer van de tabel alleen het stukje om te kopiëren.
Code:
Sub VenA()
  Sheets("Omrekentabel").Unprotect
  With Sheets("Import XML").ListObjects(1)
    c = Application.Match("Ondermaat", .HeaderRowRange, 0)
    r = .Range.Cells(1, c).End(xlDown).Row
    .Range.Cells(r, c).Resize(.ListRows.Count - r + 2, 4).Copy Sheets("Omrekentabel").Range("A4")
  End With
  Sheets("Omrekentabel").Protect
End Sub
 
Ik ga hem even uitproberen morgen,.. heb er vandaag helaas geen tijd voor gehad...
Alvast bedankt voor de genomen moeite!

*edit*

Bedankt voor de hulp,.. het werkt. Komt wel een ander probleem uit voort... Celverwijzing in de formules welke in de tabbladen Tarreerrapport en Proefrooi past zich aan, zowel de relatieve als de absolute celverwijzing. Dat kan ik wel oplosen in de code door de cellen opnieuw namen te geven en in de formules hiernaartoe te laten verwijzen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan