› Sviluppare funzionalita su Microsoft Office con VBA › Cerca foglio ed inserisci dati di altro foglio
-
AutoreArticoli
-
Salve a tutti,
in allegato ho inserito un file dove spiego quello che vorrei realizzare.
Mastico un pò di vba ma ho bisogno di un aiutino.
Devo fare la ricerca di un foglio, e quando trovo il foglio riportare dei dati inseriti su un' altro foglio.
nel file c'è la spiegazione (foglio3),spero di essere stato chiaro.
Grazie
A.
Allegati:
You must be logged in to view attached files.Ho letto e riletto più volte anche il file delle istruzioni ma sinceramente non ho capito niente dello scenario di partenza e dei dati coinvolti. Nè il risultato atteso 🙁
Non capisco cosa scrivo dove, e cosa l'eventuale codice deve fare per riportare cosa e dove.
Ho cercato di interpretare le tue istruzioni ma non sono sicuro di aver capito.
Anzitutto, devi cercare un foglio o dei dati contenuti in un foglio?Allego nuovo file.
spero di essere stato più chiaro.
grazie
nuovo file spero di essere stato + chiaro
grazie
Strano che il sistema rifiuti i file xls. Devo far intervenire il nostro admin.
non riesco a pubblicare il file:
ho fatto lo screenshot della pagina dove ho aggiornato..... la descrizione di quello che vorrei fare.
help me
thanks
Allegati:
You must be logged in to view attached files.Ho contattato il nostro Admin, sembra che il forum non abbia problemi, per cui rimane questo mistero. Prova ad inviarmi i file alla casella della redazione (redazione@excelvba.it) e poi ci penso io ad allegare qui.
Intanto sto leggendo le tue (nuove) istruzioni e forse riesco a seguire il flusso logico 🙂
Quello che ho capito è che nel foglio "prova" tu inserisci (manualmente?) le prime quattro colonne: barcode, numero foglio, numero in verde, codice in arancione; cercando e incrociando questi dati nel file "prova2" (che contiene i dati) si riesce a ottenere delle somme da mettere in colonna azzurra.
Proverò a reinventare uno scenario.
Per essere chiari, la base dati (l'elenco dei barcode) si trova su un file diverso da quello che contiene i diversi fogli 1, 2 ,3 ecc.?
Provo intanto ad allegare la mia proposta, così puoi fare qualche test. Ho reinserito nel foglio3 le tue informazioni così le avevo sott'occhio 🙂
I dati sono naturalmente di prova.
Mi sembra che tutto funzioni come da richiesta (quindi occorre decidere se ho capito la richiesta) 😀
Allegati:
You must be logged in to view attached files.Ok grande vecchio frac.
inizialmente avevo intenzione di usare sue file, ma come l' hai strutturato te penso che sia meglio quindi correggo io da altra parte.
Se invece che sommare ad H il contenuto di E volessi trovare la prima cella libera su quel rigo (corrispondente ad esempio ad a26) successiva alle prime 5 (quindi da f26 in poi), leggere il dato e sottrarre il contenuto di E ?
Grazie in anticipo.
Se invece che sommare ad H il contenuto di E volessi trovare la prima cella libera su quel rigo (corrispondente ad esempio ad a26) successiva alle prime 5 (quindi da f26 in poi), leggere il dato e sottrarre il contenuto di E ?
Preferirei che ti spiegassi meglio... in quale colonna vorresti trovare la cella libera? e di quale foglio? se è successiva alle prime 5 come può essere F26? Sottrarre il contenuto di E ma in quale foglio? --> quello dei dati presumo, cioè il "foglio prova 2" nel nostro ultimo esempio...
Chiarito questo, il resto è solo un semplice giro di istruzioni.
Preferirei che ti spiegassi meglio... in quale colonna vorresti trovare la cella libera
....................
Non voglio fare confusione ( in questo sono bravo).....
Al momento tramite il riferimento di cella nella colonna A ( esempio a26) trova la riga corrispondente e nella colonna H fa la somma, vorrei che invece di assegnare la colonna H statica ,cercasse la prima cella libera dopo f26 ( quindi la 5 dopo la a26) e trovata la cella libera, faccia la sottrazione del valore trovato meno quello del valore nel foglio prova corrispondente ad E.
Quindi ok quello che fa adesso ma invece di attribuire scrivi in H, fargli trovare la cella libera in corrispindenza della ricerca e fare la sottrazione e non l addizione come già hai creato.
Grazie
Ma scusa non c'è forse un problema qui?
trovata la cella libera, faccia la sottrazione del valore trovato meno quello del valore nel foglio prova
La prima cella libera avrà sempre valore zero, quindi otterresti sempre 0 - (valore della cella E).
Fammi un esempio del risultato atteso sulla base dell'ultimo file postato (devi dirmi proprio: scrivi questo valore in questa cella e voglio che in quest'altra cella compaia questo risultato).
Vabbè intanto facciamo che ti allego una nuova versione. Ovviamente i valori risultanti sono tutti negativi, stante l'osservazione che ho fatto sopra.
Allegati:
You must be logged in to view attached files.Ho inserito dei commenti nel foglio 1 e descrizione nel foglio prova 2
Grazie
Allegati:
You must be logged in to view attached files.ho provato ad adattare il tuo codice ma mi va in errore su sheets(ac.value) perchè
La cartella di lavoro non ha il numero di fogli da 1 a x.... a mano a mano vengono tolti quindi non ho la sequenza da 1 fino a x mapossono essere saltati anche molti numeri (esempio 1,5,10,15,16,17,18 etc)
Alessio
Oggi non ho potuto prendere in mano il tuo file. Spero domani.
Per quanto riguarda l'errore, dimmi che valori ci sono in colonna B dello Sheet "foglio prova2".
Devi curare che i nomi dei fogli siano scritti esattamente in questa colonna B.
ad esempio ho il numero fogli 392 (scritto anche in riferimento colonna b) e con quello mi dà l'errore, come ti ho già detto non ho i numeri in sequenza ma sono sparsi e non consecutivi.
Ho capito il tuo codice indica la posizione numerica del file e non del nome assegnato...giusto? mi occorre che trovi il nome assegnato al foglio in qualsiasi posto della cartella sia, all'inizio o alla fine.
indica la posizione numerica del file e non del nome assegnato...giusto?
Sbagliato, o almeno io volevo che fosse così.
ac.Value restituisce il valore della cella ma disgraziatamente essendo un numero probabilmente Excel tenta di interpretarlo come indice.
Domani comunque faccio dei test più accurati e vedrà di aggiustare il tiro.
Premetto che i dati da scaricare (nella pagina foglio prova 2 ) potrebbero essere anche 100 e più una volta al giorno,
il giorno dopo pulirò lo schema e ripartirà ad essere compilato da b2 in poi.E' importante che cerchi e trovi il nome del foglio anche perchè sono più di 100 e non ordinati.
Grazie
ac.Value restituisce il valore della cella ma disgraziatamente essendo un numero probabilmente Excel tenta di interpretarlo come indice.
Infatti è così e la soluzione è semplice: convertire il valore in stringa:
With Sheets(CStr(ac.Value))
Ecco qui la revisione della procedura, conforme alle istruzioni. Fai qualche prova e poi dimmi. Se ottieni errori riportami la riga su cui si verifica e la descrizione dell'errore. Se non ottieni il risultato voluto allora fammi una descrizione dell'intoppo.
Option Explicit Sub search_go() Dim ac As Range Dim c As Range Dim r As Range Dim i As Long Sheets("foglio prova2").Select i = 2 For Each ac In Range("B2:B" & [COUNTA(B:B)]) If Trim(ac) = "" Then Exit For If Not sheet_exists(ac.Value) Then ac.Offset(, 4) = "Il foglio " & ac.Value & " non esiste" Else With Sheets(CStr(ac.Value)) .Cells(Application.CountA(.Range("F2:F21")) + 2, "F") = ac.Offset(, -1).Value .Cells(Application.CountA(.Range("E2:E21")) + 2, "E") = ac.Offset(, 1).Value .Columns(6).AutoFit Set c = .Range("A:A").Find(ac.Offset(, 2), LookAt:=xlWhole) If c Is Nothing Then ac.Offset(, 4) = "Il valore " & ac.Offset(, 2) & " non esiste sul foglio " & ac.Value Else Set r = c.EntireRow.Find(What:="*", After:=c, SearchDirection:=xlPrevious) r = r - Sheets(CStr(ac)).Cells(i, "E") End If End With End If i = i + 1 Next MsgBox "Operazioni concluse.", vbInformation End Sub Private Function sheet_exists(sheet_name As String) As Boolean On Error Resume Next sheet_exists = Sheets(sheet_name).Index > 0 End Function
Grazie mille
funziona la prima parte della ricerca del foglio e trascrizione dei dati ma mi va in debug qui
r = r - Sheets(CStr(ac)).Cells(i, "E")é possibile copiare ed incollare come dati dopo questa parte di codice i due range corrispondenti sotto??
.Cells(Application.CountA(.Range("F2:F21")) + 2, "F") = ac.Offset(, -1).Value ' .Cells(Application.CountA(.Range("E2:E21")) + 2, "E") = ac.Offset(, 1).Value .Columns(6).AutoFitEsempio: nella cella F2 ed E2 vengono scritti i dati è possibile sullo stesso rigo fare un copia ed incolla dati dalla cella A2 a H2 corrispondente alla ricerca effettuata?
grazie
mi va in debug qui
Che tipo di errore ricevi?
è possibile sullo stesso rigo fare un copia ed incolla dati dalla cella A2 a H2 corrispondente
suppongo di sì... è una richiesta nuova o è alternativa alla soluzione già adottata?
-
AutoreArticoli