La consultazione del forum è libera per tutti.
Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).
Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.
ma ti ripeto giocaci fino a che non trovi quello che ti piace
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("B3:B100")) Is Nothing Then Application.EnableEvents = False UserForm1.Left = Cells(Target.Row, 3).Left + 20 'xxxxxxxxxx aggiunta UserForm1.Top = Cells(Target.Row, 3).Top + 200 'xxxxxxxxxx aggiunta UserForm1.Show Application.EnableEvents = True End If End Sub
Si ho provato la modifica, ma ad un certo punto il Combo si visualizza sempre più in basso fino a scoparire e a bloccarmi il foglio. Continuo a fare delle prove ma pare che agendo solo su queli valori non si garantisce che il combobox si apra sempre accanto alla cella interessata.
Lo devo necessariamente risolvere questo problema altrimenti il foglio diventa inutilizzabile ad un certo punto.
Grazie ancora
Dimenticavo,
riportando l'impostazione a 1 - CenterOwner, il problema non si presenta, però la finestra del combo viene aperta quasi a centro dello schermo
ciao
a me viene sempre vicino alla cella
ora faccio delle prove
hai celle ridimensionate o altro?
ciao
a me viene sempre vicino alla cella
ora faccio delle prove
hai celle ridimensionate o altro?
Viene vicino alla cella fino ad un certo punto.
Adesso non so cosa intendi per celle ridimensionate.
ho iodea che tu superi le cento righe
aumentale a 1000 o quante vuoi
If Not Intersect(Target, Range("B3:B100")) Is Nothing Then
Application.EnableEvents = False
scrivi
B3:B1000
Ho apportato la modifica, ma è cambiato poco. Rimane stabile allo steso posto per un po', ma andando sempre più sotto inizia a scazzare per poi scomparire. Allego il file nel caso abbia fatto delle modifiche inavvertitamente o me ne sia dimenticato durante le prove. Grazie ancora
Buon pomeriggio a tutti
Dopo una giornata intensa (accompagni i nipoti a scuola, visita dal cardiologo - fortunatamente tutto OK - spesa con la moglie e riprendi i bimbi a scuola) speravo di dedicarmi al problema.
Ho approfondito un pochino e la cosa non è facilmente fattibile nè gestibile. Occorre utilizzare delle API (non quelle che pungono 🤣) e la cosa non mi è familiare per nulla.
Per tagliare la testa al toro propongo di "bloccare" le prime tre righe è lì far apparire il Combo. Ho abbozzato qualcosa che allego per vedere se è accettabile. Se così fosse si potrebbe anche eliminare la UserForm e lasciare solo la Combo.
Aspetto vostre notizie.
Ciao,
Mario
ciao
hai ragione devo calcolatre il TOP
ora vedo se ci riesco
@ Mario
Grazie di tutto davvero.
La combo però si visualizza troppo in alto. Poco comoda direi.
Per la questione delle API penso che sia meglio mantenersi sul semplice per quanto è possibile a questo punto, anche perché sarebbe un casino se volessi aggiungere o modificare qualcosa. Infatti ho provato ad aggiungere una nuova tabella dati per un nuovo Combo da aggiungere nel foglio1, ma ho fatto un macello.
Allego il file con il... tentativo di modifiche casomai interessasse o meglio ancora nel caso si avesse la pazienza di spiegarmi perché non va visto che ho provato a replicare il codice del primo form quasi pari pari cambiando solo i riferimenti.
Ciao
L'evento DoubleClick è UNO SOLO pertanto non puoi fare due macro, deve essere solo una
Sdoppia l'If .. End If cioè
If Not Intersect(Target, Range("B5:B1000")) Is Nothing Then
....
ElseIf Not Intersect(Target, Range("F5:F1000")) Is Nothing Then
....
End If
Prova e fammi sapere.
Ciao,
Mario
ciao
ho cambiato tutto con una macro di Gamberini
devi levare la protezione alla colonna B
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("B3:B1000")) Is Nothing Then Application.EnableEvents = False UserForm1.Show Application.EnableEvents = True End If End Sub Private Declare PtrSafe Function GetDC& Lib "user32.dll" (ByVal hwnd&) Private Declare PtrSafe Function GetDeviceCaps& Lib "gdi32" (ByVal hDC&, ByVal nIndex&) Dim wk As Worksheet Private Sub ComboBox1_Click() ActiveCell = ComboBox1.Text Unload Me ActiveCell.Offset(1, 0).Select End Sub Private Sub UserForm_Initialize() Dim lRiga As Long Set wk = ThisWorkbook.Worksheets("Foglio1") lRiga = ActiveCell.Row Call FormAlign(Me, wk.Cells(lRiga, 3)) End Sub Sub FormAlign(MyForm, MyCell As Range) Dim x#, y# x = GetDeviceCaps(GetDC(0), 88) / 72 y = GetDeviceCaps(GetDC(0), 90) / 72 With MyForm .StartUpPosition = 0 .Left = ActiveWindow.PointsToScreenPixelsX(MyCell.Left * x) * 1 / x .Top = ActiveWindow.PointsToScreenPixelsY(MyCell.Top * y) * 1 / y - 60 '.Show End With Set MyForm = Nothing End Sub Private Sub UserForm_Activate() Application.ScreenUpdating = False Application.Goto Reference:="Tabellacars" ActiveWorkbook.Worksheets("liste").ListObjects("Tabellacars").Sort.SortFields. _ Clear ActiveWorkbook.Worksheets("liste").ListObjects("Tabellacars").Sort.SortFields. _ Add Key:=Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortTextAsNumbers With ActiveWorkbook.Worksheets("liste").ListObjects("Tabellacars").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("C1").Select Sheets("Foglio1").Select Application.ScreenUpdating = True UserForm1.ComboBox1.RowSource = "Tabellacars" End Sub
If Not Intersect(Target, Range("B5:B1000")) Is Nothing Then
....
ElseIf Not Intersect(Target, Range("F5:F1000")) Is Nothing Then
....
End If
Ho modificato così:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("B5:B1000")) Is Nothing Then Application.EnableEvents = False UserForm1.Left = Cells(Target.Row, 3).Left + 20 'xxxxxxxxxx aggiunta UserForm1.Top = Cells(Target.Row, 3).Top + 40 'xxxxxxxxxx aggiunta UserForm1.Show Application.EnableEvents = True ElseIf Not Intersect(Target, Range("F5:F1000")) Is Nothing Then Application.EnableEvents = False UserForm2.Left = Cells(Target.Row, 3).Left + 20 'xxxxxxxxxx aggiunta UserForm2.Top = Cells(Target.Row, 3).Top + 40 'xxxxxxxxxx aggiunta UserForm2.Show Application.EnableEvents = True End If End Sub
però adesso mi da un errore di runtime per il combo credo
ciao
ho cambiato tutto con una macro di Gamberini
Wooow!
Quanta roba. Perché devo togliere la protezioen alla colonna B?
Si può aggiungere un nuovo Combo per la tipologia di pagamenti come indicato nel mio file sopra?
Grazie
Perché devo togliere la protezioen alla colonna B?
perchè altrimenti non ci scrivi e ti blocca la macro
puoi farlo con il vba
per ora dimmi se ti funziona
poi vediamo il resto