Xin cho hỏi về If trong VBA

Liên hệ QC

trananhtommy

Thành viên hoạt động
Tham gia
11/12/06
Bài viết
111
Được thích
6
Chào các Bác.

Em làm 2 cái If trong VBA để chạy trong 2 trường hợp K2=1 và K2=0. Sau khi làm xong chạy OK, nhưng hôm nay dở chứng. Mỗi lần chạy macro nó thực thi luôn cả 2 lần copy.. Code của E đây ạ, nhờ các Bác chỉ giúp E bị sai chỗ nào với..:

Mã:
Sub ghidulieu()'
' ghidulieu Macro
'
' Keyboard Shortcut: Ctrl+Shift+S
'
Dim khongrong As String
    Dim cells As Range
    khongrong = "U13"
    Set cells = Sheets("Capnhat").Range(khongrong)
        If Application.Sum(cells) = 1 Then
            MsgBox "Thieu ma KH (hoac) thong tin hoa don GTGT, phai nhap du.. !"
            Exit Sub
        End If
       
    If [K2] = 1 Then
    Range("D4:G4").Select
    Sheets("Dulieu").Select
    Rows("6:7").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Range("A1:T2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "0"
    Range("A4").Select
    Sheets("SoQuyTM").Select
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "=today()"
    Sheets("Capnhat").Select
    Range("A2:G2").Select
    End If
    
    If [K2] = 0 Then
    Range("D4:G4").Select
    Sheets("Dulieu").Select
    Rows("6:6").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Range("A1:T1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "0"
    Range("A4").Select
    Sheets("SoQuyTM").Select
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=today()"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "=today()"
    Sheets("Capnhat").Select
    Range("A2:G2").Select
    End If
    
End Sub

Nhờ các Bác chỉ giúp E, E đang rất cần, cảm ơn các Bác nhiều ạ.
 
Bạn đưa code không ai biết đường nào mà lần. Ít ra phải có file để test thì mới biết sai chỗ nào chứ.
 
Upvote 0
Chào các Bác.

Em làm 2 cái If trong VBA để chạy trong 2 trường hợp K2=1 và K2=0. Sau khi làm xong chạy OK, nhưng hôm nay dở chứng. Mỗi lần chạy macro nó thực thi luôn cả 2 lần copy.. Code của E đây ạ, nhờ các Bác chỉ giúp E bị sai chỗ nào với..:


Nhờ các Bác chỉ giúp E, E đang rất cần, cảm ơn các Bác nhiều ạ.

Nhìn code hoa hết cả mắt, nhưng mà nói chung câu lệnh của bạn :
PHP:
IF [K2] =1 then
 ..........
END IF
IF [K2]=0 then
............
END IF

Trong trường hợp VBA thực hiện cả 2 câu lệnh if trên, thì có thể là sau khi thực hiện khối lệnh IF [K2] =1 có đoạn code nào gán lại giá trị [k2] = 0 ......( vân vân và vân vân)

Nếu [K2] chỉ có 2 giá trị 0 và 1 thì sao bạn không viết như vầy :
PHP:
IF [K2] then
................Code nếu [K2]=1
Else
.................Code nếu [K2] =0
End if
 
Upvote 0
Nhìncode hoa hết cả mắt, nhưng mà nói chung câu lệnh của bạn :

PHP:
IF[K2] =1 then
 ..........
END IF
IF[K2]=0 then
............
END IF

Trongtrường hợp VBA thực hiện cả 2 câu lệnh if trên, thì có thể là sau khi thực hiệnkhối lệnh IF [K2] =1 có đoạn code nào gán lại giá trị [k2] = 0 ......( vân vânvà vân vân)

Nếu[K2] chỉ có 2 giá trị 0 và 1 thì sao bạn không viết như vầy :
PHP:
IF [K2]then
................Codenếu [K2]=1
Else
.................Codenếu [K2] =0
End if


Vâng,rất xin lỗi các Bác vì không chuyển file đính kèm, E xin chuyển luôn đây...

Thựcra ô K2 chỉ có 2 giá trị 0 và 1 thôi. E muốn macro khi kiểm tra K2=0 thì chạy 1đoạn mã riêng (Copy và dán xuống dưới 1 dòng) và K2=1 thì chạy mã khác (copy vàdán xuống dưới 2 dòng) thôi mà. Nhưng không hiểu sao khi chạy nó thực thi luôncả 2 mã dù K2 có bằng 0 hay bằng 1 đi nữa...

CácBác chỉ giúp E với..

 

File đính kèm

  • VD.rar
    50.6 KB · Đọc: 97
Upvote 0
Cái dòng ..... code nếu [K2] = 1 viết bằng ngôn ngữ macro thì viết như thế nào Bác nhỉ? E toàn dùng lệnh record macro có sẵn của máy, chưa biết viết Bác ạ..
 
Upvote 0
Cao thủ nào ngó xem, chỉ giúp cho em với....
 
Upvote 0
Cao thủ nào ngó xem, chỉ giúp cho em với....

thôi bạn mô tả là bạn muốn làm gì luôn đi, tôi thấy có vẻ cũng ko phức tạp lắm. nhưng phải đọc code của bạn để hiểu rồi sửa lại thì phê quá.bạn mô tả rỏ ràng do [k]=1 thì copy chổ nào qua chổ nào, [k]=2 thì copy chổ nào qua chồ nào....vậy đi cho dể hiểu
nhân tiệc bạn bỏ protect sheet luôn đi
 
Upvote 0
thôi bạn mô tả là bạn muốn làm gì luôn đi, tôi thấy có vẻ cũng ko phức tạp lắm. nhưng phải đọc code của bạn để hiểu rồi sửa lại thì phê quá.bạn mô tả rỏ ràng do [k]=1 thì copy chổ nào qua chổ nào, [k]=2 thì copy chổ nào qua chồ nào....vậy đi cho dể hiểu
nhân tiệc bạn bỏ protect sheet luôn đi

Vâng, cái E muốn là:
Nếu K2=1 sẽ:
- Chuyển sang sheet Dulieu
- Copy dòng 6 và 7
- Insert 2 dòng này
- Copy dòng 1 và 2 (A1:T2)
- Dán xuống dòng 6 và 7 (value)
Xong.

Nếu K2=0 sẽ:
- Chuyển sang sheet Dulieu
- Copy dòng 6
- Insert dòng này xuống
- Copy dòng 1 (A1:T1)
- Dán xuống dòng 6 (value)
Xong.

Vậy thôi ạ. Chủ yếu để ghi những dữ liệu phát sinh có thuế thì ghi thành 2 dòng, còn k thì ghi thành 1 dòng chứng từ thôi ấy mà...

File E đã bỏ protect, các Bác cao thủ vào xem chỉ hộ E tý...
 

File đính kèm

  • VD.rar
    50 KB · Đọc: 39
Lần chỉnh sửa cuối:
Upvote 0
Vâng, cái E muốn là:
Nếu K2=1 sẽ:
- Chuyển sang sheet Dulieu
- Copy dòng 6 và 7
- Insert 2 dòng này
- Copy dòng 1 và 2 (A1:T2)
- Dán xuống dòng 6 và 7 (value)
Xong.

Nếu K2=0 sẽ:
- Chuyển sang sheet Dulieu
- Copy dòng 6
- Insert dòng này xuống
- Copy dòng 1 (A1:T1)
- Dán xuống dòng 6 (value)
Xong.

Vậy thôi ạ. Chủ yếu để ghi những dữ liệu phát sinh có thuế thì ghi thành 2 dòng, còn k thì ghi thành 1 dòng chứng từ thôi ấy mà...

File E đã bỏ protect, các Bác cao thủ vào xem chỉ hộ E tý...

ok thử đoạn code này xem

Sub ghidulieu()
Dim khongrong As String
Dim cells As Range
khongrong = "U13"
Set cells = Sheets("Capnhat").Range(khongrong)
If Application.Sum(cells) = 1 Then
MsgBox "Thieu ma KH (hoac) thong tin hoa don GTGT, phai nhap du.. !"
Exit Sub
End If

If [K2].Value = 1 Then
With Sheets("Dulieu")
.Rows("6:7").Insert
.[A6:T7].Value = .[a1:T2].Value
End With
ElseIf [K2].Value = 0 Then

With Sheets("Dulieu")
.Rows("6:6").Insert
.[A6:T6].Value = .[a1:T1].Value
End With
End If

End Sub
 
Upvote 0
ok thử đoạn code này xem

Sub ghidulieu()
Dim khongrong As String
Dim cells As Range
khongrong = "U13"
Set cells = Sheets("Capnhat").Range(khongrong)
If Application.Sum(cells) = 1 Then
MsgBox "Thieu ma KH (hoac) thong tin hoa don GTGT, phai nhap du.. !"
Exit Sub
End If

If [K2].Value = 1 Then
With Sheets("Dulieu")
.Rows("6:7").Insert
.[A6:T7].Value = .[a1:T2].Value
End With
ElseIf [K2].Value = 0 Then

With Sheets("Dulieu")
.Rows("6:6").Insert
.[A6:T6].Value = .[a1:T1].Value
End With
End If

End Sub

Rất cám ơn Bác đã bỏ thời gian giúp đỡ. E đã làm được rồi ạ.. cảm ơn rất nhiều..
 
Lần chỉnh sửa cuối:
Upvote 0
rút file đính kèm

Rất cám ơn Bác đã bỏ thời gian giúp đỡ. Nhưng không được Bác ạ (Lúc K2=1 thì nó chả copy 2 dòng xuống dưới).. buồn thật


làm được rồi thì tôi rút file xuống nha (tiết kiệm, lúc này hết quota up bài)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom