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

VBA Macro in Module gebaseerd op gegevens in Userform

Status
Niet open voor verdere reacties.

roywaarts

Gebruiker
Lid geworden
2 okt 2011
Berichten
44
Hallo Allemaal,

Ik heb een VBA script geschreven dat uiteindelijk veel ste groot is.
Ik heb heel veel van dit soort dingen achter de knop zitten:

PHP:
With Sheets("Admin")
If Product1 = True Then
 Sheets("Orders").Cells(Rows.Count, 1).End(xlUp).Offset(1) = .Range("A2")
 Sheets("Orders").Cells(Rows.Count, 2).End(xlUp).Offset(1) = .Range("A1")
 Sheets("Orders").Cells(Rows.Count, 3).End(xlUp).Offset(1) = Klantnummer
 Sheets("Orders").Cells(Rows.Count, 4).End(xlUp).Offset(1) = Promotie
 Sheets("Orders").Cells(Rows.Count, 5).End(xlUp).Offset(1) = "Product 1"
 Sheets("Orders").Cells(Rows.Count, 6).End(xlUp).Offset(1) = Winkel
Else
End If
End With

Product 1 is een checkbox


Omdat de code achter de knop te groot is heb ik de macro in delen opgesplitst in een module

PHP:
Module 1:

Sub Productgroep1()
With Sheets("Admin")
If Product1 = True Then
 Sheets("Orders").Cells(Rows.Count, 1).End(xlUp).Offset(1) = .Range("A2")
 Sheets("Orders").Cells(Rows.Count, 2).End(xlUp).Offset(1) = .Range("A1")
 Sheets("Orders").Cells(Rows.Count, 3).End(xlUp).Offset(1) = Klantnummer
 Sheets("Orders").Cells(Rows.Count, 4).End(xlUp).Offset(1) = Promotie
 Sheets("Orders").Cells(Rows.Count, 5).End(xlUp).Offset(1) = "Product 1"
 Sheets("Orders").Cells(Rows.Count, 6).End(xlUp).Offset(1) = Winkel
Else
End If
End With

Enz..
End Sub

--

Sub Productgroep2()
With Sheets("Admin")
If Product20 = True Then
 Sheets("Orders").Cells(Rows.Count, 1).End(xlUp).Offset(1) = .Range("A2")
 Sheets("Orders").Cells(Rows.Count, 2).End(xlUp).Offset(1) = .Range("A1")
 Sheets("Orders").Cells(Rows.Count, 3).End(xlUp).Offset(1) = Klantnummer
 Sheets("Orders").Cells(Rows.Count, 4).End(xlUp).Offset(1) = Promotie
 Sheets("Orders").Cells(Rows.Count, 5).End(xlUp).Offset(1) = "Product 20"
 Sheets("Orders").Cells(Rows.Count, 6).End(xlUp).Offset(1) = Winkel
Else
End If
End With

Enz..
End Sub

Achter de knop heb ik nu
Run "Productgroep1"
Run "Productgroep2"

De code klopt, ik heb dit getest door de IF functie weg te laten en dan krijg ik de gegevens
maar als ik de IF functie terug zet doet hij het niet.

Nu denk ik omdat de code in een module staat de code niet kan "zien" welke checkbox er aangevinkt is dus denk ik dat er iets van With Userform moet komen te staan,
maar daar heb ik dus geen idee van...

Wie wel? :D
 
Volgens mij staan er toch voldoende voorbeelden in dit forum ???

Code:
Sub Productgroep1()
  sn= Sheets("Admin").range("A1:A2")
  If Product1 = True Then Sheets("Orders").Cells(Rows.Count, 1).End(xlUp).Offset(1).resize(,6) = array(sn(j,1),sn(2,1),klantnummer,promotie,"Product 1",winkel)
end sub
 
Hoi SNB,

Ik begrijp vanuit jou bericht dat ik mijn code's korter kan maken?
Dat is natuurlijk een oplossing maar ik ben eigenlijk ook benieuwd of het op de manier kan die ik voor ogen had.

Ik heb een voorbeeld in de bijlage gedaan.

Bekijk bijlage Voorbeeld.xlsm

Ik heb 2 dezelfde macro's

1 heb ik opgeslagen in een module, 1 direct in de UserForm

Waarom werkt het wel direct vanuit de UserForm en niet als ik hem vanuit een Module oproep?
Is dit mogelijk, zo ja... hoe kan ik dit het beste doen?

Op welk zoek woord kan ik het beste zoeken op dit forum?

Alvast bedankt!
 
Buiten de context van Userform1 heeft de code geen idee wat Product1 is en omdat je geen Option Explicit gebruikt krijg je daar geen melding van.
Wijzig het maar eens in dit:
Code:
    With Sheets("Admin")
        If UserForm1.Product1 Then
            Sheets("Orders").Cells(Rows.Count, 1).End(xlUp).Offset(1) = .Range("A2")
            Sheets("Orders").Cells(Rows.Count, 2).End(xlUp).Offset(1) = .Range("A1")
            Sheets("Orders").Cells(Rows.Count, 3).End(xlUp).Offset(1) = "Product1"
        End If
    End With
    MsgBox "Macro Done"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan