[vba in excel]sluiten workbook

Pagina: 1
Acties:
  • 854 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
hier in het bedrijf word veel in een sql database bijgehouden.
soms worden daar gegevens van ge-exporteerd en die worden in een excel sheet bijgehouden.
nu is het zo dat je eerst het bestand moet selecteren wat je in excel wilt hebben(zijn allemaal tekstbestanden en dit werkt allemaal nog)
maar na het kopieren van de gegevens wil ik dat het exportbestand automatisch sluit.
maar omdat het allemaal met een macro is gemaakt kom ik bij het sluiten op een fout omdat dat werkblad niet geopend is natuurljik toen de macro gemaakt was.

nu wil ik het zo maken (maar kom er juist niet uit).
dat bij het sluiten het workbook van het exportbestand sluit en dat ie die naam dus automatisch pakt
ik ben echt slegt in uitleggen dus ik zal de code wel even plaatsen dan word het allmeaal veel duidelijker

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
32
33
34
35
36
Sub export()
'
' export Macro
' De macro is opgenomen op 21-9-2004 door Nick.
'
' Sneltoets: CTRL+SHIFT+E
'

    Selection.End(xlDown).Select
    Range("A326").Select
    ChDir "G:\export"
    mijnbestand = Application.GetOpenFilename("alle bestanden, *.*")
    Workbooks.OpenText Filename:=mijnbestand, Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
        Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array( _
        3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10 _
        , 1), Array(11, 1), Array(12, 1), Array(13, 1))
    Windows("Forcasting Buying Planning S'05.xls").Activate
    ActiveWindow.SmallScroll Down:=6
    Windows("dat export bestand maar dat bestand is iedere keer een andere naam dus loopt ie hier al in de soep   .txt").Activate
    Range("A2:L11").Select
    Selection.Copy
    Windows("Forcasting Buying Planning S'05.xls").Activate
    Range("B326").Select
    ActiveSheet.Paste
    Range("M326:M335").Select
    Application.CutCopyMode = False
    Selection.Cut
    ActiveWindow.LargeScroll ToRight:=1
    Range("U326").Select
    ActiveSheet.Paste
    Range("b336").Select
    Windows("hier staat normaal altijd de naam van het bestand van topen de macro was opgenomen en die moet dus gewijzigd worden in iets 8)7  .txt").Activate
    ActiveWindow.Close
End Sub


ik hoop een beetje duidelijkheid te kunnen brenge in mijn vaag verhaal

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 02:49
Wat je wilt is een verwijzing aanleggen naar het geopende tekstbestand.
Dat kan o.a. zo:
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
32
33
34
35
36
37
38
39
40
41
42
Sub export()
'
' export Macro
' De macro is opgenomen op 21-9-2004 door Nick.
'
' Sneltoets: CTRL+SHIFT+E
'
Dim exportbestand as workbook

    Selection.End(xlDown).Select
    Range("A326").Select
    ChDir "G:\export"
    mijnbestand = Application.GetOpenFilename("alle bestanden, *.*")
Set exportbestand = Workbooks.OpenText Filename:=mijnbestand, _
    Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
        Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array( _
        3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10 _
        , 1), Array(11, 1), Array(12, 1), Array(13, 1))
    Windows("Forcasting Buying Planning S'05.xls").Activate
    ActiveWindow.SmallScroll Down:=6
    'deze regel weg Windows("").Activate
exportbestand.activate
    Range("A2:L11").Select
    Selection.Copy
    Windows("Forcasting Buying Planning S'05.xls").Activate
    Range("B326").Select
    ActiveSheet.Paste
    Range("M326:M335").Select
    Application.CutCopyMode = False
    Selection.Cut
    ActiveWindow.LargeScroll ToRight:=1
    Range("U326").Select
    ActiveSheet.Paste
    Range("b336").Select
'deze regel weg    Windows"save de layout".Activate
'deze regel weg    ActiveWindow.Close
exportbestand.saved = True 'je zegt Excel dat het bestand gesaved is. 
    'Is niet zo, maar dat weet Excel niet.
exportbestand.close
End Sub


Je kan trouwens zo ook code opnemen om je eigen werkboek aan te duiden.
code:
1
2
dim mijnwb as workbook
set mijnwb = Workbooks("Forcasting Buying Planning S'05.xls")

Acties:
  • 0 Henk 'm!

Anoniem: 113297

