Userform: bij geen waarde niet kopieren

Status
Niet open voor verdere reacties.

hendriks245

Gebruiker
Lid geworden
23 mrt 2007
Berichten
50
Hallo,

Ik heb in VBA een userform gemaakt met daarin een aantal invulmogelijkheden, deze worden naar een ander tabblad gekopieerd na op OK te klikken met de volgende code:

Code:
Private Sub project_Click()
 With Sheets(Sheets.Count)
      .Range("F7") = TextBox1.Text
      .Range("F8") = TextBox2.Text
 End With
Unload Me
End Sub

Nu wil ik dat als er in bijvoorbeeld textbox 1 niets in ingevuld deze ook niet wordt gekopieerd en gewoon overslaat, maar alleen textbox 2 kopieert. Kan dit?

Alvast bedankt voor de reactie!
 
Laatst bewerkt door een moderator:
Als de textbox1 leeg is heb je toch ook niets om weg te schrijven.
Of bedoel je iets helmaal anders?
 
Dat klopt, maar toch doet excel dat dan wel, omdat het in de code staat. Het gevolg is dus dat alle velden waar niets in staat ook worden gekopieerd naar het tabblad,waardoor het vrij lang duurt. Ik zou deze tijd graag willen verkorten door in de code iets te zetten in de trant van "als er een waarde in de textbox staat dan kopieren anders naar de volgende textbox"

Ik hoop dat mijn vraag nu iets duidelijker is...
 
waardoor het vrij lang duurt

Dan is er meer aan de hand dan je vertelt.
Probeer het aantal schrijfbewerkingen tot 1 te beperken met behulp van een array variabele bijvoorbeeld.
 
Laatst bewerkt:
Mijn kennis van VBA is nog beperkt...array variabele?:confused:

Misschien moet ik erbij vermelden dat de code die ik in mijn vraag heb gezet slechts een voorbeeld is. De originele is veel langer, aangezien het een vrij uitgebreide uservorm is met heel veel invoermogelijkheden, die niet allemaal perse ingevuld hoeven te worden.
 
Wil je een mogelijke oplossing zal je toch minstens je hele code moeten posten.
Liefst met het bestand ontdaan van gevoelige gegevens, want aan deze gepostte code zal de vertraging niet liggen.
 
Laatst bewerkt:
Helaas gaat het niet lukken om het bestand te posten (veel te groot), hieronder wel de hele code. Alles wordt dus in de aangegeven cellen gezet, ook al is er niets in de textbox ingevuld.

Heel erg bedankt voor jullie reacties trouwens!

