[XL97] data formulier opslaan in ander bestaand bestand *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben bezig om een formulier te maken in excel (97), hierbij loop ik tegen het volgende probleem aan.
Het formulier wordt opgeroepen uit excelbestand 1 en bij het opslaan moet de data van de formulier opgeslagen worden in excelbestand 2. Hierbij moet de gebruikers geen last hebben dat excelbestand 2 tevoorschijn komt. Excelbestand 1 is een gedeelde bestand. Meerdere gebruikers zouden via het formulier tegelijkertijd data wegkunnen schrijven in excelbestand 2. Ik ben zelf niet zo ervaren met VBA, voor de formulier heb ik een code gevonden om het bestand weg te schrijven, maar deze schrijft de data weg in hetzelfde excelbestand als waar het formulier in is gebouwd.

De volgende code heb ik gebruikt en enigzins aangepast voor de knop toevoegen op mijn formulier. Alleen bij het drukken op de knop wil ik dat de data wordt opgeslagen in excelbestand 2. Hopelijk dat jullie mij hiermee kunnen helpen. Alvast bedankt!
-------------------------------------------------------------------
Private Sub cmdAdd_Click()
Dim lRow As Long
Dim ws As Worksheet
Set ws = Worksheets("PartsData")

Application.ScreenUpdating = False

'find first empty row in database
lRow = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row

'copy the data to the database
With ws
.Cells(lRow, 1).Value = Me.cboPart.Value
.Cells(lRow, 2).Value = Me.cboLocation.Value
.Cells(lRow, 3).Value = Me.cboAnker.Value
.Cells(lRow, 4).Value = Me.cboSubanker.Value
.Cells(lRow, 5).Value = Me.cboReden.Value
.Cells(lRow, 6).Value = Me.cboRedenaantekening.Value
.Cells(lRow, 7).Value = Me.txtDate.Value

End With

'clear the data
Me.cboPart.Value = ""
Me.cboLocation.Value = ""
Me.cboAnker.Value = ""
Me.cboSubanker.Value = ""
Me.cboReden.Value = ""
Me.cboRedenaantekening.Value = ""
Me.txtDate.Value = Format(Date, "Medium Date")
Me.cboPart.SetFocus
Application.ScreenUpdating = True
MsgBox "De gegevens zijn toegevoegd!"
Unload Me
End Sub
------------------------------------------------------------------
PS ik zie dat jullie de VBA codes anders weergeven, hoe kan ik dat doen?

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

offtopic:
VBA-weergave: zie Forum FAQ / Overzicht van UBB-codes, zet het tussen [ code=vbs ] .. [ /code ] tags.

Ik zet trouwens even Excel in de topictitel en maak daar van apslaan, opslaan.
En je wilt toch echt een keer kijken naar een iets nieuwere versie van Office. Zonde om te leren op basis van die oude versie als je weet dat je kennis al verouderd is voor je het hebt aangeleerd ;)


Ik durf niet meer te zeggen of mijn XL2k3/2k7-kennis nog voldoet voor XL97 dus ik durf geen antwoord te geven.. Het makkelijkste wat je kunt doen is de macro-opneemknop gebruiken en het dan met de hand doen. Daarna kijken hoe de code er uit ziet.
Maar bijv. [google=excel save in another workbook] geeft ook wat tips, zoals http://www.excelforum.com...-in-another-workbook.html

Dan zie je de andere sheet wel. Dat kan je verbergen met application.visible = false (zie bijv. http://www.excelforum.com...workbook-keep-hidden.html).

Aangezien je aangeeft geen VBA-ervarnig te hebben: backup backup backup, test test test, maak jezelf eerst de basics eigen en zorg dat je alle code die je overneemt snapt.

Overigens vraag ik me af of Excel wel de juiste tool is voor zoiets, als je het bij Office wil houden: kan je niet beter bijv. Access als 'onderlaag' nemen?

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


Acties:
  • 0 Henk 'm!

  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Verwijderd schreef op maandag 21 juni 2010 @ 10:08:
PS ik zie dat jullie de VBA codes anders weergeven, hoe kan ik dat doen?
Ik denk dat je dit bedoel:
code:
1
2
3
4
5
6
7
8
9
10
Sub SaveAsExample() 
     
    Dim FName           As String 
    Dim FPath           As String 
     
    FPath = "C:" 
    FName = Sheets("Sheet1").Range("A1").Text 
    ThisWorkbook.SaveAs Filename:=FPath & "\" & FName 
     
End Sub

Dit doe je door hetgeen wat je hier wilt hebben tussen [ code ] .... [ / code ] te zetten (zonder spaties).
In jou code zie ik overigens nergens de SaveAs functie terug komen... verwerk dit voorbeeld dus in je vba code

edit:
owja excel97, ik weet niet of dit toen eral in zat... gebruik anders inderdaad even de record optie.

[ Voor 7% gewijzigd door Rfce op 21-06-2010 11:38 ]

euh...ja


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor jullie reacties. Tot zo ver ben ik er nog niet uitgekomen. Ik heb het bestand op help.mij geplaatst voor diegene die het graag in willen zien

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de code als volgt aangepast, alleen blijft deze steeds een fout geven bij de volgende regel Set ws = Worksheets("Blad1"), Doe ik iets verkeerd?

VBScript:
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
44
45
46
47
Private Sub cmdAdd_Click()
Dim lRow As Long
Dim FName As String
Dim FPath As String
Dim ws As Worksheet
Set ws = Worksheets("Blad1")

FPath = "D:\test.xls"
    FName = Sheets("Blad1").Range("A1").Text
    ThisWorkbook.SaveAs Filename:=FPath & "\" & FName
     
Application.ScreenUpdating = False

'find  first empty row in database
lRow = ws.Cells(Rows.Count, 1) _
  .End(xlUp).Offset(1, 0).Row
  
'check for a part number
If Trim(Me.cboPart.Value) = "" Then
  Me.cboPart.SetFocus
 MsgBox "Geef aan wat voor soort vraag"
  Exit Sub
End If

If Trim(Me.cboLocation.Value) = "" Then
  Me.cboLocation.SetFocus
 MsgBox "Geef aan wat het onderwerp is"
  Exit Sub
End If

'copy the data to the database
With ws
  .Cells(lRow, 1).Value = Me.cboPart.Value
  .Cells(lRow, 2).Value = Me.cboLocation.Value
  .Cells(lRow, 3).Value = Me.txtDate.Value
  
End With

'clear the data
Me.cboPart.Value = ""
Me.cboLocation.Value = ""
Me.txtDate.Value = Format(Date, "Medium Date")
Me.cboPart.SetFocus
Application.ScreenUpdating = True
MsgBox "De gegevens zijn toegevoegd!"
Unload Me
End Sub

[ Voor 0% gewijzigd door F_J_K op 22-06-2010 22:24 . Reden: =vbs ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

een fout
Welke fout precies? En, inkoppertje, heet je worksheet wel "Blad1"?

offtopic:
Zoals je merkt hebben mensen weinig zin om je te helpen als je alleen maar "daar staat mijn bestand, wat nu?" zegt. Hier is eigen inbreng zachtgezegd erg belangrijk: zonder eigen pogingen is men niet geneigd te helpen. Vis geven versus leren vissen, enzo. Ik kan me dus goed voorstellen dat niemand je bestand heeft gedownload...
Dus geef hier altijd aan wat je probeert, waar je vastloopt en waarom je niet verder komt, dan helpen we graag :)

Overigens ben ik zo vrij om even je tags wat aan te passen zodat je code mooi wordt gehighlight en duidelijker is wat wat is.


Even voor de zekerheid: het is ook je bedoeling dat je het document waar je in werkt op te slaan onder een andere naam, en niet een ander document aan te passen? Zo niet moet je je code nog wat aanpassen zodat in een ander bestand een en ander wordt aangepast.
Anders:
dim wb as workbook
Set wb = workbooks.open("F:\bla.xls")
wb.worksheets(1).cells(1, 1) = "foo 2"
etc etc :)

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
F_J_K schreef op dinsdag 22 juni 2010 @ 22:24:
[...]

