Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-08-2010, 19:06   #1
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
macro VB

Buon giorno a tutti,
sono certo che qlc di Voi saprà darmi una soluzione, ecco il problema su questa macro di VB:
esegue tutti gli "IF" compilati tranne quello con il carattere "-" (meno, trattino, chiamatelo come volete, è quello vicino allo schift dx)
o meglio gli esegue se clicco + volte sul "controllo modulo" (bottone) a cui è assegnata.

Notare che l'ultimo IF, pur contenendo il "carattere" incriminato, viene eseguito al primo click!!!


ecco la macro:

Sub colonna()
Dim r As Integer, c As Integer
c = 1
For r = 10 To 200
If InStr(1, (Cells(r, c)), "------------------", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "---------------", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "-", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "1 1005 STAMPA MOV", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "AFJRWO1 001 AFRWO", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "A1PBWO2 001", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "C.R.O.", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "TOTALE MESSAGGI", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "C.R.O.", vbTextCompare) Then
Rows(r).Delete
End If
If InStr(1, (Cells(r, c)), "- * * * F I N E T", vbTextCompare) Then
Rows(r).Delete
End If
Next
End Sub


ed ecco la colonna che deve "pulire"

1 1005 STAMPA MOV
------------------
AFJRWO1 001 AFRWO
A1PBWO2 001
------------------
C.R.O.
---------------
23105971806
46881832501
46881833006
46881832602
46881832703
46881832804
46881832905
46881639104
-----------------
TOTALE MESSAGGI
-----------------
-
-
-
-
-
-
-
-
-
-
-
- * * * F I N E T



Grazie in anticipo a tutti.
tanimon è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2010, 13:25   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Se usi un ciclo, all'interno del quale è prevista l'eliminazione di alcune righe, è ovvio che dopo l'eliminazione di una riga all'indice [x], quella sotto [x+1] ne prende il posto ( se lo shift è up ), col risultato che alla prossima iterazione il ciclo salterà una riga.
Per operazioni di questo genere sarebbe meglio "marcare" in un primo ciclo le celle interessate per l'eliminazione ( ad esempio con la proprietà ID del Range ), e in un secondo ciclo eliminare le righe corrispondenti :

Codice:
    Dim R As Range
    For Each R In Range("A:A")
        If R.Text = "" Then Exit For
        
        'Condizioni
        If InStr(1, R.Text, "------------------", vbTextCompare) Then R.ID = "X"
        If InStr(1, R.Text, "---------------", vbTextCompare) Then R.ID = "X"
        '...
        '...
    Next R
    
    For Each R In Range("A:A")
        If R.Text = "" Then Exit For
        
        If R.ID = "X" Then Rows(R.Row).Delete
    Next R
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2010, 16:22   #3
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
Ciao Marco,
grazie per la risposta!
In questo momento sono in ufficio e stasera rientro un pò tardi.
Appena posso, provo e ti faccio sapere!

Grazie ancora per l'attenzione.
Ciao
tanimon è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 12:43   #4
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
Ciao Marco,
ho provato ad applicare quanto mi hai consigliato, ma siccome in fatto di
compilazione non sono ancora arrivato neanche alle stanghe ,
ovviamente non ci sono riuscito.

ho cmq "risolto" creando una nuova macro a mezzo mouse, nella quale quella mal funzionante, viene eseguita tante volte quante quelle necessarie alla pulizia della colonna.

Ti ringrazio comunque per la riposta,
forse quando avrò finito la prima elementare di VB, ci capirò un pò di più.

Ciao
tanimon è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 13:52   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tanimon Guarda i messaggi
ho cmq "risolto" creando una nuova macro a mezzo mouse, nella quale quella mal funzionante, viene eseguita tante volte quante quelle necessarie alla pulizia della colonna.
Beh, è una pessima soluzione, lo sai vero ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 14:56   #6
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
Ciao Marco,
che sia una pessima soluzione in quanto NON scritta in codice, è fuori dubbio!

Dato che in effetti non lo so, mi mette più paura questo:
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
lo sai vero ?
"Sembra" abbia un messaggio implicito, sbaglio????