minstens excel 2000 benodigd voor de instrrev functie.
voeg het volgende toe:
code:
1
2
3
4
5
6
7
8
'mijnbestand=appli...
workbooksindex=right(mijnbestand,instrrev(mijnbestand,"\"))
'...
'geopend bestand opnieuw activeren:
workbooks(workbooksindex).activate
'....
'geopend bestand sluiten
workbooks(workbooksindex).close false


ik ga niet verder op de opgenomen macrocode in die natuurlijk sterk verbeterd zou kunnen worden als je ze zelf zou schrijven

Acties:
  • 0 Henk 'm!

Anoniem: 113297

[quote]onkl schreef op 21 september 2004 @ 10:20:
Wat je wilt is een verwijzing aanleggen naar het geopende tekstbestand.
Dat kan o.a. zo:
code:
1
2
3
4
5
6
7
8
9
10
11
Sub export()
'
' export Macro
' De macro is opgenomen op 21-9-2004 door Nick.
'
' Sneltoets: CTRL+SHIFT+E
'
Dim exportbestand as workbook

 
Set exportbestand = Workbooks.OpenText Filename:=mijnbestand, _


dit zal niet werken helaas, de opentext methode staat niet toe het geopend bestand rechtstreeks aan een objectvariabele toe te wijzen.

Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
ik heb het nu op een andere manier gedaan
in het exportbestand was maar 1 sheet aanwezig
die heb ik naar de andere werkmap gesleept zodat het export workbook automatisch sluit. daarna gegevens in database geimporteerd en de sheet verwijderd.

maar nu een totaal ander probleem(hoor het wel als ik ene nieuw topic moet openen van de mods)

nu worden de sheets al een aantal x geselecteerd.
maar dus nog steeds met de bestandsnaam die in de macro gebruikt is.
kan het niet zo dat als ik het export bestand open ik die sheet automatisch een standaard naam geef zodat ik in de verwijzingen alleen die standaard naam geef?
is dat misschien mogeljik en hoe???

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 02:49
Welke sheets?
Welke bestandsnaam?

TS, je zag dat zowel _heretic_ als ik iets deden wat in VBA (en in vrijwel alle programeertalen) erg belangrijk is.
We probeerden iets (in dit geval je exportbestand) een naam te geven of i.i.g. er een standaard verwijzing naartoe te maken. De macrorecorder van Excel is een leuk ding, maar als je iets gecompliceerders wilt doen, zal je toch echt moeten typen in de code zelf.

Hieronder staat nog een keer de code die ik voorstel, maar nu gecorrigeerd naar de tip van _heretic_ (thanks, die kende ik nog niet)
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
32
33
34
35
36
37
38
39
40
41
42
43
Sub export()
'
' export Macro
' De macro is opgenomen op 21-9-2004 door Nick.
'
' Sneltoets: CTRL+SHIFT+E
'
Dim exportbestand as workbook

    Selection.End(xlDown).Select
    Range("A326").Select
    ChDir "G:\export"
    mijnbestand = Application.GetOpenFilename("alle bestanden, *.*")
Workbooks.OpenText Filename:=mijnbestand, _
    Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
        Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array( _
        3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10 _
        , 1), Array(11, 1), Array(12, 1), Array(13, 1))
Set exportbestand = ActiveWorkbook
    Windows("Forcasting Buying Planning S'05.xls").Activate
    ActiveWindow.SmallScroll Down:=6
    'deze regel weg Windows("").Activate
exportbestand.activate
    Range("A2:L11").Select
    Selection.Copy
    Windows("Forcasting Buying Planning S'05.xls").Activate
    Range("B326").Select
    ActiveSheet.Paste
    Range("M326:M335").Select
    Application.CutCopyMode = False
    Selection.Cut
    ActiveWindow.LargeScroll ToRight:=1
    Range("U326").Select
    ActiveSheet.Paste
    Range("b336").Select
'deze regel weg    Windows"save de layout".Activate
'deze regel weg    ActiveWindow.Close
exportbestand.saved = True 'je zegt Excel dat het bestand gesaved is. 
    'Is niet zo, maar dat weet Excel niet.
exportbestand.close
End Sub

Copypaste dit eens over je bestaande code (of een kopie ervan :) ) en kijk wat er gebeurd.
(De aanpassingen hierin verdienen geen schoonheidsprijs, maar waarschijnlijk is dit de makkelijkste manier.)
Pagina: 1