Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA / XL2003] txt file importeren

Pagina: 1
Acties:

  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
Ik wens een txt document als external data toe te voegen aan mijn excel sheet.
Ik wil dat mijn macro vraagt om te browsen naar het bestand en dan verder draait.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub CommandButton1_Click()
 With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Documents and Settings\jonbeton\Desktop\fileout.txt", Destination:= _
        Range("A2"))
        .Name = "data_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub


Dus in plaats van een vaste locatie een variabele locatie.

Vervolgens heb ik ook een commandbutton om alles weer te wissen
code:
1
2
3
4
5
6
7
Private Sub Commandbutton2_Click()
    Range("A2").Select
    Application.Goto Reference:="data_1"
    Selection.ClearContents
    Selection.QueryTable.Delete
    Range("A2").Select
End Sub


Nu viel het mij ook op dat "data_1" soms wijzigde naar data_2 waardoor de referentie niet meer klopte. Wat moet ik aan code wijzigen zodat het zou werken zoals ik wens?

Edit:Topic titel vergeten :F
Edit 2:
code:
1
2
3
4
5
6
7
8
9
Dim fn
fn = Application.GetOpenFilename
If fn = False Then
    MsgBox "Geen bestand geselecteerd"
    Else
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & fn, Destination:= _
        Range("A2"))
        ...


dit loste het browse probleem op. En dan is er nog:

code:
1
2
3
.Name = "data_1"
en
Application.Goto Reference:="data_1"

Die een run-time error 1004 genereert "Reference is not valid" Hoe kan ik dit omzeilen?

[ Voor 23% gewijzigd door Jericho NutS op 26-04-2011 10:00 . Reden: Topic titel ]

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Als data_1 niet als benoemd bereik bestaat zal je inderdaad een 1004 krijgen. Het bereik data_1 moet zijn gedefinieerd voor je Application.Goto Reference:="data_1" kunt gebruiken.

data_1 vs data_2: het is een bereik dat je zelf benoemt en definieert. Die kan je elke naam geven, zolang het maar uniek is (en misschien geen al te rare tekens bevat). En als de naam al bestaat wil je die even verwijderen met .Delete. Wat gaat er fout bij het definieren van de naam?

offtopic:
Waarom gebruik je Goto en Select? Misschien ook handig om namen/beschrijvingen minder generiek te maken. Dus geen data_1 en Commandbutton2, maar mijnImportgegevens en knopWissen.

[ Voor 0% gewijzigd door F_J_K op 26-04-2011 11:01 . Reden: ugh dtdtd ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
Bedankt voor de titel fix

Dus voor ik
Application.Goto Reference:="data_1"
oproep moet ik ervoor zorgen dat de naam gedeleted wordt.
Toch niet helemaal mee hoe ik mijn code moet aanpassen om ervoor te zorgen dat ik steeds met dezelfde referentie werk voor het inladen van de data en het terug wissen ervan.

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Je laatste zin snap ik niet. Over de rest: nee de naam moet juist wel bestaan voor je er naar kunt verwijzen, maar precies eenmaal.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
Ik bedoel ermee dat ik wil vermijden dat excel de .name "data_1" begint te wijzigen naar data_2, data_3... Dus hoe zorg ik er nu voor dat die naam precies eenmaal bestaat en uniek is en blijft.

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Zelf aanmaken met bovenstaande code in je eigen topicstart? En als niet meer in gebruik verwijderen. In je eigen code kan je indien nodig ook nog een check opnemen of een bepaalde naam al bestaat (ActiveWorkbook.Names geeft de lijst van alle namen in dat workbook, die kan je dan in een loopje allemaal langslopen).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jericho NutS
  • Registratie: Februari 2008
  • Laatst online: 01-12-2024
F_J_K schreef op dinsdag 26 april 2011 @ 11:00:
...En als de naam al bestaat wil je die even verwijderen met .Delete. ...
Hoe en waar? in macro van commandbutton 1 of commandbutton 2 Mijn VBA kennis reikt hoogstwaarschijnlijk niet zo ver als de jouwe bedankt voor de replies!

code:
1
2
3
4
5
6
7
8
Private Sub Commandbutton2_Click()
    Range("A2").Select
    Application.Goto Reference:="data_1"
    Selection.ClearContents
    Selection.QueryTable.Delete
    Selection.Delete
    Range("A2").Select
End Sub


door dit eraan toe te voegen kon ik het probleem niet reproduceren maar wordt er wel teveel gewist. Ik vraag me nu wel nog steeds af of dit de oplossing is die je voorstelde.

[ Voor 38% gewijzigd door Jericho NutS op 27-04-2011 12:42 ]

I7 920 D0 @ 4,0 / Asus P6T Deluxe V2 / 3x2 GB OCZ Gold @ 1600 C8 / HD5770 1 GB Sapphire / 2x Spinpoint F3 1TB (raid1) / Scythe Mugen 2 / Antec 300 / CM real power 620M / Dell 2408


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Nu verwijder je de inhoud ipv (ook) 'onder water' de naam.

Ik noemde ActiveWorkbook.Names, "dus" je wilt ActiveWorkbook.Names(1).Delete doen. Maar natuurlijk niet perse (1), check dat je de goede neemt.

Je wilt steeds eerst zien hoe een bepaalde functie / object / etc werkt voor je het gebruikt: de F1-teksten zijn wat dat betreft al heel goed. Oefen ook buiten je 'productie'-code. Een beetje afstand nemen kan nooit kwaad, zeker als je er nog weinig ervaring mee hebt. Wat dat betreft zou de macro-opneemknop verboden moeten zijn voor productiecode ;)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)

Pagina: 1