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

toevoegen faalt bij kopiëren naar opnieuw geopend bestand

Status
Niet open voor verdere reacties.

nonono

Gebruiker
Lid geworden
28 jan 2009
Berichten
289
Ik heb een 2-tal bestanden; Product.xls en Bestelling.xls (beide ReadOnly). Bestelling is standaard het lege invulformulier.
In Product.xls met knop “Zoeken naar” het juiste product kiezen en vervolgens met “Kopieer” naar Bestelling.xls. Als de bestelling klaar is, dan wordt deze opgeslagen met bestandsnaam uit “C1” (Klantnaam; bijv. Jaap),
Probleem: Jaap.xls openen en vervolgens nog een product aan de bestelling toevoegen. Bij “Kopieer” de volgende foutmelding: “Run.time error ‘9’: Subscript out of range” en verwijst naar:
Code:
…
     With Workbooks("Bestelling.xls").Sheets("Bestelling")
…..

uit

Code:
Private Sub CommandButton3_Click()
    CommandButton3.Caption = "Kopieer"
     With Workbooks("Bestelling.xls").Sheets("Bestelling")
        If .Cells(9, 1).Value = "" Then .Cells(9, 1).Value = " "
        .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 5) _
        .Value = Workbooks("Product.xls").Sheets("Product").Cells(ActiveCell.Row, 1).Resize(, 5).Value
        .Cells(9, 1).Value = ""
     End With
End Sub

En dit lukt inderdaad niet. Wat is nodig om aan het bestand Bestelling.xls toe te voegen, zodat naderhand aanvullingen aan Jaap.xls mogelijk zijn?

Bij voorbaat dank,

Groet Nono

Bekijk bijlage Product.xls

Bekijk bijlage Bestelling.xls
 
Laatst bewerkt:
Zolang alleen Product.xls en Bestelling.xls geopend zijn, dan gaat alles goed:

- in Product.xls kun je het product selecteren en naar bestelling kopiëren. Met “Ga naar Bestelling” kun je de bestelling bekijken.
- in Bestelling.xls vervolgens de hoeveelheid aangeven om een totaalprijs te berekenen. Is de bestelling nog niet compleet, dan ga je terug naar Product.xls om meer producten toe te voegen.
- Tot hier gaat alles goed
- De bestelling is klaar en bij klant (C1) wordt de naam ingevuld bijv. Jaap. Met “Opslaan” krijgt de bestelling daarmee de naam Jaap.xls

Wil je nu alsnog een product aan Jaap.xls toevoegen, dan lukt dit niet omdat volgens de VBA code naar Bestelling.xls gezocht wordt.

Is dit met een “IF …. THEN” of zoiets op te lossen?

Groet Nono
 
ik neem aan dat het probleem is dat het bestand nu jaap.xls heet na de saveas, ipv bestelling.xls ?

je kunt een object naar de juiste file laten verwijzen en dan het object aanspreken, maar ik weet zo even niet of je zo'n object persistent kunt maken door het bijvoorbeeld op te slaan. Indien je op de produkt sheet weet dat "jaap" de klant is kan je waarschijnlijk wel door de geopende excel workbooks lopen totdat je workbook jaap.xls hebt gevonden.

Anders kun je misschien proberen of je de naam van de file weer naar bestelling.xls kunt veranderen na de saveas (mogelijk met een tweede saveas, maar ik verwacht dat er een makkelijkere manier is).

Helaas kan ik momenteel het nu niet testen, maar misschien helpt dit met zoeken.
 
Inderdaad. Bestelling.xls is het standaardformulier en ter afsluiting wordt de bestelling opgeslagen met een klantnaam.

Ik begrijp je gedachte. Op het moment dat je in Product.xls op kopieer klikt, dan moet een “window” verschijnen met geopende xls-bestanden waaruit je zou kunnen kiezen. Kllopt dit?
Maar ik weet niet hoe dit in z´n werk gaat.

In ieder geval bedankt.

Groet Nono
 
Ik heb het even getest, met een object kun je producten blijven toevoegen (ook na saven), zolang je niet op stoppen drukt of de file afsluit. Indien je ook een reeds afgeloten bestelling wilt kunnen laden en veranderen zul je inderdaad een soort pull-down moeten nemen.

Je kunt hier een listbox voor nemen en die koppelen aan een range. De range kun je vullen met bijvoorbeeld een sheet activate:

Code:
Private Sub Worksheet_Activate()

    For i = 1 To Application.Workbooks.Count
        Cells(i, 7).Value = Application.Workbooks(i).Name
    Next i
  
End Sub
 
Dit klopt. Je kunt de file saven en daarna produkten toevoegen zolang de naam van de file niet gewijzigd is. Maar dit kan alleen zolang de naam “Bestelling” blijft.

Hoe koppel ik deze listbox aan de kopieer code in post #1? Bij kopieer wordt eerst gezocht naar Bestelling.xls en als deze niet gevonden wordt, dat dan een keuze gemaakt kan worden in de listbox van geopende geopende bestanden? Bijv. Jaap.xls

Groet Nono
 
