Cách lấy giá trị của ô gán vào Mảng bằng VBA

Liên hệ QC

sacalataba127

Thành viên hoạt động
Tham gia
6/4/16
Bài viết
148
Được thích
12
Giới tính
Nam
Em muốn lấy giá trị của nhiều ô gán vào mảng để hiển thị dữ liệu khi chạy combobox ạ,
em bị lỗi lấy dữ liệu và gán vào mảng ạ
Em có gửi file đính kèm, các bác giúp với ạ.
Chúc các bác cuối tuần vui vẻ ạ
 

File đính kèm

  • CÂU HỎI Ạ.xlsm
    390.4 KB · Đọc: 7
Mọi người ơi, giúp e với ạ
 
Em muốn lấy giá trị của nhiều ô gán vào mảng để hiển thị dữ liệu khi chạy combobox ạ,
em bị lỗi lấy dữ liệu và gán vào mảng ạ
Em có gửi file đính kèm, các bác giúp với ạ.
Chúc các bác cuối tuần vui vẻ ạ
bạn đăng cái code bạn lỗi lên xem nào
 
đây ạ
 

File đính kèm

  • Ảnh chụp màn hình (19)_LI.jpg
    Ảnh chụp màn hình (19)_LI.jpg
    652.5 KB · Đọc: 16
Câu lệnh này đang không chuẩn:
Mã:
showList1 = shSanPham.Range("B25:K25" & shSanPham.[K25].End(xlToLeft).Column)
 
Vậy ước mong kết quả sau câu lệnh này là gì?
Fải chăng gán dữ liệu vùng [B25:K25] vô mảng?
Nếu là câu lệnh
Mã:
showList1 = shSanPham.Range({B25], [K25].End(xlToLeft))
Lại là chuyện khác.
 
Vậy ước mong kết quả sau câu lệnh này là gì?
Fải chăng gán dữ liệu vùng [B25:K25] vô mảng?
Nếu là câu lệnh
Mã:
showList1 = shSanPham.Range({B25], [K25].End(xlToLeft))
Lại là chuyện khác.
mục đích để combobox ở ô K4 sheet Nhập Bán hiện hiên dữ liệu lấy từ Sheet Sản Phẩm đó ạ
Đoạn mã vừa rồi vẫn ko được ạ
 
Sửa thành
Mã:
Sub CreateList1()
Dim lastCol As Long
    With Sheet3
        lastCol = .Range("L25").End(xlToLeft).Column
        If lastCol = 2 Then
            ReDim showList1(1 To 1, 1 To 1)
            showList1(1, 1) = .Range("B25").Value
        ElseIf lastCol > 2 Then
            showList1 = .Range("B25").Resize(, lastCol - 1).Value
        End If
    End With
    cc = UBound(showList1)
End Sub

Tôi chỉ sửa showList1 thôi. Không có hứng xem các code khác.
 
Sửa thành
Mã:
Sub CreateList1()
Dim lastCol As Long
    With Sheet3
        lastCol = .Range("L25").End(xlToLeft).Column
        If lastCol = 2 Then
            ReDim showList1(1 To 1, 1 To 1)
            showList1(1, 1) = .Range("B25").Value
        ElseIf lastCol > 2 Then
            showList1 = .Range("B25").Resize(, lastCol - 1).Value
        End If
    End With
    cc = UBound(showList1)
End Sub

Tôi chỉ sửa showList1 thôi. Không có hứng xem các code khác.
cảm ơn bác. nhưng khi dùng Ubound(showlist1) thì chỉ = 1 trong khi có tới 10
Bác xem giùm e thử
 
cảm ơn bác. nhưng khi dùng Ubound(showlist1) thì chỉ = 1 trong khi có tới 10
Bác xem giùm e thử
Thì bạn cố tình làm thế còn kêu gì? Bạn nhập 1 dòng vào mảng thì dĩ nhiên mảng đó có 1 dòng (1 hoặc nhiều cột), tức Ubound(showList1) = 1 là đúng rồi còn gì.

Nhưng cái đó đâu có quan trọng. Tôi thấy là trong code mà tôi đã không xem thì có
Mã:
ComboBox1.List = Application.Transpose(showList1)
Tức khi đó trong ComboBox1 sẽ có nhiều dòng.

Còn nếu muốn khác thì.

1. Bỏ
Mã:
Public showList1()
Public cc As Long

2.
Mã:
Sub CreateList1()
Dim lastCol As Long, showList1()
    With Sheet3
        lastCol = .Range("L25").End(xlToLeft).Column
        If lastCol = 2 Then
            ReDim showList1(1 To 1, 1 To 1)
            showList1(1, 1) = .Range("B25").Value
        ElseIf lastCol > 2 Then
            showList1 = .Range("B25").Resize(, lastCol - 1).Value
        End If
    End With
    Sheet5.ComboBox1.List = Application.Transpose(showList1)
End Sub
3. Trong các code còn lại không dùng showList1 nữa.
 
Thì bạn cố tình làm thế còn kêu gì? Bạn nhập 1 dòng vào mảng thì dĩ nhiên mảng đó có 1 dòng (1 hoặc nhiều cột), tức Ubound(showList1) = 1 là đúng rồi còn gì.

Nhưng cái đó đâu có quan trọng. Tôi thấy là trong code mà tôi đã không xem thì có
Mã:
ComboBox1.List = Application.Transpose(showList1)
Tức khi đó trong ComboBox1 sẽ có nhiều dòng.

Còn nếu muốn khác thì.

1. Bỏ
Mã:
Public showList1()
Public cc As Long

2.
Mã:
Sub CreateList1()
Dim lastCol As Long, showList1()
    With Sheet3
        lastCol = .Range("L25").End(xlToLeft).Column
        If lastCol = 2 Then
            ReDim showList1(1 To 1, 1 To 1)
            showList1(1, 1) = .Range("B25").Value
        ElseIf lastCol > 2 Then
            showList1 = .Range("B25").Resize(, lastCol - 1).Value
        End If
    End With
    Sheet5.ComboBox1.List = Application.Transpose(showList1)
End Sub
3. Trong các code còn lại không dùng showList1 nữa.
cảm ơn bác đã chỉ. Nhưng em còn sử dụng chúng cho nhiều mục đích nữa nên mới khai báo vậy
Có cách nào chỉ lấy ra List đó có chứa 10 phần tử đó ko ạ
 
Nếu thế thì tại sao trong các code tiếp theo lại có ComboBox1.List = Application.Transpose(showList1)? Một khi đã muốn showList1 có 10 dòng 1 cột thì hãy bỏ cái trên đi.

Mã:
Public showList1()

Sub CreateList1()
Dim lastCol As Long
    With Sheet3
        lastCol = .Range("L25").End(xlToLeft).Column
        If lastCol = 2 Then
            ReDim showList1(1 To 1, 1 To 1)
            showList1(1, 1) = .Range("B25").Value
        ElseIf lastCol > 2 Then
            showList1 = Application.Transpose(.Range("B25").Resize(, lastCol - 1).Value)
        End If
    End With
End Sub

Nếu vẫn code cũ thì khi cần thiết sẽ
Mã:
...
Arr = ComboBox1.List
... dùng Arr
 
Web KT
Back
Top Bottom