Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-08-2010, 18: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, 12: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, 15: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, 11: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, 12: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, 13: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, 14: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, 17: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, 18: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, 21: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, 08: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, 09: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


Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Unitree H1: il robot umanoide vicino al ...
GPU esterne: PCI-SIG porta le prestazion...
Per Lenovo i giocatori sono ricchi: Legi...
Polaroid lancia la nuova stampante Hi-Pr...
Da Kyndryl un gemello digitale per il di...
La Cina si prepara a una nuova missione ...
Climatizzatore Inverter A++ con Wi-Fi a ...
NZXT Flex, lo 'scandalo' del PC gaming a...
Robot lavavetri in offerta su Amazon: EC...
Attenti a questo update fake di Windows ...
NIO chiede la standardizzazione di batte...
Da 80 mesi-uomo a poche ore: l'AI cambia...
In 2 settimane senza social il cervello ...
Amazon top 7 di oggi: 2 portatili intere...
SteamGPT trapela dal client Steam: ecco ...
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: 00:21.


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