Ciao e grazie ancora.
tanimon è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 15:36   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tanimon Guarda i messaggi
Ciao Marco,
che sia una pessima soluzione in quanto NON scritta in codice, è fuori dubbio!
No, è comunque una pessima soluzione, anche se l'avessi messa giù da codice.
Per usare il mio codice basta che completi con tutte le tue condizioni dove io ho messo i puntini (...) nel primo ciclo For.
Ad esempio aggiungi un semplice CommandButton sullo stesso Foglio in cui c'è la colonna da pulire e associ il mio codice al Click. Non è niente di difficile.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 18:57   #8
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
Ciao Marco,
piccolo aggiornamento:
il Command Button con il tuo codice funziona!
Però come la macro ad inizio discussione. Mi spiego

Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Per usare il mio codice basta che completi con tutte le tue condizioni dove io ho messo i puntini (...) nel primo ciclo For.
che i puntini stessero per tutti gli altri "test" da eseguire, (poca roba) ma l'avevo intuito

Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Ad esempio aggiungi un semplice CommandButton sullo stesso Foglio in cui c'è la colonna da pulire e associ il mio codice al Click. Non è niente di difficile.
questo purtroppo non lo avevo capito ed io non applicavo il tuo codice ad un Command Button (Controllo ActiveX) ma ad un Pulsante (Controllo Modulo).

Situazione attuale:
con Command Button a cui è associato il codice

Private Sub CommandButton1_Click()
Dim R As Range
For Each R In Range("A:A")
If R.Text = "" Then Exit For

'Condizioni
If InStr(1, R.Text, "1 1005 STAMPA MOV", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "------------------", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "AFJRWO1 001 AFRWO", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "A1PBWO2 001", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "------------------", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "C.R.O.", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "---------------", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "------------------", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "TOTALE MESSAGGI", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "------------------", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "-", vbTextCompare) Then R.ID = "X"
If InStr(1, R.Text, "- * * * F I N E T", vbTextCompare) Then R.ID = "X"

Next R

For Each R In Range("A:A")
If R.Text = "" Then Exit For

If R.ID = "X" Then Rows(R.Row).Delete
Next R
End Sub

affinchè in "A:A" restino solo celle con numeri, necessitano 4 click sul Command Button

Ora dov'è che sbaglio???
Ciao e buona serata
tanimon è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 19:44   #9
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
"Affinchè restino solo celle con numeri" salta fuori solo adesso.
Non mi ero addentrato in quei filtri, perciò ho suggerito quella soluzione. Se lo dicevi prima non c'era alcun bisogno di tutto quel codice ( tra l'altro credo di aver sbagliato qualcosa pure nel mio, data la fretta... ).
Tra l'altro hai ripetuto n volte alcune condizioni identiche, il che è ovviamente superfluo...

Basta un IsNumeric() sul testo cella :

Codice:
Dim R As Range
For Each R In Range("A:A")
    If R.Text = "" Then Exit For

    'Condizione
    If IsNumeric(R.Text) = False Then
        R.ID = "X"
    Else
        R.ID = ""
    End If
Next R

Dim indice As Long
indice = 0
Do
    indice = indice + 1
    If Range("A" & indice).Text = "" Then Exit Do

    If Range("A" & indice).ID = "X" Then
        Rows(indice).Delete
        indice = indice - 1
    End If
Loop
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2010, 22:05   #10
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
Ciao Marco,
sei un Genio! Questo codice è perfetto: fa esattamente quello che chiedevo!

Se non necessita troppo tempo, avrei un'ultima necessità:

Il codice che mi hai appena passato, come sappiamo elimina le righe che non contengono numeri,
e quindi con l'utilizzo eliminerà anche il Command Button e quindi:
se lo posiziono sul foglio 2 come gli dico di "lavorare" sulla colonna "A" del foglio 1?

Ad intuito mi viene con un Select ad inizio Sub, ma con quale sintassi ed in quale riga della Sub?

Se chiedo troppo non preoccuparti:
sei stato già fin troppo paziente e di parecchia utilità e comunque,
mi sembra giusto a questo punto, spiegarti per cosa mi serve tutto questo!

