Modificare dati da listbox

Anonimo
2019-09-09T08:25:27+00:00

Buongiorno,

spero che possiate aiutarmi con questo nuovo problema.

Ho due file excel (.xlsx e .xlsb) entrambi aperti; io vorrei che nel file .xlsb, in listbox contenuta in una userform, mi caricasse tutti i dati e non l'ultima riga del file .xlsx, sheet1.

Una volta caricati, sono 25 colonne, nella colonna 20 seleziono il dato, lo modifico e la stessa deve avvenire nel file esterno.

La modifica avverrà solo nella colonna 20, nessuna aggiunta e nessuna eliminazione.

Sono 25 colonne perchè devo sapere quale riga sto modificando, ecco perchè ho bisogno della visualizzazione delle colonne.

Grazie mille per ogni suggerimento e a presto,

Sol39

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-09-10T14:33:10+00:00

Ciao Sol39,

Norman scusa... ma succede anche a te che i valori nella listbox vengono ripetuti?

Fammi sapere al più presto e grazie mille dell'aiuto!

Per ovviare questo, sostituisci il codice nel modulo di codice della Userform con la seguente versione:

'=========>>

Option Explicit

Dim srcRng As Range

'--------->>

Private Sub UserForm_Initialize()

    Dim srcWB As Workbook

    Dim srcSH As Worksheet

    Dim arrIn As Variant

    Dim LRow As Long

    Const sFile_Sorgente As String = "Sol20190909.xlsx"         '<<=== Modifica

    Const sFoglio_Sorgente As String = "Sheet1"                    '<<=== Modifica

    Set srcWB = Workbooks(sFile_Sorgente)

    Set srcSH = srcWB.Sheets(sFoglio_Sorgente)

    With srcSH

        LRow = LastRow(srcSH, .Columns("A:A"))

        Set srcRng = .Range("A2:T" & LRow)

    End With

    arrIn = srcRng.Value   

    With Me.ListBox1

        .ColumnCount = 25

        .ColumnWidths = _

        "50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50"

        .List = arrIn

        .TextColumn = 20

    End With

End Sub

'--------->>

Private Sub CommandButton1_Click()

    Dim arrIn As Variant

    Dim arrListBox As Variant

    Dim iRow As Long

    With Me

        iRow = .ListBox1.ListIndex + 1

        srcRng.Cells(iRow, "T").Value = .TextBox2.Text

        arrIn = srcRng.Value

        .ListBox1.List = arrIn

        .TextBox1.Text = .TextBox2.Text

        .TextBox2.Text = vbNullString

    End With

End Sub

'--------->>

Private Sub ListBox1_Change()

    Me.TextBox1.Text = Me.ListBox1.Text

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-09-09T13:38:55+00:00

Ciao Sol39,

spero che possiate aiutarmi con questo nuovo problema.

Ho due file excel (.xlsx e .xlsb) entrambi aperti; io vorrei che nel file .xlsb, in listbox contenuta in una userform, mi caricasse tutti i dati e non l'ultima riga del file .xlsx, sheet1.

Una volta caricati, sono 25 colonne, nella colonna 20 seleziono il dato, lo modifico e la stessa deve avvenire nel file esterno.

La modifica avverrà solo nella colonna 20, nessuna aggiunta e nessuna eliminazione.

Sono 25 colonne perchè devo sapere quale riga sto modificando, ecco perchè ho bisogno della visualizzazione delle colonne.

Grazie mille per ogni suggerimento e a presto,

Prova qualcosa del genere:

In un modulo standard, incolla il seguente codice:

'=========>>

Option Explicit

'--------->>

Public Sub Tester()

    UserForm1.Show vbModeless

End Sub

'--------->>

Public Function LastRow(SH As Worksheet, _

                        Optional rng As Range, _

                        Optional minRow As Long = 1, _

                        Optional sPassword As String)

    Dim bProtected As Boolean

    With SH

        If rng Is Nothing Then

            Set rng = .Cells

        End If

        bProtected = .ProtectContents = True

        If bProtected Then

            Application.ScreenUpdating = False

            .Unprotect Password:=sPassword

        End If

    End With

    On Error Resume Next

    LastRow = rng.Find(What:="*", _

                       after:=rng.Cells(1), _

                       Lookat:=xlPart, _

                       LookIn:=xlFormulas, _

                       SearchOrder:=xlByRows, _

                       SearchDirection:=xlPrevious, _

                       MatchCase:=False).Row

    On Error GoTo 0

    If LastRow < minRow Then

        LastRow = minRow

    End If

    If bProtected Then

        SH.Protect Password:=sPassword, _

                   UserInterfaceOnly:=True

    End If

    Application.ScreenUpdating = True

End Function

'<<=========

Nel modulo di codice della tua Userfoem, incolla:

'=========>>

Option Explicit

Dim srcRng As Range

'--------->>

Private Sub UserForm_Initialize()

    Dim srcWB As Workbook

    Dim srcSH As Worksheet

    Dim arrIn As Variant, arrListBox As Variant

    Dim LRow As Long

    Const sFile_Sorgente As String = "Sol20190909.xlsx"             '<<=== Modifica

    Const sFoglio_Sorgente As String = "Sheet1"                          '<<=== Modifica

    Set srcWB = Workbooks(sFile_Sorgente)

    Set srcSH = srcWB.Sheets(sFoglio_Sorgente)

    With srcSH

        LRow = LastRow(srcSH, .Columns("A:A"))

        Set srcRng = .Range("A2:T" & LRow)

    End With

    arrIn = srcRng.Value

    arrListBox = Application.Index(arrIn, [Row(1:100)], Array(20, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 18, 19, 21, 22, 23, 24, 25))

    With Me.ListBox1

        .ColumnCount = 25

        .ColumnWidths = _

              "50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50;50"

        .List = arrListBox

        .TextColumn = 1

    End With

End Sub

'--------->>

Private Sub CommandButton1_Click()

    Dim iRow As Long

    iRow = Me.ListBox1.ListIndex + 1

    srcRng.Cells(iRow, "T").Value = Me.TextBox2.Text

End Sub

'--------->>

Private Sub ListBox1_Change()

    Me.TextBox1.Text = Me.ListBox1.Text

End Sub

'<<=========

Potresti scaricare i miedi file di prova Sol20190909.xlsb e Sol20190909.xlsx

Con questo approccio, i dati della colonna T vengono visualizzati nella prima colonna della ListBox e TextBox1 visualizza il valore della colonna T della riga selezionata della ListBox. Premendo il CommandButton, il valore corrispondente della colonna T del foglio di origine viene sostituito con il valore che viene inserito nel controllo TextBox2.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-09-11T08:40:08+00:00

    Ciao Sol39,

    scusatemi voi tutti se non ho risposto.

    Volevo far sapere che ho risolto grazie al codice di Norman.

    Vi ringrazio tutti per il supporto e a presto.

    Mi fa piacere che tu abbia risolto il problema e ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman 

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-09-11T08:04:53+00:00

    Buongiorno,

    scusatemi voi tutti se non ho risposto.

    Volevo far sapere che ho risolto grazie al codice di Norman.

    Vi ringrazio tutti per il supporto e a presto.

    Saluti,

    Sol39

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-09-11T00:25:26+00:00

    Scusa il ritardo nella risposta Sol, volevo chiederti se il codice all’interno della userform e scritto da te

    Domani in giornata ti propongo una soluzione oggi ho avuto poco tempo!

    La risposta è stata utile?

    0 commenti Nessun commento