View Full Version : [VBA][EXCEL]dichiarare "a più alto livello" e metodo find
radeon_snorky
02-09-2009, 12:05
spero di non sbagliare se apro una discussione nuova...
volevo sapere dove poter mettere delle dichiarazioni di variabili "più in alto possibile" cioè che dichiaro una volta e ne definisco (e obbligo) il formato così da non dovermene più preoccupare per tutta la cartella di lavoro, dentro una form, in un messagebox, insomma dappertutto!
le variabili sarebbero:
un numero formato "000" (tipo il numero di una pratica)
un numero formato "0000" (tipo anno, che all'occorrenza mi serve troncato alle 2 cifre finali)
una stringa formata dai 2 numeri precedenti (nnn/aa - ecco che in questo caso l'anno mi serve troncato)
un numero tipo anno ma generato dalla funzione OGGI() inserita in una cella
una stringa che contiene i dati, e solo quelli, presenti su un foglio (per riempire le combo, si può?)
una riga
qualche colonna
e qualche range di celle
le ho descritte casomai non fosse possibile metterle "allo stesso livello"
chi mi illumina?
secondo quesito, il "find":
acquisiti dei valori tramite un mini form (tipo inputbox) genero una stringa (come la precedente nnn/aa) e devo cercarla in un range e "prendere" la relativa riga come riferimento per riempire delle textbox e combobox.
mi serve in una sorta di "edita pratica" ma adattandolo posso usarlo anche per cercare la riga interessata anche con altri input...
Il "posto più alto" per le dichiarazioni è con qualificatore Public in un Modulo.
Ma qui non siamo in VB.NET, perciò non potrai anche inizializzarle o formattarle a piacere nello stesso Modulo di dichiarazione. Puoi invece portarti sull'oggetto "ThisWorkbook" e nell'Open inizializzi tutto :
Private Sub Workbook_Open()
End Sub
;)
radeon_snorky
02-09-2009, 15:42
Il "posto più alto" per le dichiarazioni è con qualificatore Public in un Modulo.
Ma qui non siamo in VB.NET, perciò non potrai anche inizializzarle o formattarle a piacere nello stesso Modulo di dichiarazione. Puoi invece portarti sull'oggetto "ThisWorkbook" e nell'Open inizializzi tutto :
Private Sub Workbook_Open()
End Sub
;)
MarcoGG, ma sempre tu!?!??!?!!?! GRAZIE 1000!!!!
[sto cercando di mettere ordine del marasma che ho creato...]
...e per il find? :fagiano:
...e per il find? :fagiano:
Forza e coraggio, non è difficile... :D ;)
radeon_snorky
03-09-2009, 09:13
Forza e coraggio, non è difficile... :D ;)anche scalare una montagna non è difficile... basta mettere un piede davanti l'altro, come per camminare...
ho buttato via il manuale "super pocket tutto in 5 minuti sul cesso mentre sforzi"
però sono alla ricerca di documentazione seria!
partirò dal sito microsoft
radeon_snorky
04-09-2009, 07:23
Private Sub UserForm_Initialize()
0:
selbox.Show
an = selbox.annoComboBox.Value
cp = selbox.pratBox.Text
If IsNumeric(selbox.annoComboBox.Value) = False Then
MsgBox "errore"
GoTo 0
End If
If IsNumeric(selbox.pratBox.Text) = False Then
MsgBox "errore"
Unload selbox
Load selbox
GoTo 0
End If
an = (Right(an, 2))
cp = Format(cp, "000")
findprat = cp & "/" & an
On Error GoTo 10
risposta = 7
Worksheets("pratiche").Range("A" & "1:" & "A" & "65536").Select
Set c = Selection.Find(What:=findprat, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False)
Do While risposta = 7
If c Is Nothing Then
MsgBox "Elemento non trovato", vbInformation, "Attenzione!"
Exit Do
End If
numRiga = c.Row
Pratica = Range("A" & numRiga).Text
Data = Range("B" & numRiga).Text
risposta = MsgBox("Pratica: " & Pratica & Chr(13) & "Data: " & Data & Chr(13) & "messaggio da completare...", vbYesNo, "Pratica trovata!")
If risposta = vbYes Then
Exit Do
End If
If risposta = vbNo Then
Me.Hide
Unload selbox
Unload editform
Exit Do
End If
Loop
10:
If Err.Number = 0 Then
Else
MsgBox "strano errore" & Err.Number
End If
numero.Caption = findprat
TextBox1.Text = Sheets("pratiche").Range("B" & numRiga).FormulaR1C1
ComboBox1.Text = Sheets("pratiche").Range("C" & numRiga).FormulaR1C1
ComboBox4.Text = Sheets("pratiche").Range("D" & numRiga).FormulaR1C1
TextBox3.Text = Sheets("pratiche").Range("E" & numRiga).FormulaR1C1
TextBox4.Text = Sheets("pratiche").Range("F" & numRiga).FormulaR1C1
TextBox5.Text = Sheets("pratiche").Range("G" & numRiga).FormulaR1C1
ComboBox2.Text = Sheets("pratiche").Range("H" & numRiga).FormulaR1C1
ComboBox3.Text = Sheets("pratiche").Range("I" & numRiga).FormulaR1C1
TextBox6.Text = Sheets("pratiche").Range("J" & numRiga).FormulaR1C1
TextBox7.Text = Sheets("pratiche").Range("K" & numRiga).FormulaR1C1
TextBox8.Text = Sheets("pratiche").Range("L" & numRiga).FormulaR1C1
TextBox9.Text = Sheets("pratiche").Range("M" & numRiga).FormulaR1C1
TextBox10.Text = Sheets("pratiche").Range("N" & numRiga).FormulaR1C1
TextBox11.Text = Sheets("pratiche").Range("O" & numRiga).FormulaR1C1
TextBox12.Text = Sheets("pratiche").Range("P" & numRiga).FormulaR1C1
TextBox13.Text = Sheets("pratiche").Range("Q" & numRiga).FormulaR1C1
TextBox14.Text = Sheets("pratiche").Range("R" & numRiga).FormulaR1C1
Dim lng1 As Long
Dim lUltRiga1 As Long
Set sh = Worksheets("tecnico")
With sh
lUltRiga1 = .Range("A" & Rows.Count).End(xlUp).Row
For lng1 = 2 To lUltRiga1
Me.ComboBox3.AddItem (.Cells(lng1, 1).Value)
Next
End With
Set sh = Nothing
Dim lng2 As Long
Dim lUltRiga2 As Long
Set sh = Worksheets("committente")
With sh
lUltRiga2 = .Range("A" & Rows.Count).End(xlUp).Row
For lng2 = 2 To lUltRiga2
Me.ComboBox1.AddItem (.Cells(lng2, 1).Value)
Next
End With
Set sh = Nothing
Dim lng3 As Long
Dim lUltRiga3 As Long
Set sh = Worksheets("proprietà")
With sh
lUltRiga3 = .Range("A" & Rows.Count).End(xlUp).Row
For lng3 = 2 To lUltRiga3
Me.ComboBox4.AddItem (.Cells(lng3, 1).Value)
Next
End With
Set sh = Nothing
Dim lng4 As Long
Dim lUltRiga4 As Long
Set sh = Worksheets("tipologie")
With sh
lUltRiga4 = .Range("A" & Rows.Count).End(xlUp).Row
For lng4 = 2 To lUltRiga4
Me.ComboBox2.AddItem (.Cells(lng4, 1).Value)
Next
End With
Set sh = Nothing
MsgBox "pratica importata correttamente"
End Sub
questo è il codice per la edit form, all'inizio richiamo una form (simile ad una inputbox) dalla quale esco solo se ricevo dei valori corretti (numeri), genero la stringa da cercare... e la cerco! poi uso la row del dato trovato per popolare la form e mostrarla all'utente per le modifiche.
quesiti:
- al primo uso, mi da un errore 9... ma poi prosegue correttamente, poi errore 0 che ho evitato con un goto. cosa faccio?
- vorrei semplificare il codice, se possibile, per renderlo più comodo (leggibile)
- se sposto il codice che si riferisce a "selbox" da questa "edit form" alla form "selbox"... per "non far dimenticare" il valore delle variabili è proprio in questo caso che devo dichiararle in thisworkbook, giusto?
radeon_snorky
11-09-2009, 11:38
sto cercando di trovare il modo migliore per condire di codice un form per la ricerca di dati sul mio foglio:
lastrif = Sheets("pratiche").Range("A" & Rows.Count).End(xlUp).Row
For i = 3 To lastrif
index = i
If Sheets("pratiche").Range("D" & index).Value = propr Then
Dim Answer As String
Dim MyNote As String
MyNote = ("pratica: " & Sheets("pratiche").Range("A" & index).FormulaR1C1 & " PV: " & Sheets("pratiche").Range("E" & index).FormulaR1C1 & " oggetto: " & Sheets("pratiche").Range("J" & index).FormulaR1C1)
Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "trovata?")
If Answer = vbNo Then
GoTo 10
Else
Exit Sub
End If
End If
10:
Next i
in questo caso cerco solo su una colonna, spostandomi con un ciclo, e verificando se è presente o meno un valore.
mi può andare bene... se non fosse che i dati da verificare variano da 1 a 5
EDIT
radeon_snorky
15-09-2009, 16:21
nessun consiglio?
in questo caso cerco solo su una colonna, spostandomi con un ciclo, e verificando se è presente o meno un valore.
mi può andare bene... se non fosse che i dati da verificare variano da 1 a 5
Se il numero dei dati da verificare è variabile, usa un'array...
radeon_snorky
19-09-2009, 15:00
Se il numero dei dati da verificare è variabile, usa un'array...matriciiiiiiiiiiii, non so proprio da dove cominciare!
l'ideale sarebbe che per ogni campo di ricerca ci fosse collegato un affinamento dei dati, ho 4 combobox e 1 textbox, indipendentemente da quale campo riempio vorrei che:
sulla form comparissero il numero di occorrenze e, solo nel caso in cui i dati immessi portino ad un solo dato, mostrarlo su una label... poi da qui proseguo io con edit-form e print-form
NB: se cerco "tizio" mi trova solo "tizio" e nulla più oppure è possibile trovare "Tizio" "TIZIO" "tizio caio"... è per sapere! visto che le 4 combo agiscono su nomi di ditte, persone, indirizzi... mentre la textbox cercherebbe all'interno di una cella con molto testo (è una nota legata alla pratica)
helpatemi
NB: se cerco "tizio" mi trova solo "tizio" e nulla più oppure è possibile trovare "Tizio" "TIZIO" "tizio caio"... è per sapere! visto che le 4 combo agiscono su nomi di ditte, persone, indirizzi... mentre la textbox cercherebbe all'interno di una cella con molto testo (è una nota legata alla pratica)
Puoi trovare un esempio di search in Range desiderato al mio post #2 qui :
http://www.hwupgrade.it/forum/showthread.php?t=2048743
Usa la funzione InStr(), col parametro vbTextCompare. ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.