|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2135
|
[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: 2135
|
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: 2135
|
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: 2135
|
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: 2135
|
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: 2135
|
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: 2135
|
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: 00:03.