› Sviluppare funzionalita su Microsoft Office con VBA › Macro che archivia e non permette di archiviare duplicati
-
AutoreArticoli
-
Salve ragazzi io avrei un problema non sono molto esperto di macro ma con un po di tutorial o imparato a creare una macro che mi sposta e quindi archivia un codice di prodotto da uno foglio all'altro ora il problema si pone quando vorrei fare in modo che se io scrivo nel
foglio 1 un numero di prodotto e che nel foglio due e già presente vorrei che una volta azionata la macro faccia in modo che non mi archivi il codice perche già esiste nel foglio2 e mi mandi un MSGBOX dicendomi lotto gia presente dico e possibile cmq allego il file dimenticavo la macro che ho creato mi archivia fino a 85 lotti in una volta quindi mi chiedo se sia possibile poter avere lo stesso funzionamento con l'aggiunta che vi ho scritto sopra.Allegati:
You must be logged in to view attached files.A parte le considerazioni sull'estetica (non serve forzare la formattazione delle celle, perchè PasteSpecial fa già tutto da solo), noto che nella colonna "prodotto" non c'è un "numero" di prodotto ma un codice ("ubda") mentre nella colonna del "lotto" c'è in effetti un numero. Quindi cos'è che devi controllare? che non esista già il numero presente nel lotto o la dicitura del prodotto?
Tra parentesi anche la formula in C1 ha qualcosa da sistemare: =CONTA.VALORI(A4:A4:A1048575).
Comunque per aiutarti prova a cercare nella guida cos'è, come funziona e come si applica il metodo Find di un oggetto Range.
quando clicco nella tasto e attivo la macro dovrebbe controllare che nel foglio 2 nella sezione lotto non ci sia lo stesso lotto e se c'e' mi deve impedire di archiviare e inviare un msgbox dicendomi che il lotto e già presente lo so e un po complicato ma o provato in tutti i modi e non mi riesce ovviamente calcola che la macro deve poter archiviare 85 lotti tutti in una volta spero che esista qualcosa hahahah
lo so e un po complicato
Non è affatto complicato 🙂
o provato in tutti i modi
Bè, non hai mostrato tutti questi tentativi.
Hai guardato cosa fa e come funziona il metodo Find di un oggetto Range?
Devi impostare un ciclo che scorra tutte le celle da spostare, che controlli se nel foglio 2 non c'è già lo stesso prodotto, quindi copiare la cella corrente indicata dal ciclo se non c'è, e saltare oltre se c'è. Provaci, su 😉
Il problema che ho sempre fatto solo macro registrate e non so come applicare il metodo me lo puoi mostrare tu? puoi? perche io non lo so ancora fare so che serve a ricercare un determinata cosa che tu vai ad inserire un range di ricerca ma in questo caso non so come inserirla bene credimi
Prova questo codice di esempio.
Option Explicit Sub archivia() Dim j As Long Dim ce As Range Dim f As Range j = Worksheets("foglio2").Cells(Rows.Count, "A").End(xlUp).Row For Each ce In Range("A4:A85") If ce <> "" Then Set f = Worksheets("foglio2").Range("A:A").Find((ce), LookAt:=xlWhole) If Not (f Is Nothing) Then If MsgBox("Attenzione, il lotto " & ce & _ " è già presente nel foglio di archivio. " & _ "Proseguo l'analisi?", vbInformation + vbYesNo, "Già archiviato") = vbNo Then Exit Sub Else With Range(Cells(ce.Row, "A"), Cells(ce.Row, "D")) .Copy Worksheets("foglio2").Cells(j, "A") .ClearContents End With End If End If Next MsgBox "Finito" End Sub
-
AutoreArticoli