Welke fout precies? En, inkoppertje, heet je worksheet wel "Blad1"?

Overigens ben ik zo vrij om even je tags wat aan te passen zodat je code mooi wordt gehighlight en duidelijker is wat wat is.
Dankjewel

Ik zie inderdaad dat ik niet helemaal duidelijk ben geweest 8)7

De volgende VBA code had ik aangepast:
VBScript:
1
2
Dim ws As Worksheet
Set ws = Worksheets("PartsData")


aanpast in:
VBScript:
1
2
3
4
5
6
7
8
Dim FName As String 
Dim FPath As String 
Dim ws As Worksheet 
Set ws = Worksheets("Blad1") 

FPath = "D:\test.xls" 
    FName = Sheets("Blad1").Range("A1").Text 
    ThisWorkbook.SaveAs Filename:=FPath & "\" & FName 


Als ik met het formulier op de knop toevoegen klik, blijft de code hangen op de volgende regel:
VBScript:
1
Set ws = Worksheets("Blad1") 


Wat heb ik gedaan, ik heb de code in het bestand, waarin het formulier is verwerkt, aanpast (zeg maar excelbestand 1), Daarnaast heb ik een nieuw bestand aangemaakt waarin de data van de formulier opgeslagen moet worden, op locatie D:\test.xls, waarbij de data weggeschreven moet worden op werkblad blad1. In de regel waar het blijft hangen, staat in de orginele code Partsdata, dit was het werkblad waarin de data van het formulier wordt geplaatst. Ik meende daarom dat deze aangepast moest worden naar het werkblad van het excelbestand waarin ik de data weg wil schrijven. Ik denk dat het probleem is dat ik niet goed weet wat die regel nou precies doet. Spelendewijs kom ik er meestal achter wat een bepaalde regel doet, helaas blijft dit voor mij nog een raadsel, misschien doe ik wel iets helemaal het verkeerd.
F_J_K schreef op dinsdag 22 juni 2010 @ 22:24:
[...]
Even voor de zekerheid: het is ook je bedoeling dat je het document waar je in werkt op te slaan onder een andere naam, en niet een ander document aan te passen? Zo niet moet je je code nog wat aanpassen zodat in een ander bestand een en ander wordt aangepast.
VBScript:
1
2
3
dim wb as workbook
Set wb = workbooks.open("F:\bla.xls")
wb.worksheets(1).cells(1, 1) = "foo 2"
Het bestand waar in gewerkt moet worden en waar ook het formulier in staat (excelbestand 1), moet niet opgeslagen worden. Wel moet de ingevoerde data van het formlier terecht komen in Blad1 van bestand test.xls en deze vervolgens opslaan. Als ik jou goed begrijp zou ik de volgende code in de bestaande code moeten toevoegen. En als ik het goed begrijp is bla.xls het andere bestand, in mijn geval test.xls, die wordt geopent en aangepast met de regel wb.worksheets(1).cells(1, 1) = "foo 2". En als ik het goed begrijp is foo 2, de naam van het werkblad waarin het aangepast moet worden, in mijn geval Blad1. Ik kan momenteel niets uitproberen, ga vanavond weer aan de slag.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Je wilt i.p.v. spelenderwijs uitvinden wat wat doet, dus even per opdracht de F1-teksten lezen. Die zijn behoorlijk uitgebreid, incl. handige voorbeelden :)
Al kan ik me niet herinneren hoe dat in XL97 was, maar volgens mij was het ook 13 jaar geleden al OK. Ik zag in je andere topic dat je op je werk nog met 97 werkt. Suggestie: (probeer de mensen te overtuigen dat het hoog tijd is voor een kleine investering en) probeer thuis of whatever een nieuwere als de documentatie niet voldoet. Trial & error o.b.v. copypaste wat je op het web tegenkomt is in ieder geval onverstandig..

Als je de voorbeelden doorneemt zal je bijv zien dat je Worksheets() het huidige workbook (dus bestand) betreft, en dat mijn "foo 2" voorbeeld dus geen blad maar voorbeeldtekst is.

Pseudocode, te vertalen naar VBA:
wbbron = brondoc (het huidige doc?)
wbdoel = doeldoc openen
wsbron = workboek("juiste naam") van wbbron
wsdoel = workboek("juiste naam") van wbdoel
wsdoel.cells(juiste kolom, juiste rij).value = wsbron.cells(andere juiste kolom, andere juiste rij).value
doeldoc opslaan
doeldoc sluiten
Dan is de volgende stap dit verborgen voor de gebruiker te doen.

Overigens zou ik hier gebruik van Excel dus afraden, maar dat had ik al aangeven. Al is Access 97 gebruiken nog meer af te raden, omdat Access in latere versies volledig is veranderd dus je wilt nu geen moeite steken in ACC97.

[ Voor 29% gewijzigd door F_J_K op 23-06-2010 15:58 ]

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
F_J_K schreef op woensdag 23 juni 2010 @ 15:53:
Je wilt i.p.v. spelenderwijs uitvinden wat wat doet, dus even per opdracht de F1-teksten lezen. Die zijn behoorlijk uitgebreid, incl. handige voorbeelden :)
Al kan ik me niet herinneren hoe dat in XL97 was, maar volgens mij was het ook 13 jaar geleden al OK
Ja, klopt in XL97 staan ook een uitgebreide teksten in met vb, was al druk aan het doorlezen, maar blijft dan nog wel lastig, maar ja veel lezen en door uit te proberen leer ik er steeds weer wat bij.
Ik zag in je andere topic dat je op je werk nog met 97 werkt. Suggestie: (probeer de mensen te overtuigen dat het hoog tijd is voor een kleine investering en) probeer thuis of whatever een nieuwere als de documentatie niet voldoet.
Had je goed gezien, ik probeer ze al tijden aan het verstand te brengen om nieuwere pakket op de PC's te laten zetten, maar ja de baas wil dit niet
Trial & error o.b.v. copypaste wat je op het web tegenkomt is in ieder geval onverstandig.
Bedankt voor de tip
Als je de voorbeelden doorneemt zal je bijv zien dat je Worksheets() het huidige workbook (dus bestand) betreft, en dat mijn "foo 2" voorbeeld dus geen blad maar voorbeeldtekst is.
Ben al weer druk aan het stoeien geweest, ben nu wel zover dat de data van het formulier weg wordt geschreven in het andere bestand, maar naar mijn idee via een behoorlijke omweg. Als ik de omweg niet neem, blijft de code hangen bij het vullen van het formulier. Bovendien moet bij het wegschrijven van het bestand weer terugkomen en het werkblad waarin het formulier staat, dit doet ie momenteel niet. Ik probeer nog maar wat te stoeien en hopelijk dat ik het kan oplossen.
Overigens zou ik hier gebruik van Excel dus afraden, maar dat had ik al aangeven. Al is Access 97 gebruiken nog meer af te raden, omdat Access in latere versies volledig is veranderd dus je wilt nu geen moeite steken in ACC97.
Helaas ben ik toegewezen aan alleen excel, acces hebben wij niet tot onze beschikking.

[ Voor 4% gewijzigd door Verwijderd op 25-06-2010 15:04 ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Het 'oude' document kan je weer naar boven halen met Workbooks("bestandsnaam.xls").Activate

Laat gerust weten als je een volgende versie van je code hebt.
offtopic:
Vat mijn gezeur over oude versies en oneigenlijk gebruik trouwens niet op als negatief, maar als goedbedoelde tips :)

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een andere weggetje genomen naar Rome. ik heb de VBA code zo gelaten zoals die eerder was, zonder dat deze overschakelde naar het andere bestand. ik heb een nieuwe code gemaakt in excelbestand 1, die overschakeld naar excelbestand 2 en vervolgens de vba code opstart in excelbestand 2 waarmee het formulier wordt gestart. Verder heb ik de code voor het toevoegen van de data uit de formulier aangepast zodat deze de data in excelbestand 2 opslaat en vervolgens afsluit. En warempel het werkt :)
Pagina: 1