Chuyên đề giải đáp những thắc mắc về code VBA

lantn90

Thành viên mới
Tham gia ngày
27 Tháng mười 2019
Bài viết
1
Được thích
0
Điểm
13
Tuổi
29
Help Me!!!
Kính gửi các anh chị trên diễn đàn mình, em mới học VBA nên chưa biết sửa code đúng cách, rất mong các anh chị chỉ giáo giúp em.
chẳng là e muốn lấy danh sách những ông bà (gồm tất cả các cột như trong file data1) mà có giá trị tại cột PENINT và/hoăc cột BILINT và/hoặc cột BILPRN #0 sang báo cáo tại file final. Tức là nếu giá trị tại 3 cột trền đều bằng 0 thì e ko lấy.
E đã viết code, nhưng mắc lỗi và không biết sửa.
P/s: Các anh/chị có thể thay đổi đương dẫn trong code để mở file data1 ạ.
Mong các anh chị xem sớm giúp e với, em cảm ơn rất rất nhiều ạ.
 

File đính kèm

Lần chỉnh sửa cuối:

huongmuine

Thành viên GPE
Tham gia ngày
27 Tháng năm 2010
Bài viết
208
Được thích
31
Điểm
685
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,638
Được thích
2,538
Điểm
360
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
Bạn hiểu đoạn code trên không.Đó là 4 hàm if lồng nhau.Cái điều kiện cuối cùng thì cần phải đúng 4 cái thì mới được thực hiện.Nên không thể rút gọn được.
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,598
Được thích
8,099
Điểm
910
Nơi ở
Bình Dương
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
Nếu D48 = Empty và D54 <> Empty thì AQ53 có bằng "." không? Nếu AQ53 = "." thì tôi nghĩ code trên còn thiếu.
 

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
6,993
Được thích
13,644
Điểm
1,560
Bạn hiểu đoạn code trên không.Đó là 4 hàm if lồng nhau.Cái điều kiện cuối cùng thì cần phải đúng 4 cái thì mới được thực hiện.Nên không thể rút gọn được.
Dùng
For ...
if ....
....
else
exit for
end if
next
 

hungyen2010

Thành viên mới
Tham gia ngày
18 Tháng mười 2010
Bài viết
10
Được thích
0
Điểm
363
hi cả nhả e đang làm thông báo điểm với bảng điểm từ file excel sang file thông báo là file word nhưng vị trí bảng điểm hiện thị trong file word không đúng vị trí mà luôn hiện ở cuối trang word mong các bác giúp em.Em cảm ơn
 

File đính kèm

tonnydung

Thành viên chính thức
Tham gia ngày
4 Tháng một 2016
Bài viết
55
Được thích
1
Điểm
170
Em nhờ các bác giúp 4 trường hợp sau giúp:


1/ Code VBA để coppy sau VD: Sheet 1
Khi ta dang Mở File A ở Sheet 1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet1 File C những cột A,B,C,D Nếu thỏa cột B có chữ "nhà xe" vào Sheet1 File A


2/ Code VBA để coppy sau VD: Sheet 2
Khi ta dang Mở Sheet2 File A ở Sheet 2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet2 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa cột C Không có chữ "HQ" vào Sheet2 File A

3/ Code VBA để coppy sau VD: Sheet 3
Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột A trong Sheet3 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet3 FileC không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột C,D,E của Sheet3 FileC sang các cột C,D,E của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

4/ Code VBA trong Form VD: Sheet 4
Trong 1 Form có 2 text boxt sau:
Text boxt 1, Text boxt 2
Khi nhập dữ liệu vào Text boxt 1 bấm enter thì Text boxt 2 ktra 3 ký tự đầu của
Text boxt 1 nếu có 3 chữ "kle" thì Text boxt 2 sẽ tự điền là "kh" còn ko có Text boxt 2 sẽ điền "nhà xe"
 

File đính kèm

Thong Hoang Tien 250691

Thành viên hoạt động
Tham gia ngày
14 Tháng năm 2017
Bài viết
141
Được thích
125
Điểm
180
Tuổi
29
Nơi ở
Tiên Du - Bắc Ninh
Em nhờ các bác giúp 4 trường hợp sau giúp:


1/ Code VBA để coppy sau VD: Sheet 1
Khi ta dang Mở File A ở Sheet 1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet1 File C những cột A,B,C,D Nếu thỏa cột B có chữ "nhà xe" vào Sheet1 File A


2/ Code VBA để coppy sau VD: Sheet 2
Khi ta dang Mở Sheet2 File A ở Sheet 2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet2 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa cột C Không có chữ "HQ" vào Sheet2 File A

3/ Code VBA để coppy sau VD: Sheet 3
Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột A trong Sheet3 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet3 FileC không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột C,D,E của Sheet3 FileC sang các cột C,D,E của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

4/ Code VBA trong Form VD: Sheet 4
Trong 1 Form có 2 text boxt sau:
Text boxt 1, Text boxt 2
Khi nhập dữ liệu vào Text boxt 1 bấm enter thì Text boxt 2 ktra 3 ký tự đầu của
Text boxt 1 nếu có 3 chữ "kle" thì Text boxt 2 sẽ tự điền là "kh" còn ko có Text boxt 2 sẽ điền "nhà xe"
Anh đọc lại nội quy đăng bài nhé. "2. Không được viết một câu hỏi nhiều lần hay gửi cùng một câu hỏi trong nhiều box khác nhau. Khi câu hỏi chưa được trả lời thì không có nghĩa là không ai biết thông tin liên quan đến câu hỏi của bạn và mọi người đang tìm thông tin để trả lời cho câu hỏi đó. "
Câu hỏi của anh em đã trả lời ở bên kia rồi.
 

tonnydung

Thành viên chính thức
Tham gia ngày
4 Tháng một 2016
Bài viết
55
Được thích
1
Điểm
170
Vì có những vẫn đề phát sinh và gửi nhầm sang chủ đề Form nên em xin gửi lại ở đây nhờ các bác giúp 3 trường hợp sau giúp:

1/ Code VBA để coppy sau VD: Sheet 1

Khi ta dang Mở File A ở Sheet1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet4 File C những cột A,B,C,D Nếu thỏa 2 điều kiện sau:
1/ cột B ở Sheet4 FileC có chữ "nhà xe"
2/ Nếu Sheet1 FileA cột A,C,D có thông tin trùng nhau thì Coppy đè lên cái đã có ở Sheet1 File A

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


2/ Code VBA để coppy sau VD: Sheet 2

Khi ta dang Mở Sheet2 File A ở Sheet2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet5 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa mãn cột C Không có chữ "HQ" vào Sheet2 File A => Để ko coppy nhiều lần nếu cột B,C,E của FileA trùng với dữ liệu sẽ coppy ở FileC sang thì sẽ ghi đè lên Sheet2 ở FileA

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


3/ Code VBA để coppy sau VD: Sheet 3

Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E,F,G,H,I,J,K và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột B trong Sheet6 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet6 FileC ở cột F, K không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột D,E,F,H,I,J của Sheet6 FileC sang các cột C,D,E, H,I,J của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)

Rất mong được giúp đỡ vì em rất cần. Tks
 

File đính kèm

Lần chỉnh sửa cuối:

tonnydung

Thành viên chính thức
Tham gia ngày
4 Tháng một 2016
Bài viết
55
Được thích
1
Điểm
170
Vì có những vẫn đề phát sinh và gửi nhầm sang chủ đề Form nên em xin gửi lại ở đây nhờ các bác giúp 3 trường hợp sau giúp:

1/ Code VBA để coppy sau VD: Sheet 1

Khi ta dang Mở File A ở Sheet1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet4 File C những cột A,B,C,D Nếu thỏa 2 điều kiện sau:
1/ cột B ở Sheet4 FileC có chữ "nhà xe"
2/ Nếu Sheet1 FileA cột A,C,D có thông tin trùng nhau thì Coppy đè lên cái đã có ở Sheet1 File A

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


2/ Code VBA để coppy sau VD: Sheet 2

Khi ta dang Mở Sheet2 File A ở Sheet2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet5 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa mãn cột C Không có chữ "HQ" vào Sheet2 File A => Để ko coppy nhiều lần nếu cột B,C,E của FileA trùng với dữ liệu sẽ coppy ở FileC sang thì sẽ ghi đè lên Sheet2 ở FileA

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


3/ Code VBA để coppy sau VD: Sheet 3

Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E,F,G,H,I,J,K và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột B trong Sheet6 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet6 FileC ở cột F, K không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột D,E,F,H,I,J của Sheet6 FileC sang các cột C,D,E, H,I,J của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)

Rất mong được giúp đỡ vì em rất cần. Tks
rất mong được sự giúp đỡ. tks
 

vova2209