In ufficio ricevo giornalmente dall'esterno due files in formato Excell diversi tra loro che hanno quantità di righe variabile
dove nella colonna "A" del primo sono presenti gli stessi dati della colonna "D" del secondo,
con la differenza che la colonna "A" è "sporca" di dati non necessari.

La mission è confrontare che nelle due colonne siano presenti gli stessi dati!


Attualmente in un terzo file con una macro, diciamo di riepilogo,
che esegue in sequenza i comandi per aprire i due files,
pulire la colonna A del primo,
ordinare le colonne dei due files in ordine crescente
copiare le due colonne ed incollarle su questo terzo file, diciamo in colonna "B" e "D",

ho inserito in colonna "C" un SE di questo tipo: SE((B:B)=(D:
D)
;VERO)
evidenziando lo sfondo del risultato "FALSO" con la formattazione condizionale.

Se hai notato i numeri da confrontare sono composti da 11 cifre e questa macro,
oltre ad evitarmi una mezz'ora di lavoro manuale,
mi evita anche di dovere cambiare gli occhiali fra qualche mese.


Ancora grazie 1000
tanimon è offline   Rispondi citando il messaggio o parte di esso
Old 26-08-2010, 09:28   #11
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tanimon Guarda i messaggi
Il codice che mi hai appena passato, come sappiamo elimina le righe che non contengono numeri,
e quindi con l'utilizzo eliminerà anche il Command Button e quindi:
se lo posiziono sul foglio 2 come gli dico di "lavorare" sulla colonna "A" del foglio 1?
1. No, il CommandButton va creato dalla toolbar dei controlli VBA, NON associato ad una cella. In tal modo basta andare nelle proprietà del controllo :
Formato controllo / proprietà / "non spostare nè ridimensionare con le celle".
Adesso il pulsante non si sposterà più, ignorando tutto quello che succede "sotto di lui".

2. Basta aggiungere riferimenti espliciti al Foglio e si può lanciare il precedente codice da qualsiasi routine VBA :

Codice:
    Dim R As Range
    For Each R In Sheets("Foglio1").Range("A:A")
        If R.Text = "" Then Exit For
    
        'Condizione
        If IsNumeric(R.Text) = False Then
            R.ID = "X"
        Else
            R.ID = ""
        End If
    Next R

    Dim indice As Long
    indice = 0
    Do
        indice = indice + 1
        If Sheets("Foglio1").Range("A" & indice).Text = "" Then Exit Do
    
        If Sheets("Foglio1").Range("A" & indice).ID = "X" Then
            Sheets("Foglio1").Rows(indice).Delete
            indice = indice - 1
        End If
    Loop
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 26-08-2010, 10:31   #12
tanimon
Member
 
L'Avatar di tanimon
 
Iscritto dal: Nov 2007
Messaggi: 39
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
1. No, il CommandButton va creato dalla toolbar dei controlli VBA, NON associato ad una cella.
In effetti ho fatto così! Forse mi sono spiegato male.

Per il codice aggiornato, che dire......., grazie ancora.

Avrai notato che raggiungere il risultato finale è un pò laborioso a causa
dell'estrapolazione ed elaborazione delle 2 colonne dei 2 files.
Ma grazie a te sono già arrivato ad un buon risultato.
Ciao
tanimon è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Funzionalità top a un prezzo acce...
Lo strumento per gli aggiornamenti autom...
Imperdibile sconto sul roborock Saros Z7...
Google Pixel 10, altri 100€ di sconto su...
Chip sotto i 2 nanometri, l'Europa alza ...
La smart meno smart di tutte: #6 in azio...
Red Hat Enterprise Linux sbarca su AWS E...
Addio alle migliaia di cicli e anni di t...
Colpo di STMicroelectronics, un'intesa d...
La Ferrari elettrica si chiama Luce: ecc...
Proseguono le riparazioni in vista del l...
Cinema domestico low cost: proiettore Fu...
Sharp porta a ISE 2026 i nuovi display i...
Casa più sicura senza lavori: Arl...
Batterie esauste, l'Italia raccoglie sol...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v