zoals in mijn vorige post stond: met object werkt het ook NA saven (met andere naam) :)

plaats dit in je general/declarations:

Code:
Dim hetboek As Object

aan het einde van CommandButton1_click() plaats:
Code:
Set hetboek = Application.Workbooks("bestelling.xls")

bij button 3 gebruik:
Code:
With hetboek.Sheets("Bestelling")

bij commandbutton4 gebruik:
Code:
hetboek.Activate

je kunt nu saven en toch bijplaatsen

*edit*voor de pulldown

koppel de keuze van de pulldown aan een cell (bijvoorbeeld A1)
vervolgens kun je zo met een button de het juiste book koppelen:
Code:
If Cells(1, 1).Value <= Application.Workbooks.Count Then
    If Workbooks(Cells(1, 1).Value).Name <> "Product.xls" Then
        Set hetboek = Workbooks(Cells(1, 1).Value)
        'hetboek.Activate 'even testen of het werkt..
    Else
        MsgBox ("u kunt niet Product.xls als target selecteren")
    End If
Else
    MsgBox ("geselecteerde item bestaat niet")
End If

je kunt ook op dezelfde manier door de aanwezige workbooks.name lopen en kijken of bestellen.xls er tussen staat
 
Laatst bewerkt:
Ik heb de codes toegevoegd, maar ik kom niet verder.
Ik heb een bestelling ingevoerd en op geslagen als Jaap.xls
Vervolgens in Jaap.xls gekozen Ga naar product.
Bij kopiëren gaat het naar Bestelling.xls. Als Bestelling.xls afgesloten is, dan gaat het fout. Debug blijft steken bij kopieer code
Code:
With hetboek.Sheets("Bestelling").

Helaas
 
als ik straks even tijd heb zal ik mijn sheets uploaden. bij mij werkt het. produkten kopieren, saven als jaap.xls en dan verder producten toevoegen.
 
Dit werkt bij mij (office 2010 trial). Een en ander is nog niet weggewerkt, maar volgens mij lost dit het probleem op en laat je ook toe oude files te bewerken.

LET WEL: er zit geen beveiliging in, dus het is heel goed mogelijk willekeurige excel files te vernielen als je ze koppeld :eek:
 

Bijlagen

En bij mij werkt het ook in Office 2003. Geweldig!! :thumb: :thumb:

Ik dank je heel hartelijk voor je inspanningen.

Groet Nono
 
Toch nog even een aanvullende vraag omtrent de listbox en de knop koppelen.
De andere knoppen heb ik gemaakt met:
View – Toolbars – Control Toolbox – Command Button. Daarna klik op Design Mode en de cursor verandert in een kruis. Ik kan op een knop rechts klikken en de eigenschappen bekijken.
Met de knop “Koppel” lukt dit niet. Langs welke weg heb je deze knop gemaakt?
Ik heb in de VBA code gekeken, maar daar vind ik niets terug.

Groet Nono
 
De knop is gemaakt via dezelfde procedure, maar in office 2010. Geen idee waarom deze knop anders zou zijn, tenzij het een hogere versie van COMCTRL zou zijn oid.

Volgens mij moet je de knop gewoon kunnen deleten en weer een nieuwe invoegen, de macro die gekoppeld is aan de knop kun je gewoon hergebruiken. Backwards compatability issue, geen hogere VBA magie van mijn kant :P
 
Ik heb via macros/delete de macro verwijderd.
Met Toolbox nieuwe knop aangemaakt: Koppelen CommandButton5)
Code uit oude Sub Button12 toegevoegd:
Code:
Private Sub CommandButton5_Click()
If Cells(16, 10).Value <= Application.Workbooks.Count Then
    If Workbooks(Cells(16, 10).Value).Name <> "Product.xls" Then
        Set hetboek = Workbooks(Cells(16, 10).Value)
        'hetboek.Activate 'even testen of het werkt..
    Else
        MsgBox ("u kunt niet Product.xls als target selecteren")
    End If
Else
    MsgBox ("geselecteerde item bestaat niet")
End If
End Sub
Vervolgens in:
Product.xls : Ga naar Bestelling en geeft foutmelding:
..........Debug: hetboek.Activate (commandButton4)
Bestelling.xls : Ga naar product : OK

Het gaat dus fout met de nieuwe knop. Geen idee waarom.
 
Sorry voor het voorgaande bericht. Een foutje bij de knop,

Het gaat dus wel goed!!!

Groet Nono
 
Nog even een vraag over de List Box in Product.xls..
Onder Format Control / tab Control / Cell link staat aangegeven: $J$16 en in J16 staat de waarde 1.
Wat betekent dit?

Groet Nono
 
Het betekend dat de eerste keuze uit het lijstje is geselecteerd. Daar de volgorde van de lijst overeen komt met de interne volgorde van excel, kun je met dat getal beslissen welke excel file je wil koppelen aan je product sheet.

het getal wordt vervolgens hier gebruikt (in de button)

Code:
Set hetboek = Workbooks(Cells(16, 10).Value)

16,10 = J16
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan