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
