16. maj 2018 - 13:51Der er
15 kommentarer og 1 løsning
Kør noget af VBA koden hvis D14=1 osv.
Hej Alle
Jeg har nedenstående kode. Koden skal bruges til at lave indgangskontrol på emner. 2 vigtige ting: 1)Ved ingangskontrol af forskellige emner/vare kan det variere hvor mange stk. ud af et parti man skal lave kontrol af. Dog vil dette antal blive regnet ud og fremgå i en celle. 2) Det vil også variere hvor mange kontrolpunkter man skal lave på en vare. Dog har jeg sat det op så der max laves 6 kontrol punkter på en vare.
Koden kopier den indtastet information, når der bliver trykket på en knap, til et andet ark hvor jeg vil lave noget sortering og statestik osv. Hver gang der trykkes på knappen kopiers der til næste tomme række.
Det jeg dog gerne vil er følgende: Hvis vi går ud fra at der skal laves ingangskontrol på 5 emner ud af det modtaget parti, så skal man kunne trykke på knappen 5 gange.
1. gang man trykker så kopier den grund data samt den første kontrols værdier til NÆSTE tomme række. Herudover ligger den +1 til en celle, f.eks. D14 så den kan have styr på hvor mange kontroller der er lavet og til sidst sletter den kontrol værdierne, så der kan skrives nye ind.
2. 3. 4. man trykker kopiers kontrol værdier over, disse indsættes i samme række (DOG som skrevet under punkt 2 varier det hvor mange kontrol punkter der er til en vare. Men jeg sætter det op så der altid er plads til 6 kontrolpunkter. EKSEMPEL: Kontrol 1 vil altid benytte de første 6 KOLLONER (A-F), kontrol 2 værdier vil blive kopieret til 7-14 (G-L) osv. Der ligges +1 til D14 og sletter værdier
5. gang man trykker kopiers kontrol værdier over, og igen til samme række. Alt slettes og dokumentet gemmes og lukkes.
Det eneste jeg er i tvivl om i denne lange smøre er hvordan jeg deler min kode op så når D14 er lig 1 så køres første del af koden. Når D14 er lig 2 så køres anden del af koden og når D14 er lig 5 så køres sidste del af koden.
Jeg er også i tvivl om hvordan jeg får den til at kopier i samme række (Når D14 er større end 1) men tænker det handler om at fjerne +1 fra denne del af koden? intSidsteraekke = Sheets("Rapportering").Cells(Sheets("Rapportering").Rows.Count, "A").End(xlUp).Row intInputraekke = intSidsteraekke + 1
Nedenstående er min kode, den er noget anderledes end mit forklarende ovenstående eksempel...men hvis i kan vise hvordan man deler koden op, så er det lige meget hvor i deler op henne.
Private Sub CommandButton1_Click()
Dim shtInput As Worksheet Dim shtOutput As Worksheet Dim intSidsteraekke As Integer Dim intInputraekke As Integer
'find sidste række med data så der kopieres ind i næste række intSidsteraekke = Sheets("Rapportering").Cells(Sheets("Rapportering").Rows.Count, "A").End(xlUp).Row intInputraekke = intSidsteraekke + 1
Når jeg køre din case metode får jeg en syntax error på første linje "Private Sub CommandButton1_Click()"
Private Sub CommandButton1_Click()
Dim shtInput As Worksheet Dim shtOutput As Worksheet Dim intSidsteraekke As Integer Dim intInputraekke As Integer
Select [ Case ] D14 D14 = 1 'find sidste række med data så der kopieres ind i næste række intSidsteraekke = Sheets("Rapportering").Cells(Sheets("Rapportering").Rows.Count, "A").End(xlUp).Row intInputraekke = intSidsteraekke + 1
For i = 1 To 5 Antal = Range("D14").Value Select Case Antal Case Is = 1 MsgBox ("Nu udføres " & Antal & ". trin") Range("D14") = 2 Case Is = 2 MsgBox ("Nu udføres " & Antal & ". trin") Range("D14") = 3 Case Is = 3 MsgBox ("Nu udføres " & Antal & ". trin") Range("D14") = 4 Case Is = 4 MsgBox ("Nu udføres " & Antal & ". trin") Range("D14") = 5 Case Is = 5 MsgBox ("Nu udføres " & Antal & ". trin") Range("D14") = 0 End Select Next End Sub
For i = 1 To 5 Select Case Antal Case Is = 1 MsgBox ("Nu udføres 1. trin") Antal = 2 Case Is = 2 MsgBox ("Nu udføres 2. trin") Antal = 3 Case Is = 3 MsgBox ("Nu udføres 3. trin") Antal = 4 Case Is = 4 MsgBox ("Nu udføres 4. trin") Antal = 5 Case Is = 5 MsgBox ("Nu udføres 5. trin") End Select Next End Sub
For i = 1 To 5 Select Case Antal Case Is = 1 Call Makro_1 Antal = 2 Case Is = 2 Call Makro_2 Antal = 3 Case Is = 3 Call Makro_3 Antal = 4 Case Is = 4 Call Makro_4 Antal = 5 Case Is = 5 Call Makro_5 End Select Next End Sub
Sub Makro_1() MsgBox ("Nu udføres 1. trin") End Sub
Sub Makro_2() MsgBox ("Nu udføres 2. trin") End Sub
Sub Makro_3() MsgBox ("Nu udføres 3. trin") End Sub
Sub Makro_4() MsgBox ("Nu udføres 4. trin") End Sub
Sub Makro_5() MsgBox ("Nu udføres 5. trin") End Sub
Angående dit sidste svar. Så starter du koden sådan her For i = 1 To 5 Select Case Antal Case Is = 1 Call Makro_1
To ting: Første ting, i den kode ved den ikke det er D14 den skal tjekke værdi på vel?
Anden ting: Nu er det ikke altid at der skal laves 5 gange kontrol. Men hvis vi nu siger jeg har D14 der tæller hvor mange gange Range("D14") = Range("D14") + 1 der er trykket på knappen og D15 der angiver mange gange kontrol skal udføres (om det er 3,4,5,6,7,8 skal være underordnet). Kan jeg så ikke få den til at sige hvis D14= 1 kør macro 1, hvis D14 større and D14 og mindre end D15 kør makro 2 og til sidst hvis D14=D15 Kør makro 3
Stavefejl, prøver igen: Kan jeg så ikke få den til at sige hvis D14= 1 kør macro 1 Hvis D14 større end 1 og mindre end D15 kør makro 2 og til sidst hvis D14=D15 Kør makro 3
If Range("D14").Value = 1 Then Makro = 1 If Range("D14").Value > 1 And Range("D14").Value < Range("D15").Value Then Makro = 2 If Range("D14").Value = Range("D15").Value Then Makro = 3
Antal = Makro
Select Case Makro Case Is = 1 Call Makro_1 Range("D14").Value = Range("D14").Value + 1 Case Is = 2 Call Makro_2 Range("D14").Value = Range("D14").Value + 1 Case Is = 3 Range("D14").Value = 1 Call Makro_3 End Select End Sub
Sub Makro_1() MsgBox ("Nu udføres 1. makro") End Sub
Sub Makro_2() MsgBox ("Nu udføres 2. makro") End Sub
Sub Makro_3() MsgBox ("Nu udføres 3. makro") End Sub
JAMEN det er jo fantastisk....den virker i hverfald med dit eksempel. Jeg arbejder videre og integrere min kode i dit eksempel. VIRKELIG fantastisk....TAK :-)
Private Sub CommandButton1_Click() Dim Antal As Byte Antal = Range("D14").Value Do Until Antal > Range("D15").Value
If Range("D14").Value = 1 Then Makro = 1 If Range("D14").Value > 1 And Range("D14").Value < Range("D15").Value Then Makro = 2 If Range("D14").Value = Range("D15").Value Then Makro = 3
Select Case Makro Case Is = 1 Call Makro_1 Range("D14").Value = Range("D14").Value + 1 Case Is = 2 Call Makro_2 Range("D14").Value = Range("D14").Value + 1 Case Is = 3 Range("D14").Value = 1 Call Makro_3 End Select
Antal = Antal + 1 Loop End Sub
Sub Makro_1() MsgBox ("Nu udføres 1. makro") End Sub
Sub Makro_2() MsgBox ("Nu udføres 2. makro") End Sub
Sub Makro_3() MsgBox ("Nu udføres 3. makro") End Sub
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.