|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
[VBA][EXCEL]dichiarare "a più alto livello" e metodo find
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... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
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 : Codice:
Private Sub Workbook_Open()
End Sub
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
Quote:
[sto cercando di mettere ordine del marasma che ho creato...] ...e per il find?
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
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 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
Codice:
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
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? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
sto cercando di trovare il modo migliore per condire di codice un form per la ricerca di dati sul mio foglio:
Codice:
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
mi può andare bene... se non fosse che i dati da verificare variano da 1 a 5 EDIT |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
nessun consiglio?
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Se il numero dei dati da verificare è variabile, usa un'array...
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2194
|
Quote:
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 |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
http://www.hwupgrade.it/forum/showthread.php?t=2048743 Usa la funzione InStr(), col parametro vbTextCompare. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:23.




