Code:
Private Sub project_Click()
    Sheets("OUTPUT"Visible = True
     Sheets("OUTPUT").Copy After:=Worksheets(Sheets.Count)
      With Sheets(Sheets.Count)
      .Range("F7") = TextBox1.Text
      .Range("F8") = TextBox2.Text
      .Range("F9") = TextBox3.Text
      .Range("F10") = TextBox4.Text
      .Range("K7") = TextBox5.Text
      .Range("D31") = ComboBox1.Value
      .Range("D32") = ComboBox2.Value
      .Range("D33") = ComboBox3.Value
      .Range("D34") = ComboBox4.Value
      .Range("D35") = ComboBox5.Value
      .Range("F31") = ComboBox6.Value
      .Range("F32") = ComboBox7.Value
      .Range("F33") = ComboBox8.Value
      .Range("F34") = ComboBox9.Value
      .Range("F35") = ComboBox10.Value
      .Range("E31") = TextBox11.Text
      .Range("E32") = TextBox17.Text
      .Range("E33") = TextBox18.Text
      .Range("E34") = TextBox19.Text
      .Range("E35") = TextBox20.Text
      .Range("G31") = TextBox21.Text
      .Range("G32") = TextBox22.Text
      .Range("G33") = TextBox23.Text
      .Range("G34") = TextBox24.Text
      .Range("G35") = TextBox25.Text
      .Range("C39") = ComboBox21.Value
      .Range("C40") = ComboBox22.Value
      .Range("C41") = ComboBox23.Value
      .Range("F39") = ComboBox24.Value
      .Range("F40") = ComboBox25.Value
      .Range("F41") = ComboBox26.Value
      .Range("E39") = TextBox27.Text
      .Range("E40") = TextBox28.Text
      .Range("E41") = TextBox29.Text
      .Range("G39") = TextBox30.Text
      .Range("G40") = TextBox31.Text
      .Range("G41") = TextBox32.Text
      .Range("J31") = ComboBox13.Value
      .Range("J32") = ComboBox14.Value
      .Range("J33") = ComboBox15.Value
      .Range("J34") = ComboBox16.Value
      .Range("BC4") = TextBox323.Text
      .Range("AE2") = TextBox219.Text
      .Range("AE3") = TextBox220.Text
      .Range("AD7") = TextBox221.Text
      .Range("AD8") = TextBox222.Text
      .Range("AE8") = TextBox223.Text
      .Range("AE6") = TextBox225.Text
      .Range("AE5") = ComboBox29.Value
      .Range("AG2") = TextBox226.Text
      .Range("AG3") = TextBox227.Text
      .Range("AF7") = TextBox228.Text
      .Range("AF8") = TextBox229.Text
      .Range("AG8") = TextBox230.Text
      .Range("AG6") = TextBox232.Text
      .Range("AG5") = ComboBox30.Value
     End With
Sheets("OUTPUT").Visible = False
Unload Me
End Sub
 
Laatst bewerkt door een moderator:
Je zou me toch eens moeten uitleggen wat er dan wel wordt weggeschreven naar een cel als er niets word ingevuld in de textbox, als die leeg is levert dat toch een lege cel op.
Dit vertraagt de uitvoering niet.

Waar zijn die tussenliggende text- en comboboxen naartoe?

Je kan je bestand Zippen of Rarren of je kan je betsand hier posten:

http://www.mijnbestand.nl/
 
Ik heb de code een klein beetje ingekort:
Code:
Private Sub CommandButton1_Click()
 With Sheets("OUTPUT")
    .Visible = True
    .Copy After:=Worksheets(Sheets.Count)
 End With
 With Sheets(Sheets.Count)
    For i = 7 To 10
        .Cells(i, "F") = Controls("Textbox" & i - 6).Text
    Next
        .Cells(7, "K") = TextBox5.Text
    For i = 31 To 35
        .Cells(i, "D") = Controls("ComboBox" & i - 30).Value
        .Cells(i, "F") = Controls("Combobox" & i - 25).Value
        .Cells(i, "E") = Controls("Textbox" & i - 20).Value
        .Cells(i, "G") = Controls("Textbox" & i - 10).Value
    Next
    For i = 39 to 41
         .Cells(i, "C") =  Controls("Combobox" & i - 19).Value
         .Cells(i , "F") = Controls("Combobox" & i - 15).Value
         .Cells(i, "E") =  Controls("Textbox" & i - 13).Value
        .Cells(i, "G") = Controls("Textbox" & i - 9).Value
   Next
   For i = 31 to 34
       .Cells(i, "J") = Controls("Combobox" & i - 18).Value
   Next
	' .Range("BC4") = TextBox323.Text
	' .Range("AE2") = TextBox219.Text
	' .Range("AE3") = TextBox220.Text
	' .Range("AD7") = TextBox221.Text
	' .Range("AD8") = TextBox222.Text
	' .Range("AE8") = TextBox223.Text
	' .Range("AE6") = TextBox225.Text
	' .Range("AE5") = ComboBox29.Value
	' .Range("AG2") = TextBox226.Text
	' .Range("AG3") = TextBox227.Text
	' .Range("AF7") = TextBox228.Text	
	' .Range("AF8") = TextBox229.Text
	' .Range("AG8") = TextBox230.Text
	' .Range("AG6") = TextBox232.Text
	' .Range("AG5") = ComboBox30.Value
 End With
 Sheets("OUTPUT").Visible = False
 Unload Me
End Sub

Maar waarom dat zo'n chaos is in die benummering is mij een raadsel.
 
@Cobbe

Je kunt ook
Code:
Me("Textbox" & i - 6).Text
gebruiken.
 
@snb, Ja klopt, bedankt voor de tip.
 
Als u aangeeft dat zodra een textbox niet gevuld is met een waarde, dan mag niet gekopieerd worden, dan is het probleem zo opgelost door te zeggen:

''Controleer alle textboxes:

Code:
Dim ctr as control
DIm blnStoppen  as boolean

For eacht ctr in Me.controls

if trim(ctr.text)="" then blnStoppen 

Next

If blnStoppen =true then Msgbox("Kan geen waarden kopieren omdat u vergeten bent een veld in te vullen": exit sub


Dat denk ik hoor.

Grt,

XLFAC
 
Laatst bewerkt door een moderator:
Er wordt niet gevraagd om de input te checken maar om de wegschrijftijd in te korten.
Met de toevoeging om elke textbox te checken op input vertraag je de actie nog meer.

Zolang OP geen voorbeeld bestand wil posten zal hij geen fatsoenlijk antwoord krijgen, vrees ik
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan