› Excel e gli applicativi Microsoft Office › Macro su cella
-
AutoreArticoli
-
Ok, ti allego il file.Ho fatto ripartire la macro, ma non riesco a risolvere il problema con l'errore di Debug
Allegati:
You must be logged in to view attached files.Ho capito qual'è il tuo problema.La macro work sheets change lancia una macro (reg_bolla) che a sua volta seleziona alcune celle nel foglio regbolleSheets("Reg Bolle").SelectRange("C10:D10").SelectOra se selezioni celle in Reg Bolle Parte di nuovo la macro worksheets selection change.Poiche a questo punto hai selezionato due celle il target.value è un vettore e non puoi confrontarlo con una singola stringa.Io proporrei una soluzione in due pezzi.la prima è prima di chiamare la macro reg_bolla inserire in Application.EnableEvents = False che inibisce le macro legati ad eventi. L'importante e prima di end sub di inserire unApplication.EnableEvents = True in modo da riabilitare l'esecuzione di macro da evento.Inoltre se l'attivazione della macro sarà sempre dalla colonna F allora anzichè inserire la m (o se vuoi oltre ad inserire la m) aggiungerei1) condizione che la cella target sia una sola2) condizione che la cella sia in colonna FLa macro si trasforma cosìPrivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("F1").EntireColumn) Is Nothing Then If Target.Count > 1 Then Exit Sub End If If Target.Value = "m" Then Application.EnableEvents = False Call reg_bolla End If End If Application.EnableEvents = True End SubSe invece volessi togliere la "m"Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("F1").EntireColumn) Is Nothing Then If Target.Count > 1 Then Exit Sub End If Application.EnableEvents = False Call reg_bolla End If Application.EnableEvents = True End SubCiaoTi ringrazio per aver capito il problema.Diciamo che non vorrei bloccare la macro a colonne o celle in particolare, perché la stessa tipologia di macro viene ripetuta su altri fogli in maniera similare, ma può prendere un numero diverso di celle nell'intervallo.Pertanto preferisco semplicemente che al posizionamento dove ci sia una cella con m piuttosto che qualunque altro valore, purchè questa cella la possa posizionare a mio piacimento, parte la macro reg_bollaQuindi come cambiare il codice?Esiste il pulsante CODE che permette di inserire il codice, non nel messaggio ma nella finestra che si apre cliccandolo, usatelo altrimenti diventa tutto illeggibileComunque io ho abbandonato perché non ho ancora capito cosa vuoi Nicopana, cambi troppo spesso le carte in tavola, devi essere più chiaro. Anche sull'altro forum dove ti hanno bloccato sei stato troppo vago.Tutto ok, ho usato la seconda versione, quella senza la m, ma con la sola indicazione di colonna che posso adattare tranquillamente anche in file leggermente diversi dove la colonna è diversa, grazie mille.Adesso provo a chiedere un dettaglio aggiuntivo. La macro reg_bolla va a creare un record che si inserisce superiormente nel foglio DBbolle, e via via gli altri già registrati vengono messi in basso. Al lancio della macro, e quindi alla registrazione della bolla, è possibile far uscire una casella di testo che mi controlla se il num.bolla inserito l'ho già inserito in record precedenti? e quindi in record che si trovano in basso?Ciaocon tutte le domande che fai e i programmi che stai gestendo mi stupisco che tu faccia ancora domande del genere.Ti basta fare un ciclo for each (per esempio) in tutte le celle del DB contenenti il codice e vedere se tale codice esiste.Ti crei una variabile booleana (vero/falso) chiamata Esistela forzi a falsoAll'interno del ciclo for se il codice che cerchi è diverso non fai nulla latrimenti forzi esiste a vero e poi esci dal ciclo forVedi sotto come esempio.CiaoSub Trova() Dim CellaW As Range Dim Trovato As Boolean Trovato = False For Each CellaW In Sheets(2).Range("A1", Sheets(2).Cells(Rows.Count, 1)).End(xlUp) If CellaW.Value = Sheets(1).Range("C8").Value Then Trovato = True Exit For End If Next If Trovato Then MsgBox "Esiste" Else MsgBox "NON Esiste" End IfIl problema è che non so scrivere molto in VBA, e ho bisogno di qualche "spintarella" per poi arrivare ad adattare il codice al mio caso.Comunque grazie, lo testo e ti faccio sapere.Ti faccio alcune domande a riguardo del codice che mi hai scritto:- questo codice lo devo inserire nel foglio relativo a DBbolle giusto? Oppure in reg-bolle? Te lo chiedo perché non capisco dove va a fare la ricerca (Sheet1 o Sheet2) e non capisco dove si appoggia quel C8 che hai considerato (immagino forse sia in reg-bolle anche se di qualche rigo sfalzato rispetto all'ultimo file che ci siamo condivisi)- posso poi eliminare l'ultima parte "...Else MsgBox "NON Esiste...""? Vorrei che il messaggio mi venga restituito solo quando il numero inserito esiste, diversamente andiamo avanti normalmente con gli inserimenti- manca anche l'End Sub nel codice giusto?Il codice si mette in un modulo standard, di solito in Modulo1 e non in un foglio. Nel modulo del foglio si mette soltanto il codice relativo ad un evento.Nel codice che ti hanno suggerito sono indicati già i fogli interessati.Ok fatto, allego comunque il file perché la macro non dà segni di vita nonostante provi ad eseguirla.Allegati:
You must be logged in to view attached files. -
AutoreArticoli