Thành viên tiêu biểu
Tham gia ngày
5 Tháng tư 2017
Bài viết
602
Được thích
63
Điểm
220
Tuổi
33
Nơi ở
TP. Tuyên Quang
Chào anh chị! em hỏi về vòng for
cho em xin code về vòng for i = "chọn nhiều ô cell". VD vòng for mình muốn chạy thì chọn ô A1, A5, A7, A8 hoặc quét 1 dãy từ A1~A10 ở những ô đó lấy được giá trị cho vào vòng for
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,275
Được thích
4,920
Điểm
560
Chào anh chị! em hỏi về vòng for
cho em xin code về vòng for i = "chọn nhiều ô cell". VD vòng for mình muốn chạy thì chọn ô A1, A5, A7, A8 hoặc quét 1 dãy từ A1~A10 ở những ô đó lấy được giá trị cho vào vòng for
Mã:
Sub test()
Dim cell_ As Range
    For Each cell_ In Application.Selection
'        ...
    Next cell_
End Sub
 

vova2209

Thành viên tiêu biểu
Tham gia ngày
5 Tháng tư 2017
Bài viết
602
Được thích
63
Điểm
220
Tuổi
33
Nơi ở
TP. Tuyên Quang
Mã:
Sub test()
Dim cell_ As Range
    For Each cell_ In Application.Selection
'        ...
    Next cell_
End Sub
Xem hộ em lỗi đâu không in được
Mã:
Sub InBB_PhieuBeTong()
    Dim sRng As Range
    Dim Ws As Worksheet
    ActiveSheet.DisplayPageBreaks = False
    
    'On Error GoTo Thoat
    Set sRng = Application.InputBox(Prompt:="Chon Du liêu IN", Title:="Vùng Data", Type:=8)
    For Each sRng In Selection
        Sheets("6.Ctiet BT").Select
        With Ws
            ActiveSheet.DisplayPageBreaks = False
            .Range("AZ1").Value = sRng.Value
            .PrintOut 'Vùng in Set
            End With
    Next sRng
'Thoat:
    ActiveSheet.DisplayPageBreaks = False
End Sub
 

File đính kèm

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,638
Được thích
2,538
Điểm
360
Xem hộ em lỗi đâu không in được
Mã:
Sub InBB_PhieuBeTong()
    Dim sRng As Range
    Dim Ws As Worksheet
    ActiveSheet.DisplayPageBreaks = False
   
    'On Error GoTo Thoat
    Set sRng = Application.InputBox(Prompt:="Chon Du liêu IN", Title:="Vùng Data", Type:=8)
    For Each sRng In Selection
        Sheets("6.Ctiet BT").Select
        With Ws
            ActiveSheet.DisplayPageBreaks = False
            .Range("AZ1").Value = sRng.Value
            .PrintOut 'Vùng in Set
            End With
    Next sRng
'Thoat:
    ActiveSheet.DisplayPageBreaks = False
End Sub
Bạn sửa thành for each t in srng thì được.trong đó t là 1 biến range.và thay câu lệnh ở dưới là biến t nhé.
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,275
Được thích
4,920
Điểm
560
Xem hộ em lỗi đâu không in được
Mã:
Sub InBB_PhieuBeTong()
    Dim sRng As Range
    Dim Ws As Worksheet
    ActiveSheet.DisplayPageBreaks = False
  
    'On Error GoTo Thoat
    Set sRng = Application.InputBox(Prompt:="Chon Du liêu IN", Title:="Vùng Data", Type:=8)
    For Each sRng In Selection
        Sheets("6.Ctiet BT").Select
        With Ws
            ActiveSheet.DisplayPageBreaks = False
            .Range("AZ1").Value = sRng.Value
            .PrintOut 'Vùng in Set
            End With
    Next sRng
'Thoat:
    ActiveSheet.DisplayPageBreaks = False
End Sub
1. Nếu trước khi nhấn nút mà ô vd. BB64 đang được chọn thì Selection trong For Each sRng In Selection nó là 1 ô BB64 chứ không phải 2 ô vừa chọn ở 6.DV BT
2. Nếu đã chọn bằng InputBox thì các ô được chọn nó ở trong sRng rồi, sao lại dùng Selection?
3.
Mã:
With Ws
    ActiveSheet.DisplayPageBreaks = False
    .Range("AZ1").Value = sRng.Value
    .PrintOut 'Vůng in Set
End With
Chưa có SET nên Ws là Nothing và do vậy sẽ có lỗi tại
Mã:
.Range("AZ1").Value = sRng.Value
.PrintOut 'Vůng in Set
Cũng có thể không dùng Ws và SET mà dùng With Sheets("6.Ctiet BT")

4. Hãy hạn chế SELECT kiểu Sheets("6.Ctiet BT").Select. Không cần thiết.

Mã:
Sub InBB_PhieuBeTong()
    Dim sRng As Range, cell_ As Range
    'On Error GoTo Thoat
    ActiveSheet.DisplayPageBreaks = False
    Set sRng = Application.InputBox(Prompt:="Chon Du lięu IN", Title:="Vůng Data", Type:=8)
    For Each cell_ In sRng
        With Sheets("6.Ctiet BT")
            .Range("AZ1").Value = cell_.Value
            .PrintOut 'Vůng in Set
        End With
    Next cell_
'Thoat:
End Sub
 
Lần chỉnh sửa cuối:

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,275
Được thích
4,920
Điểm
560
Bạn sửa thành for each t in srng thì được.trong đó t là 1 biến range.và thay câu lệnh ở dưới là biến t nhé.
Thực ra vụ For Each sRng In Selection chỉ là nhập nhầm giá trị ô vào AZ1. Ví dụ trước khi nhấn nút mà BB64 được chọn thì Selection là BB64 và giá trị của BB64 sẽ được nhập vào AZ1. Nhưng đây là lỗi "kết quả không như mong đợi". Còn lỗi thực sự, lỗi thực hiện, "cho đi về với cát bụi" là lỗi do chưa có SET nên Ws = Nothing. Lúc đó thực hiện
Mã:
.Range("AZ1").Value = ...
.PrintOut 'Vůng in Set
sẽ có lỗi "đột quỵ"
 

vova2209

Thành viên tiêu biểu
Tham gia ngày
5 Tháng tư 2017
Bài viết
602
Được thích
63
Điểm
220
Tuổi
33
Nơi ở
TP. Tuyên Quang
1. Nếu trước khi nhấn nút mà ô vd. BB64 đang được chọn thì Selection trong For Each sRng In Selection nó là 1 ô BB64 chứ không phải 2 ô vừa chọn ở 6.DV BT
2. Nếu đã chọn bằng InputBox thì các ô được chọn nó ở trong sRng rồi, sao lại dùng Selection?
3.
Mã:
With Ws
    ActiveSheet.DisplayPageBreaks = False
    .Range("AZ1").Value = sRng.Value
    .PrintOut 'Vůng in Set
End With
Chưa có SET nên Ws là Nothing và do vậy sẽ có lỗi tại
Mã:
.Range("AZ1").Value = sRng.Value
.PrintOut 'Vůng in Set
Cũng có thể không dùng Ws và SET mà dùng With Sheets("6.Ctiet BT")

4. Hãy hạn chế SELECT kiểu Sheets("6.Ctiet BT").Select. Không cần thiết.

Mã:
Sub InBB_PhieuBeTong()
    Dim sRng As Range, cell_ As Range
    'On Error GoTo Thoat
    ActiveSheet.DisplayPageBreaks = False
    Set sRng = Application.InputBox(Prompt:="Chon Du lięu IN", Title:="Vůng Data", Type:=8)
    For Each cell_ In sRng
        With Sheets("6.Ctiet BT")
            .Range("AZ1").Value = cell_.Value
            .PrintOut 'Vůng in Set
        End With
    Next cell_
'Thoat:
End Sub
Được rồi anh à!, em cũng quên toàn dùng Sheets("6.Ctiet BT").Select Các anh cũng nhắc mà em quên mất
 

doanminh00

Thành viên mới
Tham gia ngày
26 Tháng mười 2010
Bài viết
1
Được thích
0
Điểm
363
Tuổi
30
Các bác cho mỉnh tí với.
Tình hình là mình có 1 bảng dữ liệu excel. Mình muốn từ bảng đấy mình mở 1 file word mà mình muốn merge đến vị trí mình mong muốn được không vậy.
Thanks các bác ạ!
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,275
Được thích
4,920
Điểm
560
Các bác cho mỉnh tí với.
Tình hình là mình có 1 bảng dữ liệu excel. Mình muốn từ bảng đấy mình mở 1 file word mà mình muốn merge đến vị trí mình mong muốn được không vậy.
Cảm ơn các bác ạ!
Đính kèm tập tin rồi dựa vào nó mô tả công việc. Làm gì, khi nào, như thế nào v...v thì may có người giúp. Còn nếu chỉ là một chút nước bọt thì chịu.
Nếu chỉ muốn câu trả lời "được" hay "không được" thì "được".
 
Top Bottom