Hỏi đáp về VBA

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,440
Nghề nghiệp
Bác sĩ
Câu hỏi 1 : Lấy giá trị của ô trong VB như thế nào ?

Hỏi :

Dùng Refedit, khi người dùng chọn 1 ô nào đó rồi, không biết làm sao để lấy giá trị của ô đó, help me...

Mình đã biết hàm Cells(x,y) để lấy giá trị của một ô, nhưng khi dùng refedit thì giá trị của refedit là Data!$A$5.
Vậy nếu dùng Cells thì phải có toạ độ dòng của ô A5, nên cần phải xử lý chuỗi để lấy được chữ "A" và số "5".

Nếu dùng Rows hay Columns thì cũng phải có toạ độ dòng và cột, như vậy cũng bằng không.

Mình làm được như vậy, nhưng rắc rối quá.
Các bạn có biết hàm nào để lấy thẳng giá trị của ô đó không chỉ cho mình, nghĩa là lấy thẳng gía trị của ô mà người dùng chọn trong Refedit, mà khong phải xử lý chuỗi để lấy cột và dòng.

Trả lời :

Giả sử trong Form của bạn có control "RefEdit" đặt tên là RefEdit1 (đối tượng lấy địa chỉ ô hay vùng có kiểu là Text).
Để lấy giá trị Range(RefEdit1.Text).Value
Để lấy công thức Range(RefEdit1.Text).Formula
Để lấy cột bạn Range(RefEdit1.Text).Column
Để lấy dòng bạn Range(RefEdit1.Text).Row
Để lấy số cột Range(RefEdit1.Text).Columns.Count
Để lấy số dòng Range(RefEdit1.Text).Rows.Count
Nếu không đúng mục đích của bạn thì bạn giải thích thêm yêu cầu của bạn.
Chúc bạn thành công!
 
bạn sửa lại lệnh Find một chút
Mã:
Set timkiem = [D1:D1000].Find(Search, , , xlWhole)

mà mục đích của bạn khi dùng hàm InStr là để làm gì vậy?

em lại làm phiền anh nữa rồi
vì cột D nó gồm nhiều dữ liệu
nên nếu nó nằm ở sau kết quả cần tìm sẽ chạy rất lâu
để cải thiện anh viết code lại cho về đầu cột D rồi tìm dc ko anh
xin chân thành cảm ơn anh! em mới tìm hiểu về code nên ko biết tí gì cả mong anh thông cảm
em chỉ tìm trên mạng thôi em ko biết gì về inStr cả
 
Lần chỉnh sửa cuối:
Upvote 0
em lại làm phiền anh nữa rồi

nên nếu nó nằm ở sau kết quả cần tìm sẽ chạy rất lâu

tôi không hiểu bạn hỏi gì, cái gì nằm sau kết quả cần tìm???

============
bạn cứ thoải mái trao đổi, tôi cũng như bạn thôi, cứ dzọc riết thì biết chút đỉnh, đủ viết code tự xài
.hihì
 
Upvote 0
ô làm việc đang nằm ở ô d115 nhưng kết quả đang ở ô d10 nó sẽ chạy từ d115 trở xuống ko có nó mới tìm từ d1
cho nên sẽ rất chậm, nếu tìm ngay từ đầu ô d1 sẽ nhanh hơn
 
Upvote 0
ô làm việc đang nằm ở ô d115 nhưng kết quả đang ở ô d10 nó sẽ chạy từ d115 trở xuống ko có nó mới tìm từ d1
cho nên sẽ rất chậm, nếu tìm ngay từ đầu ô d1 sẽ nhanh hơn

tôi không thực sự hiểu bạn hỏi gì lắm, tôi chưa gặp vấn đề tốc độ tìm kiếm bằng find methode, nó tìm rất nhanh.
==============
theo như câu lệnh trên, thì vùng tìm kiếm sẻ là [d1:d1000], tức là nó sẻ tìm từ D2:d1000, bạn có thể thay đổi cho phù hợp với nhu cầu của bạn.
.....................................
nếu có cao thủ đi qua, giúp bạn sẻ rỏ hơn
thân
 
Upvote 0
cảm ơn bạn nhiều nhe
mình còn mới tìm hiểu về code
ví dụ: ô c1 ở sheet 2 =sheet1!a1
ô b1 ở sheet 2 =sheet1!b1
tức là a1 sét 1 đánh chữ tuan thì c1 sét 2 có chữ tuan
b1 sét 1 đánh chữ tèo thì b1 sét 2 có chữ tèo
muốn viết bằng code thay vì dùng công thức trên phải làm sao
 
Upvote 0
cảm ơn bạn nhiều nhe
mình còn mới tìm hiểu về code
ví dụ: ô c1 ở sheet 2 =sheet1!a1
ô b1 ở sheet 2 =sheet1!b1
tức là a1 sét 1 đánh chữ tuan thì c1 sét 2 có chữ tuan
b1 sét 1 đánh chữ tèo thì b1 sét 2 có chữ tèo
muốn viết bằng code thay vì dùng công thức trên phải làm sao

bạn có thể sử dụng sự kiện worksheet change
trong đó có lệnh sheet2.[a1]=sheet1.[a1]
bạn hãy hình dung ra ý tưởng phải làm sao, rồi lên diễn đàn search
 
Upvote 0
Worksheet change là gì vậy có thể hướng dẫn cách thực hiện dc ko bạn

sao bạn ko sử dụng google?
bạn nhấn phím Alt F11 (mở cửa sổ VBA)
nhấp double vào sheet1
chép đoạn code này vào đó
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [A1:A10]) Is Nothing Then
            Sheet2.[a100].End(3).Offset(1) = Target
    End If
End Sub
=======
khi vào cửa sổ vba, bạn sẻ thấy box bên trái, nhấp vào đó bạn sẻ thấy có nhiều sự kiện (event)
nói chung bạn tìm và đọc trên diễn đàn này rất nhiều, ví dụ như cái này

http://www.giaiphapexcel.com/forum/showthread.php?45456-Ý-nghĩa-và-cách-dùng-các-sự-kiện-trong-VBA
 
Upvote 0
bạn ơi ko dc rồi
nó ko cố định rồi
vì nhập a1 sheet1 qua a2 sheet2
sửa dữ liệu ô a1 sheet1 nó hiện dữ liệu ô a3 sheet 2
 
Upvote 0
bạn ơi ko dc rồi
nó ko cố định rồi
vì nhập a1 sheet1 qua a2 sheet2
sửa dữ liệu ô a1 sheet1 nó hiện dữ liệu ô a3 sheet 2
Nếu chỉ tham chiếu như dạng công thức: Sheet2!F3 =Sheet1!A1, thì code viết: Sheet2.Range("F3") = Sheet1.Range("A1"), hoặc: Sheet2.[F3]=Sheet1.[A1]
Do sử dụng thuộc tính End, nên giá trị "không cố định" như theo cách nói của bạn. (Tham khảo Thuộc tính End).
Nếu tham chiếu đúng vị trí từng ô của sheet này với sheet khác thì tham khảo code sau:
[gpecode=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [A1:D10]) Is Nothing Then
Sheet2.Range(Target.Address) = Target
End If
End Sub
[/gpecode]
 
Upvote 0
ví dụ như file này thì sao bạn
 

File đính kèm

Upvote 0
vì bên sheet 2 các cột ko theo tứ tự sheet 1
sheet 2 như sau: cột a=cột d sheet 1, b=bsheét, c=csheet1, d=asheet1

chắc là vậy
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
    If Not Intersect(Target, [A1:D60000]) Is Nothing Then
            If Target.Column = 1 Then
                Sheet2.Range(Target.Address).Offset(, 3) = Target
            ElseIf Target.Column = 4 Then
                Sheet2.Range(Target.Address).Offset(, -3) = Target
            Else
                Sheet2.Range(Target.Address) = Target
            End If
    End If
Application.EnableEvents = True
On Error GoTo 0
End Sub
 
Upvote 0
đánh máy nhập quá sheet 2
copy hay kéo chuột nó ko qua bạn ơi
code sao nó tương đương công thức như a1 sheet1=a1 sheet2
 
Upvote 0
đánh máy nhập quá sheet 2
copy hay kéo chuột nó ko qua bạn ơi
code sao nó tương đương công thức như a1 sheet1=a1 sheet2

khó hỉ?
chép đoạn code này cho sheet2
Mã:
Private Sub Worksheet_Activate()
Sheet2.[A1].Resize(Sheet1.[D1000].End(3).Row).Value = Sheet1.[D1].Resize(Sheet1.[D1000].End(3).Row).Value
Sheet2.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value = Sheet1.[B1].Resize(Sheet1.[B1000].End(3).Row, 2).Value
Sheet2.[D1].Resize(Sheet1.[A1000].End(3).Row).Value = Sheet1.[A1].Resize(Sheet1.[A1000].End(3).Row).Value
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom