Gegevens opslaan

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Ik zit even met iets anders. Het gaat in feite om het zelfde GUI formulier waar ik mee bezit ben. Deze werkt in feite, op een paar kleinigheden na, hoe ik wil dat deze werkt. De kleinigheden worden elders al besproken. Al heb ik dat nog niet werkend gekregen. Ik moet daar kennelijk toch de boel Global zien te krijgen, maar dat staat los van wat ik wil gaan doen.

Het GUI formulier wordt nu nog vanuit tabblad Materiaallijst aangeroepen. Dat wil ik dus niet. Het formulier moet elders zijn op te roepen en dat heb ik werkend gekregen. Alleen waar ik nu op stuit is dat als ik wijzigingen wil doorvoeren het niet krijg doorgevoerd op blad materiaallijst, maar dat de wijzigingen op het actieve blad komt te staan op de rij waar het in de materiaallijst om gaat. Ik heb al 1 en ander omgezet, maar ik neem toch aan dat ik met onderstaande code de wijzigingen normaal in blad materiaallijst moet krijgen.

Ik roep het userform aan vanaf tabblad Opmaak en vraag de gegevens op in tabblad materiaallijst. Deze worden dan keurig op tabblad Opmaak in het userform weergegeven. Zodra ik wijzigingen wil maken dan lukt het niet. Moet ik hier: With Sheets("Materiaallijst") ook nog aanpassen soms?

Code:
Case Is = "Wijzigingen opslaan"
            If TextBox6 = vbNullString Then MsgBox ("U dient een" & Label7.Caption & " in te voeren."), vbExclamation, "Invoerwaarde verplicht": TextBox6.SetFocus: Exit Sub
            If TextBox7 = vbNullString Then TextBox7 = "0.00"
            If Right(TextBox8, 1) = "%" Then TextBox8 = Format(Left(TextBox8, Len(TextBox8) - 1), "0.00")
    
            TextBox8 = IIf(TextBox8 <> vbNullString, Format(TextBox8, "0.00"), "0.00") 'Indien textbox leeg is, wordt deze gevuld met waarde 0,00
            
            Me.Top = "170"

'Gegevens opslaan
      
            With Sheets("Materiaallijst")
                Cells(IT, 1).Resize(, 8) = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, 
                    CDbl(TextBox7), CDbl(TextBox8 / 100)) 'Dit stukje staat in de originele code direct achter TextBox6
            End With
            
'Opmerkingen toevoegen of wissen
            
            Select Case TextBox12.Value
                Case Is = vbNullString
                    Cells(IT, 1).ClearComments
                Case Is = "Geen opmerkingen" 'Voorkomen dat er met deze tekst een opmerking wordt ingevoerd
                    Cells(IT, 1).ClearComments
                Case Else
                    With Cells(IT, 1)
                        .ClearComments 'Indien er in de cel al een opmerking aanwezig is dan eerst deze wissen
                        .AddComment
                        .Comment.Text Text:=TextBox12.Value
                    End With
            End Select
            
            If Frm_Product_1.TextBox1 <> TextBox6.Text Then Frm_Product_1.TextBox1 = TextBox6
    
            For j = 1 To 8
                Me("TextBox" & j).Enabled = False
            Next
            
            Me.TextBox12.Enabled = False
            
            CommandButton2.Enabled = False
    
            Call Frm_Product_1.Gegevens 'Opnieuw gegevens uit database ophalen

            CommandButton1.Caption = "Bewerken"
            
            MsgBox ("Gegevens zijn aangepast en opnieuw geladen."), vbOKOnly, ""
        End Select
            
End Sub

De IT wordt hiermee opgevraagd

Code:
    Dim IT As Long

    If Frm_Product_1.ComboBox1.Value = Tekst_B Then IT = WorksheetFunction.Match(Frm_Product_1.TextBox1.Text, Sheets("Materiaallijst").Columns(3), 0)

    If Frm_Product_1.ComboBox1.Value = Tekst_C Then IT = WorksheetFunction.Match(Frm_Product_1.TextBox1.Text, Sheets("Materiaallijst").Columns(4), 0)

    If Frm_Product_1.ComboBox1.Value = Tekst_D Then IT = WorksheetFunction.Match(Frm_Product_1.TextBox1.Text, Sheets("Materiaallijst").Columns(5), 0)

    If Frm_Product_1.ComboBox1.Value = Tekst_E Then IT = WorksheetFunction.Match(Frm_Product_1.TextBox1.Text, Sheets("Materiaallijst").Columns(6), 0)
 
Laatst bewerkt:
In onderstaande code heeft het geen betrekking op blad 'materiaallijst' als dat niet het actieve blad is.
Met de rode punt er voor wel, en maakt het niet uit welk blad je voor je neus hebt.
Code:
With Sheets("Materiaallijst")
  [SIZE=5][COLOR=#FF0000].[/COLOR][/SIZE]Cells(IT, 1).Resize(, 8) = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, CDbl(TextBox7), CDbl(TextBox8 / 100))
 End With

Maar je hoeft maar één punt te zetten in de gehele regelcode om het betrekking te laten hebben op 'materiaallijst', dus heeft het weinig zin om met 'With' te gaan werken.
Code:
Sheets("Materiaallijst")[SIZE=5][COLOR=#FF0000].[/COLOR][/SIZE]Cells(IT, 1).Resize(, 8) = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, CDbl(TextBox7), CDbl(TextBox8 / 100))
 
Dit stukje code had ik inderdaad via een ander project zo overgenomen. Overigens wat ik mij nog kan herinneren was dat er in die andere code in plaats van Cells, Range stond.

Dus of een . voor Cells en anders gewoon het meest simpele en overzichtelijke With en End With weglaten.

Ik kies voor het laatste.

Overigens kan ik dan als het wel het actieve blad is, want daar staat ook een knop naar het zelfde formulier, de With en End With ook weghouden, lijkt mij. Dit omdat je zelf aangeeft dat het totaal geen nut heeft.

Dank je HSV.
 
Laatst bewerkt:
Ik zal een voorbeeldje laten zien van je eigen code waarin nu wel alles betrekking op het blad 'materiaallijst'.
Zonder de punt er voor heeft het betrekking op het actieve werkblad.
Code:
[COLOR=#FF0000]With Sheets("Materiaallijst")[/COLOR]
              [COLOR=#ff0000][SIZE=5]  .[/SIZE][/COLOR]Cells(IT, 1).Resize(, 8) = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, 
                    CDbl(TextBox7), CDbl(TextBox8 / 100)) 'Dit stukje staat in de originele code direct achter TextBox6
            
            
'Opmerkingen toevoegen of wissen
            
            Select Case TextBox12.Value
                Case Is = vbNullString
                     [COLOR=#ff0000][SIZE=5].[/SIZE][/COLOR] Cells(IT, 1).ClearComments
                Case Is = "Geen opmerkingen" 'Voorkomen dat er met deze tekst een opmerking wordt ingevoerd
                    [COLOR=#ff0000][SIZE=5].[/SIZE][/COLOR]Cells(IT, 1).ClearComments
                Case Else
                    With  [SIZE=5][COLOR=#ff0000].[/COLOR][/SIZE]Cells(IT, 1)  [COLOR=#ff0000] 'vanaf hier heeft alles betrekking op sheets("materiaallijst").cells(it,1)[/COLOR]
                        .ClearComments 'Indien er in de cel al een opmerking aanwezig is dan eerst deze wissen
                        .AddComment
                        .Comment.Text Text:=TextBox12.Value
                    End With      [COLOR=#ff0000]           'hier hef je dat weer op[/COLOR]
            End Select
            [COLOR=#ff0000]End With      'hier hef je de with die betrekking hebben op het blad 'materiaalllijst' op.      [/COLOR]
 
Duidelijk. Dank je wel. Ik had de With inderdaad nog verder kunnen uitbouwen en mij typewerk kunnen besparen. Helemaal over het hoofd gezien. Hoewel de eerste wijziging werkte, heb ik de boel nu naar dit aangepast. Ik vind het zelfs dan nog duidelijker staan.

Nogmaals bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan