Chuyên mục xử lý, gỡ rối code VBA (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,970
Em có hàm như bên dưới, bây giờ em muốn them điều kiện dựa vào Bô phận sản xuất để xác định ngày nghỉ theo từng bộ phận sản xuất.
VD: Bộ phận sản xuất: thì có Ngày công chuẩn sản xuất - Ngày thực tế,
Bộ phận Văn phòng: thì có Ngày công chuẩn Văn phòng - Ngày thực tế,
..........
[NOTE1]Function Thuong(Byval NgayCongThucTe As Single, ByVal DK_Xet As String, Byval MucThuong As Double) Dim NgayNghi As Double
NgayNghi = NgayCongChuan - NgayCongThucTe
' Xac dinh ngay cong chuan dua vao Bo phan san xuat
If NgayNghi >= 14 Then
Thuong = 0
ElseIf NgayCongThucTe <= 20 Then
Select Case DK_Xet
Case Is = "OK"
Thuong = MucThuong
Case Else
Thuong = 0
End Select
ElseIf NgayCongThucTe >= 21 Then
Thuong = MucThuong
Else
Thuong = 0
End If
End Function


[/NOTE1]

Trân trọng cảm ơn
http://www.mediafire.com/download/neu2y77g52gyh0d/Thuong.xlsm
Rât mong được giúp đỡ
 
Upvote 0
Mình có file excel có code VBA. Khi sử dụng chức năng Share Workbook qua mạng Lan để nhiều người sử dụng thì có thông báo "This workbook contains macro recorded or written in Visual Basic. Macro cannot be viewed or edited in shared workbooks". Các máy khác sử dụng file excel thì không sử dụng được các hàm VBA, hic hic !$@!!
Bạn làm ơn hướng dẫn cho mình cách khắc phục với
 
Lần chỉnh sửa cuối:
Upvote 0
Em có file gửi lương qua mail,lấy theo mẫu cảu bác Hai Lúa Miền Tây và sửa theo ý nhưng khi gửi mail thì có 1 số lỗi cần nhờ các Bác giúp ạ
1- 1- mail gửi file bảng lương em chỉ muốn gửi từ cột A1: E31 thôi vì hiện tại em thấy gửi cả cột G có chứa mã NV nếu thay đổi số mã NV sẽ ra bảng lương của NV khác
2- file chỉ lên dữ liệu thôi không lên công thức trong ô ạ
Xin anh Hai Lúa Miền Tây và các anh chị giúp em 2 vấn đề trên ạ
Em cảm ơn nhiều
Sub SendMail()
Dim OutlookApp As Object, MailItem As Object, i As Integer
Dim FileName As String, WB As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To Application.WorksheetFunction.CountA(Sheet1.[A14:A1000]) - 2
Sheet2.[G2] = i
If UCase(Sheet2.[J4]) = "YES" Then
With Sheets("pay slip")
.[A1:E31].CopyPicture
.Copy
End With
Set WB = ActiveWorkbook
FileName = "BangLuong"
On Error Resume Next
Kill "E:" & FileName
WB.SaveAs FileName:="E:" & FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set MailItem = OutlookApp.CreateItem(0)
With MailItem
.To = Sheet2.[G4]
.Subject = "Bang luong cua: " & Sheet2.[C3]
.Attachments.Add WB.FullName
.HTMLBody = "<B>Xin chao: " & Sheet2.[C3] & "</B>" & _
"<BR><BR>Xin vui long kiem tra lai chi tiet bang luong nhu ben duoi: <BR>" & _
"<BR><BR><BR><BR>Neu co thac mac gi xin phan hoi som" & _
"<BR><B>Xin cam on,</B><BR>" & _
"<BR><B>Lê Thi Hà </B>"
.Display
End With
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "^({v})", True
WB.ChangeFileAccess Mode:=xlReadOnly
Kill WB.FullName
WB.Close SaveChanges:=False
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set OutlookApp = Nothing
Set MailItem = Nothing
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình đang tập tành code vba, đang làm 1 cái form để nhập thông tin mà bị tắt ở chỗ Find next, rất mong được mọi người chỉ giáo.
Mình có 1 file danh sách khách hàng như sau:
1.jpg
Form nhập thông tin của mình như sau:
2.jpg
Khi nhập Danh Bo và tìm trong Danh sách khách hàng sẽ có Danh Bộ bị trùng lặp và mình muốn khi nhấn Next thì các ô Ten KH, Dia chi, Duong sẽ hiện thông tin của khách hàng có danh bộ trùng kế tiếp, nếu danh bộ trùng nhiều lần thì cứ nhấn Next tới.


Mình có đính kèm file excel.

Xin cám ơn và mong nhận được sự giúp đỡ :)
 

File đính kèm

Upvote 0
Em có dùng công thức sau đây nhảy đến dòng cuối cùng có chứa dữ liệu nhưng sao bấm toàn nhảy ra ô cuối cùng của bảng tính luôn chứ không phải ô chứa dữ liệu cuối cùng, và báo lỗi

Mã:
Private Sub CommandButton1_Click()
'Range("A2").Value = txtHo.Text
'Range("B2").Value = txtTen.Text
'Range("C2").Value = txtDt.Value
Range("A2").Select
ActiveCell.End(xlDown).Select
lastrow = ActiveCell.Row
Cells(lastrow + 1, 1).Value = txtHo.Text
Cells(lastrow + 1, 2).Value = txtTen.Text
Cells(lastrow + 1, 3).Value = txtDt.Text
Range("A2").Select
txtHo.Text = ""
txtTen.Text = ""
txtDt.Text = ""
End Sub
 
Upvote 0
Trong Code của bạn có đoạn
Mã:
Range("A2").Select
ActiveCell.End(xlDown).Select

Cái này tương ứng với việc bạn đặt chuột tại A2 và bấm Ctrl + Mũi tên xuống.

Nếu A2:A65536 không có dữ liệu hoặc điền đầy dữ liệu nó sẽ chuyển tới dòng cuối cùng.

Bạn có thể tìm các giải pháp thay thế khác cho phù hợp ví dụ như nếu A2:A65536 rỗng, A1 có giá trị
Mã:
Range("A65536").End(xlUp).Offset(1,0)Select
 
Upvote 0
Mọi người ơi cho mình hỏi có cách nào edit được chức năng của nút button trong hộp thông báo lỗi của Validation không ạ

Đây là code của mình, mình muốn dữ liệu khi nhập không khớp sẽ thông báo lên, nếu chọn Yes sẽ điền giống với sheet1 còn No sẽ đi tới ô đó

Cảm ơn mọi người ạ

Sub test()

Dim i, i1, lr, lc As Long
Dim a As String
a = Sheets(1).Name & "!"


lr = Sheets(1).UsedRange.Rows(Sheets(1).UsedRange.Rows.Count).Row
lc = Sheets(1).UsedRange.Columns(Sheets(1).UsedRange.Columns.Count).Column


For i1 = 1 To lc
For i = 1 To lr

With Sheets(2).Cells(i, i1).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & a & Sheets(1).Cells(i, i1).Address
.IgnoreBlank = True
.InCellDropdown = False
.InputTitle = ""
.ErrorTitle = "NOT MATCH !! Please check "
.InputMessage = ""
.ErrorMessage = " The value in Sheet1 is " & Sheets(1).Cells(i, i1)
.ShowInput = True
.ShowError = True
End With
Next i

Next i1




End Sub

aaaa.jpg
 
Upvote 0
Em chào anh
Anh cho em hỏi chút với
Em muốn xin một đoạn code để chuyển từ file excel này sang file excel khác
Anh có thể cho em xin đoạn code được ko a.
Em cảm ơn anh nhìu
 
Upvote 0
Sub locdi()
Application.ScreenUpdating = False
Sheets("Data_di").[B4:M10000].AdvancedFilter 2, [B2:E3], [B5:L5]
Range("B6:M200").HorizontalAlignment = xlCenter
Range("D6:E200").WrapText = True
Range("B3").Select

XIN HỎI!
THAU CÂU LỆNH:
Sheets("Data_di").[B4:M10000].AdvancedFilter 2, [B2:E3], [B5:L5]

BẰNG CÂU LỆNH KHÁC CHO ĐỞ NẶNG FILE
XIN CẢM ƠN!
 
Upvote 0
May ban giup gium minh code nay le Sub COUNTIFLAM()
Dim date1 As Date
date1 = "31 / 1 / 2016"
Dim totaldate As Long
SONGAY = Application.WorksheetFunction.CountIf(Range("A1:A11"), "<" & date1)
MsgBox totaldate


End Sub
[TABLE="class: cms_table, width: 75"]
[TR]
[TD="align: right"]my excell A1:a11
01/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]02/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[TR]
[TD="align: right"]05/01/2016[/TD]
[/TR]
[/TABLE]


le ra msgbox la 9 nhung no toan hien la 0 mong cac ban giup
Bạn xem lại nội quy.............
NoiQuy.jpg
 
Upvote 0
mong các anh chị giúp em tăng tốc code với . code của em nhiều vòng lặp quá. dữ liệu có 38 dòng thôi mà em chạy code mất cả tiếng đồng hồ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mong anh chị giúp em tăng tốc code với . code của em nhiều vòng lặp quá. dữ liệu có 38 dòng thôi mất cả tiếng đồng hồ.
Bạn nên đưa vô mảng để xử lí' Như vậy sẽ cải thiện được tình hình.
 
Upvote 0
Bạn nên đưa vô mảng để xử lí' Như vậy sẽ cải thiện được tình hình.

em chưa biết cách đưa vào mảng. Mong anh chỉ giúp}}}}}}}}}}}}}}}



Private Sub CommandButton2_Click()
Dim rc As Long, m As Integer, i As Integer, Rn As Integer, k As Integer, n As Integer, t As Integer
Dim rc1 As Integer, ii As Integer, ik As Integer, boiso1 As Integer, boiso2 As Integer, boisoc As Integer, boisot As Integer
Dim mm As Integer, ranget As Range, rangec As Range, Rng As Range
Dim irow As Integer, n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer
rc = S01.Cells(Cells.Rows.Count, 1).End(xlUp).Row
For n = 1 To 100
For n1 = n + 1 To 100
For n2 = n1 + 1 To 100
For n3 = n2 + 1 To 100
For n4 = n3 + 1 To 100
S01.Range("A1:A1").ClearContents
ii = 0
For i = 2 To rc
S01.Cells(1, 1).Value = S01.Cells(i, n + 1).Value + S01.Cells(i, n1 + 1).Value + S01.Cells(i, n2 + 1).Value + S01.Cells(i, n3 + 1).Value + S01.Cells(i, n4 + 1).Value
If S01.Cells(1, 1).Value > 0 Then
ii = ii + 1
End If
Next i
If ii > 35 Then
S04.Activate
S04.Range("A65536").End(xlUp).Offset(1, 0).Select
irow = ActiveCell.Row
S04.Cells(irow, 1).Value = S01.Cells(1, n + 1).Value
S04.Cells(irow, 2).Value = S01.Cells(1, n1 + 1).Value
S04.Cells(irow, 3).Value = S01.Cells(1, n2 + 1).Value
S04.Cells(irow, 4).Value = S01.Cells(1, n3 + 1).Value
S04.Cells(irow, 5).Value = S01.Cells(1, n4 + 1).Value
End If
Next n4
Next n3
Next n2
Next n1
Next n
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hiện tại, em bị quay đầu óc rồi, không hiểu sao nữa? Code em làm mà ko thể nào copy (từ sheet này sang sheet kia) lần lượt từng ngày trong cột sau khi lọc theo ngày, theo tài khoản. Giờ nó chỉ có copy được mỗi ngày cuối cùng thôi là sao ah? Mong các Thầy giúp cho ah!?
Với Sheets 5191_KQ em lọc lần lượt theo từng ngày (Cột A) và từng tài khoản (cột B), copy dữ liệu tại cột D (bỏ tiêu đề) paste sang sheets 5191_KQ_1 nhưng lại ko được từng ngày một ah>?
 

File đính kèm

Upvote 0
Chắc là tại gần nửa đêm nên đầu óc nó ko tinh tướng, em làm được rồi ah! Thanks.
Hiện tại, em bị quay đầu óc rồi, không hiểu sao nữa? Code em làm mà ko thể nào copy (từ sheet này sang sheet kia) lần lượt từng ngày trong cột sau khi lọc theo ngày, theo tài khoản. Giờ nó chỉ có copy được mỗi ngày cuối cùng thôi là sao ah? Mong các Thầy giúp cho ah!?
Với Sheets 5191_KQ em lọc lần lượt theo từng ngày (Cột A) và từng tài khoản (cột B), copy dữ liệu tại cột D (bỏ tiêu đề) paste sang sheets 5191_KQ_1 nhưng lại ko được từng ngày một ah>?
 
Upvote 0
Trả về địa chỉ của ô hiện tại thì dùng lệnh này nè bạn.
Mã:
ActiveCell.Address
cảm ơn bạn, mình đã làm thử và nó đã trả về địa chỉ của ô!
cho mình hỏi mình muốn kết quả trả về là hàng bao nhiêu và cột bao nhiêu thì có được không, cảm ơn bạn!
 
Upvote 0
Mình đang có một vấn đề về thủ tục trả về địa chỉ ô hiện tại! Mong mọi người giải quyết giùm mình
. . . . .
Cho mình hỏi mình muốn kết quả trả về là hàng bao nhiêu và cột bao nhiêu thì có được không, cảm ơn bạn!
Mã:
    MsgBox ActiveCell.Row, , ActiveCell.Col
 
Upvote 0
Các bác ơi cho e hỏi về code khi nhấp vào Button hoặc Command thì nó hiện lên như hình ảnh này ạ. E cảm ơn ạ
 

File đính kèm

  • Untitled.png
    Untitled.png
    7.7 KB · Đọc: 25
Upvote 0
Khi mình dùng InputBox, khi chưa nhập dữ liệu gì mà nhấp chọn OK sẽ báo lỗi These's a problem with this formula. Xin hỏi các AC là có cách nào để bẫy được lỗi này không ạ !
 
Upvote 0
Mình tải trên diễn đàn về đoạn code như sau để dùng nội suy tuyến tính:

Public Mang1(1000) As Double
Public Mang2(1000) As Double
Public Const mMax = 1
Public Const nMax = 1
Public bang(mMax, nMax) As Double


Public Function NSTT(Mang1, Mang2, Gia_tri As Double) As Double
Dim i As Integer
Dim delta As Double
If Gia_tri <= Mang1(1) Then
NSTT = Mang2(1)
Else
i = 0
Do
i = i + 1
Loop Until (Mang1(i) >= Gia_tri)
delta = (Mang2(i) - Mang2(i - 1)) / (Mang1(i) - Mang1(i - 1))
NSTT = delta * (Gia_tri - Mang1(i - 1)) + Mang2(i - 1)
End If
End Function
Khi thực thi macro này thì ta sẽ có hàm NSTT, trong đó phải chọn 3 giá trị: mang1, mang2 và giá trị cần nội suy
Vấn đề của mình là nếu muốn khai báo cụ thể giá trị của Mang1, Mang2 ví dụ mảng 1: từ 1-10, mảng 2 từ 11-20 chẳng hạn (để khỏi phải chọn giá trị mảng 1, mảng 2 khi thực thi, chỉ chọn giá trị cần nội suy thôi) thì phải làm thế nào.
Xin cảm ơn!
 
Upvote 0
chưa hiểu ý của bạn cho lắm, bạn có thể đưa yêu cầu và cho ví dụ cách làm khác cách làm của bạn, có thể các thành viên hiểu được ý bạn và giúp bạn
 
Upvote 0
E có 1 file như sau: E muốn CHỈ khi thay đổi giá trị tại cột C thì mới gán giá trị tương ứng sang cột G, và tại dòng nào thì gán giá trị tại dòng đấy, Code của e hiện tại nó gàn cho cả 100 dòng ạ :(
E cảm ơn các AC !
 

File đính kèm

Upvote 0
Bạn thay sub sự kiện cũ bằng cái này:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr As Long
lr = Range("B65000").End(3).Row
If Target.Column = 3 Then
    If Target.Row > 4 Then
        If Target.Row < lr Then
            Target.Offset(, 4).Value = Target.Offset(, 2).Value
        End If
    End If
End If
End Sub
E cảm ơn ạ. Nhưng a có thể sửa giúp e sự kiện Caculation được ko ạ. E đang học về VBA ạ :)
 
Upvote 0
Đừng có code cái kiểu dỡ hơi ấy... Đã sự kiện thì phải change mới được theo mong muốn của bạn... Không ai đời đi xài cái Caculation ở đây cả,... khi chạy cà dựt cà dựt....sao chạy nổi...

Xài sự kiện change là hợp lý

kaka thanks a. E đang học hỏi VBA, mún thực hành nhìu cho qen ạ, đang bắt đầu học viết sự kiện, tại bị mắc ở đoạn code này. Đúng là nó hơi giật thật nếu nhìu dữ liệu :)
 
Upvote 0
A cho e hỏi 1 chút là dòng code này : lr = Range("B65000").End(3).Row . Số 3 ở trong ngoặc () có tác dụng j vậy ạ. nó có pải là cột C, nhưng Range lại là từ cột B +-+-+-+

P/s: E tìm được tài liệu về cách sử dụng End() rùi ạ. Thank a :)
 
Lần chỉnh sửa cuối:
Upvote 0
chưa hiểu ý của bạn cho lắm, bạn có thể đưa yêu cầu và cho ví dụ cách làm khác cách làm của bạn, có thể các thành viên hiểu được ý bạn và giúp bạn

Ý của mình là khai báo sẵn giá trị của 2 biến: mảng 1 và mảng 2 (tức là giá trị của nó cố định khi chạy code) chỉ nhập giá trị của biến Gia_tri khi chay code thôi.
Ở đoạn code mình cung cấp thì mỗi lần chạy code mình phải khai báo giá trị của 3 biến: mang1, mang2, Gia_tri
 
Upvote 0
Ý của mình là khai báo sẵn giá trị của 2 biến: mảng 1 và mảng 2 (tức là giá trị của nó cố định khi chạy code) chỉ nhập giá trị của biến Gia_tri khi chay code thôi.
Ở đoạn code mình cung cấp thì mỗi lần chạy code mình phải khai báo giá trị của 3 biến: mang1, mang2, Gia_tri
Bạn hãy gán cho Mang1, Mang2 ngay trong hàm, đây là mảng 1 chiều nên gán thì như thế này

Mã:
Mang1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 
Upvote 0
Cho mình hỏi về bài mình tí. Mình có một file quản lý xe ra vào công ty, trong Userform. Có 3 textbox lầy dữ liệu dựa vào combobox bảng số xe và dữ liệu đó nằm ở sheet Taitrong. Trường hợp xảy ra là khi mình đánh bảng số xe vào combobox đó nếu đã có dữ liệu thị nó hiện ra 3 textbox kia và không có thi nó cứ báo lỗi và không cho nhập tiếp. Mong được giúp đỡ là nó không báo nữa cho dù không có dữ liệu sẵn và cho phép nhập mới tiếp. Rất cảm ơn được các anh em giúp đỡ thêm.
 

File đính kèm

Upvote 0
Nhờ Bác nào hướng dẫn em tạo ra được dòng này << Selection.Offset(1, 0).Select>> e coi hoài nhưng không hiểu
 
Upvote 0
Selection.Offset(1, 0).Select
ô nào đang chọn, và từ ô đó di chuyển xuống 1 dòng
ví dụ
con trỏ chuột đang đứng ở ô B3
Selection.Offset(1, 0).Select sẽ là ô B4 đang chọn
 
Upvote 0
ActiveCell.Offset(1, 0).Range("A1").Select
tôi mới ghi macro được nè bạn, trước khi ghi macro bạn bật Use Relative References lên

Cảm ơn bạn, nhưng thắt mắt mình ko phải ở chỗ đó mà ở chỗ đoạn code này nè:

Sub Nhap()
Application.ScreenUpdating = 0
Sheets("Nhap").Select: Range("B2:B8").Select
Selection.Copy
Sheets("CSDL").Select: Range("A65535").Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Application.CutCopyMode = False: Sheets("Nhap").Select
End Sub


Mình mùn biết chỗ Selection.Offset(1, 0).Select sao mình làm ra được chỗ này? Nhưng không phải gõ tay vào
 
Upvote 0
Cảm ơn bạn, nhưng thắt mắt mình ko phải ở chỗ đó mà ở chỗ đoạn code này nè:

Mình mùn biết chỗ Selection.Offset(1, 0).Select sao mình làm ra được chỗ này? Nhưng không phải gõ tay vào
Thua bài đầu tiên bạn hỏi Selection.Offset(1, 0).Select và tôi đã giải thích thì bạn nói là biết rồi nhưng làm sao ghi Macro
và tôi cũng chỉ bạn cách ghi macro giống yêu cầu như bạn nói, thì bạn lại nói không phải bạn muốn chỗ này, bạn muốn chỗ kia....
thôi thì bây giờ bạn muốn cái gì thì tự nghiên cứu đi, chứ tôi mà nói nữa thì bạn lại muốn khác tiếp. thân
 
Upvote 0
Mình muốn in các sheet mà mình mong muốn bằng cách click vào button (click một lần in nhiều sheet), tuy nhiên đôi khi do tính chất công việc nên mình muốn thay đổi số lượng các sheet được in ra có thể ít hơn hoặc nhiều hơn, mình đặt điều kiện để in các sheet này, tuy nhiên khi chạy thử mình thấy VBA báo lỗi "syntax error", mong mọi người xem thử file của mình và giúp mình sửa lại file này :
 
Upvote 0
Mình muốn in các sheet mà mình mong muốn bằng cách click vào button (click một lần in nhiều sheet), tuy nhiên đôi khi do tính chất công việc nên mình muốn thay đổi số lượng các sheet được in ra có thể ít hơn hoặc nhiều hơn, mình đặt điều kiện để in các sheet này, tuy nhiên khi chạy thử mình thấy VBA báo lỗi "syntax error", mong mọi người xem thử file của mình và giúp mình sửa lại file này :
File của mình đâu vậy mình?
 
Upvote 0
Nút in của bạn, thay bằng đoạn code này thử xem
Mã:
Private Sub CommandButton2_Click()
For i = 2 To Sheet12.Range("C65000").End(xlUp).Row
    Sheets(Sheet12.Range("C" & i).Value).PrintOut
Next i
End Sub
Hi thực sự thì mình chỉ mới tập tọe sử dụng VBA thôi, bác "giaiphap" có thể sửa giùm mình đoạn code đó được không? Hoặc không bác có thể nói rõ hơn là thay đoạn code nào bằng đoạn code của bác không? Có phải ý bác là thay đoạn
"If ActiveWorkbook.Sheets(j).Name = A(i, 1).Text and A(i,2)=1 Then ActiveWorkbook.Sheets(j).Select On Error Resume Next ActiveWorkbook.Sheets(j).PrintOut"
Cảm ơn nhiều ạ.
 
Upvote 0
Hi thực sự thì mình chỉ mới tập tọe sử dụng VBA thôi, bác "giaiphap" có thể sửa giùm mình đoạn code đó được không? Hoặc không bác có thể nói rõ hơn là thay đoạn code nào bằng đoạn code của bác không? Có phải ý bác là thay đoạn
"If ActiveWorkbook.Sheets(j).Name = A(i, 1).Text and A(i,2)=1 Then ActiveWorkbook.Sheets(j).Select On Error Resume Next ActiveWorkbook.Sheets(j).PrintOut"
Cảm ơn nhiều ạ.
bạn xem file đúng ý chưa.
 

File đính kèm

Upvote 0
bạn xem file đúng ý chưa.
Không được rồi bác ơi, Em chạy code của bác sửa lại cho em rồi, nó in hết tất tần tật các sheet ra bác ạ .
Ý
em muốn là
1. Đầu tiên em ấn nút Ghet Sheet's name để lấy tên và thứ tự các sheet vào cột C (kèm theo thứ tự sheet ở cột B), sau đó em chèn thêm cột D và nhập 0 cho sheet không in, nhập 1 cho sheet muốn in ra.
2. Tiếp đó em ấn nút In để chạy code VBA cho phép in những sheet mà em nhập 1 (muốn in). Mục đích là mình có thể thay đổi tùy ý những sheet muốn in ra trong một lần in ạ. Tuy nhiên cái code của nút In ấy em chạy bị lỗi. Nhờ bác và mọi người giúp đỡ }}}}}
 
Lần chỉnh sửa cuối:
Upvote 0
em không biết hỏi trong phần này có đúng không, e đang muốn tạo một cái worksheet_change nhưng không biết viết câu lệnh này thế nào, Mong các anh chị em hướng dẫn với ạ.
Nếu ô đó nằm trong khoảng A1:C100 thì hiện list Datavalidation gồm các giá trị 1,1/2,P,K (Dùng để chấm công)
Em đang mò mẫm học phần này nên ứng dụng thử xem sao. E xin cảm ơn ạ
 
Upvote 0
Em chạy code của bác sửa lại cho em rồi, nó in hết tất tần tật các sheet ra bác ạ :-=
Bạn thử dùng code sau
Mã:
Private Sub CommandButton2_Click()
    Dim i&
    For i = 1 To Sheets.Count
        If Cells(i, 4) = 1 Then Sheets(Cells(i, 3).Value).PrintOut
    Next
End Sub
Nút "Get sheets's name" như vậy chưa đúng: không phải tất cả các danh từ đều có sở hữu cách, sở hữu cách của danh từ số nhiều tận cùng bằng s (ở đây là sheets) nếu có thì chỉ thêm dấu ' thành " sheets' "
 
Upvote 0
em không biết hỏi trong phần này có đúng không, e đang muốn tạo một cái worksheet_change nhưng không biết viết câu lệnh này thế nào, Mong các anh chị em hướng dẫn với ạ.

Em đang mò mẫm học phần này nên ứng dụng thử xem sao. E xin cảm ơn ạ
Cái này thì cứ vào validation mà tạo, cần gì vba đâu bạn.
 
Upvote 0
Bạn thử dùng code sau
Mã:
Private Sub CommandButton2_Click()
    Dim i&
    For i = 1 To Sheets.Count
        If Cells(i, 4) = 1 Then Sheets(Cells(i, 3).Value).PrintOut
    Next
End Sub
Nút "Get sheets's name" như vậy chưa đúng: không phải tất cả các danh từ đều có sở hữu cách, sở hữu cách của danh từ số nhiều tận cùng bằng s (ở đây là sheets) nếu có thì chỉ thêm dấu ' thành " sheets' "
Chuẩn rồi bác ạ. đúng ý em rồi, hê hê. Cảm ơn bác nhiều lắm lắm!
P/s: Bác soi chính tả kĩ quá ạ **~**
 
Upvote 0
Cho em hỏi chút ạ, có hàm nào tương tự hàm fixed trong VBA không ạ.
Ví dụ em muốn hiển thị số 13000 thành 13,000 trong một dòng diễn giải ạ
Em cảm ơn!
 
Upvote 0
Cho em hỏi chút ạ, có hàm nào tương tự hàm fixed trong VBA không ạ.
Ví dụ em muốn hiển thị số 13000 thành 13,000 trong một dòng diễn giải ạ
Em cảm ơn!
Giả sử A1 là 13000. Tại B1:
Mã:
=TEXT(A1,"#,##0")
Có điều câu hỏi không liên quan tới topic.
 
Upvote 0
Tôi có một đoạn code sau. Bây giờ làm thế nào để sau khi xóa giá trị ở cột A đi thì giá trị đã gán vào cột B ko thay đổi. Mong các thành viên khác trợ giúp.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Target.Offset(0, 1).Value = Target
End If
End Sub
 
Upvote 0
Tôi có một đoạn code sau. Bây giờ làm thế nào để sau khi xóa giá trị ở cột A đi thì giá trị đã gán vào cột B ko thay đổi. Mong các thành viên khác trợ giúp.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Target.Offset(0, 1).Value = Target
End If
End Sub
Bạn thêm một điều kiện nữa. Như vầy
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Not IsEmpty(Target(1)) Then
Target.Offset(0, 1).Value = Target
End If
End Sub
 
Upvote 0
bac huuthang_bd ơi giúp e với em viết bằng VBA nhé
 

File đính kèm

  • loi .jpg
    loi .jpg
    46 KB · Đọc: 38
Lần chỉnh sửa cuối:
Upvote 0
Các Thầy ơi giúp em làm sao để có dấu phẩy (,) phân tách hàng tỷ, triệu, nghìn, ... với đoạn code sau ah:
Dim CH As String
Dim tong_tam As Integer
'****************BANG CHU VIET NAM********
Public Function EUR(So As Double) As String
If Abs(So) > 999999999999999# Then
MsgBox "Xin l" & ChrW(7895) & "i, s" & ChrW(7889) & " " & ChrW(273) & "ã v" & ChrW(432) & ChrW(7907) & "t h" & ChrW(417) & "n tr" & ChrW(259) & "m nghìn t" & ChrW(7927) & ", không th" & ChrW(7875) & " biên d" & ChrW(7883) & "ch " & ChrW(273) & ChrW(432) & ChrW(7907) & "c"
Exit Function
End If
If Fix(So) = 0 Then
EUR = "Không Euro"
Else
'EUR = FcaseVU(Dichchu(So), 1) + " " & "Euro"
EUR = UCase(Left(Dichchu(So), 1)) + Mid(Dichchu(So), 2, 999) + "Euro"
End If

End Function


Public Function USD(So As Double) As String
If Abs(So) > 999999999999999# Then
MsgBox "Xin l" & ChrW(7895) & "i, s" & ChrW(7889) & " " & ChrW(273) & "ã v" & ChrW(432) & ChrW(7907) & "t h" & ChrW(417) & "n tr" & ChrW(259) & "m nghìn t" & ChrW(7927) & ", không th" & ChrW(7875) & " biên d" & ChrW(7883) & "ch " & ChrW(273) & ChrW(432) & ChrW(7907) & "c"
Exit Function
End If
If Fix(So) = 0 Then
USD = "Không " & ChrW(273) & "ô la M" & ChrW(7929)
Else
'USD = FcaseVU(Dichchu(So), 1) + " " & ChrW(273) & "ô la M" & ChrW(7929)
USD = UCase(Left(Dichchu(So), 1)) + Mid(Dichchu(So), 2, 999) + ChrW(273) & "ô la M" & ChrW(7929)
End If

End Function


Public Function VND(So As Double) As String
If Abs(So) > 999999999999999# Then
MsgBox "Xin l" & ChrW(7895) & "i, s" & ChrW(7889) & " " & ChrW(273) & "ã v" & ChrW(432) & ChrW(7907) & "t h" & ChrW(417) & "n tr" & ChrW(259) & "m nghìn t" & ChrW(7927) & ", không th" & ChrW(7875) & " biên d" & ChrW(7883) & "ch " & ChrW(273) & ChrW(432) & ChrW(7907) & "c"
Exit Function
End If
If Fix(So) = 0 Then
VND = "Không " & ChrW(273) & ChrW(7891) & "ng"
Else
'VND = FcaseVU(Dichchu(So), 1) + " " & ChrW(273) & ChrW(7891) & "ng"
VND = UCase(Left(Dichchu(So), 1)) + Mid(Dichchu(So), 2, 999) + ChrW(273) & ChrW(7891) & "ng"
End If

End Function


'*********DICH CHU SO *********8 ''nghìn '
Public Function Dichchu(So) As String
Dim tam As String
Dim Nhom0 As String, Nhom1 As String, Nhom2 As String, Nhom3 As String, Nhom4 As String
If Abs(So) > 999999999999999# Then
MsgBox "Xin loi, so da vuot hon tram ngan ty, khong the bien dich duoc !!!"
Exit Function
End If
If IsDate(So) Then
'Ham con sai cho nay 'Ham con sai cho nay 'Ham con sai cho nay 'Ham con sai cho nay 'Ham con sai cho nay
Dichchu = Format(So, "dd/mm/yyyy")
Exit Function
End If
So = Fix(So)
If So < 0 Then
sogiu = So
So = So * (-1)
End If
CH = Space(0)
tam = Right((Space(15) + Trim(str(So))), 15)
Nhom0 = Mid(tam, 1, 3)
Nhom1 = Mid(tam, 4, 3)
Nhom2 = Mid(tam, 7, 3)
Nhom3 = Mid(tam, 10, 3)
Nhom4 = Mid(tam, 13, 3)
tong_tam = 0


If Val(Nhom0) > 0 And (Val(Nhom1) = 0 Or Val(Nhom2) = 0 Or Val(Nhom3) = 0 Or Val(Nhom4) = 0) Then
CH = CH + Dich3so(Nhom0, "nghìn t" & ChrW(7927) & " ") 'nghin ty
tong_tam = tong_tam + Val(Nhom0)
Else
CH = CH + Dich3so(Nhom0, "nghìn ")
tong_tam = tong_tam + Val(Nhom0)
End If

CH = CH + Dich3so(Nhom1, "t" & ChrW(7927) & " ")

tong_tam = tong_tam + Val(Nhom1)
CH = CH + Dich3so(Nhom2, "tri" & ChrW(7879) & "u ")

tong_tam = tong_tam + Val(Nhom2)
CH = CH + Dich3so(Nhom3, "nghìn ")

tong_tam = tong_tam + Val(Nhom3)
CH = CH + Dich3so(Nhom4, "")
If sogiu < 0 Then
CH = "Âm " + CH
End If
Dichchu = CH
End Function


Private Function Dich3so(Nhom As String, dv As String) As String
'Co xet den so O dau tien vd: 009 = khong tram le chin (dung doc tien)
Dim x As Integer, y As Integer, z As Integer
Dim ch1 As String
Nhom = Right(Space(3) & Nhom, 3)
x = Val(Left(Nhom, 1))
y = Val(Mid(Nhom, 2, 1))
z = Val(Right(Nhom, 1))
If x = 0 And y = 0 And z = 0 Then
dv = ""
Else
If x = 0 Then
If tong_tam <= 0 Then
ch1 = ch1
Else
If y <> 0 Or z <> 0 Then
ch1 = ch1 + "không tr" & ChrW(259) & "m "
End If
End If
Else
ch1 = ch1 + CHUSO(x) + "tr" & ChrW(259) & "m "
End If
'***************
If y = 0 Then
If z <> 0 Then
If tong_tam <= 0 And x = 0 Then
ch1 = ch1
Else
ch1 = ch1 + "l" & ChrW(7867) & " "
End If
End If
ElseIf y = 1 Then
ch1 = ch1 + "m" & ChrW(432) & ChrW(7901) & "i "
Else
ch1 = ch1 + CHUSO(y) + "m" & ChrW(432) & ChrW(417) & "i "
End If
'***********
If z = 0 Then
ch1 = ch1
ElseIf z = 1 Then
If y = 1 Or y = 0 Then
ch1 = ch1 + CHUSO(z)
Else
ch1 = ch1 + "m" & ChrW(7889) & "t "
End If
ElseIf z = 5 Then
If y = 0 Then
ch1 = ch1 + CHUSO(z)
Else
ch1 = ch1 + "l" & ChrW(259) & "m "
End If
Else
ch1 = ch1 + CHUSO(z)
End If
End If
Dich3so = ch1 + dv

End Function


Private Function Dichso(Nhom As String) As String
'Khong xet den so O dau tien vd: 009 = chin (dung doc so thu tu)
Dim x As Integer, y As Integer, z As Integer
Dim ch1 As String
Nhom = Right(Space(3) & Nhom, 3)
x = Val(Left(Nhom, 1))
y = Val(Mid(Nhom, 2, 1))
z = Val(Right(Nhom, 1))
ch1 = ""
If x = 0 And y = 0 And z = 0 Then
Dichso = ""
Exit Function
Else
If x = 0 Then
ch1 = ch1
Else
ch1 = ch1 + CHUSO(x) + "tr" & ChrW(259) & "m "
End If
'***************
If y = 0 Then
If x = 0 Then
ch1 = ch1
Else
ch1 = ch1 + "l" & ChrW(7867) & " "
End If
ElseIf y = 1 Then
ch1 = ch1 + "m" & ChrW(432) & ChrW(7901) & "i "
Else
ch1 = ch1 + CHUSO(y) + "m" & ChrW(432) & ChrW(417) & "i "
End If
'***********
If z = 0 Then
ch1 = ch1
ElseIf z = 1 Then
If y = 1 Or y = 0 Then
ch1 = ch1 + CHUSO(z)
Else
ch1 = ch1 + "m" & ChrW(7889) & "t "
End If
ElseIf z = 5 Then
If y = 0 Then
ch1 = ch1 + CHUSO(z)
Else
ch1 = ch1 + "l" & ChrW(259) & "m "
End If
Else
ch1 = ch1 + CHUSO(z)
End If
End If
Dichso = ch1 + dv

End Function

Private Function CHUSO(Num As Integer) As String
tmpCHUSO = Array("không ", "m" & ChrW(7897) & "t ", "hai ", "ba ", "b" & ChrW(7889) & "n ", "n" & ChrW(259) & "m ", "sáu ", "b" & ChrW(7843) & "y ", "tám ", "chín ")
CHUSO = tmpCHUSO(Num)

End Function
 
Upvote 0
Chao cac anh (chi) dien dan! Em muon xoa cac sheet moi tao ra phai lam nhu the nao?
Dây là mã code em tao ra: Mong cac anh chi gup do em
Sub tach_du_lieu()
Dim ws As Worksheet
Dim one_country As Variant
Dim countries As Variant

With ThisWorkbook.Sheets("config")
If .Range("A" & Rows.Count).End(3).Row > 2 Then
countries = .Range("A2:A" & .Range("A" & Rows.Count).End(3).Row)
ElseIf .Range("A" & Rows.Count).End(3).Row = 2 Then
countries = Array(.[A2].Value)
Else
Exit Sub
End If
End With

Set ws = ThisWorkbook.Sheets("DC")

For Each one_country In countries
Sheets.Add.Name = "Report_" & one_country

With ws
.AutoFilterMode = False
.Range("A:N").AutoFilter
.Range("A:N").AutoFilter field:=4, Criteria1:=one_country
With .AutoFilter.Range
.Offset(0).Resize(.Rows.Count, 14).SpecialCells(xlCellTypeVisible).Copy
End With
.AutoFilterMode = False
End With

With ThisWorkbook.Sheets("Report_" & one_country)
.[A6].PasteSpecial xlPasteValues
.Columns("A:N").EntireColumn.AutoFit
End With
Next

Set ws = Nothing
End Sub
 

File đính kèm

Upvote 0
Bạn gõ bài tiếng Việt có dấu nhé! Và bạn thử copy đoạn code này vào module thử chạy xem nó có xóa đúng 4 sheets có tên như in đậm ấy ko! cả 2 code trong 2 module dễ bị nhầm lẫn, bạn cần lưu ý!
Sub XoaSheetChidinh()
With Application​
.DisplayAlerts = False​
End With

Dim TenSheetSeXoa As Variant
TenSheetSeXoa = Array("Report_1.1", "Report_1.2", "Report_1.3", "Report_1.4")
Worksheets(TenSheetSeXoa).Delete

With Application​
.DisplayAlerts = True​
End With​
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn gõ bài tiếng Việt có dấu nhé! Và bạn thử copy đoạn code này vào module thử chạy xem nó có xóa đúng 4 sheets có tên như in đậm ấy ko! cả 2 code trong 2 module dễ bị nhầm lẫn, bạn cần lưu ý!
Sub XoaSheetChidinh()
With Application
.DisplayAlerts = False
End With

Dim TenSheetSeXoa As Variant
TenSheetSeXoa = Array("Report_1.1", "Report_1.2", "Report_1.3", "Report_1.4")
Worksheets(TenSheetSeXoa).Delete

With Application
.DisplayAlerts = True
End With
End Sub

Khi dùng cho nhiều thuộc tính, phương thức cho đối tượng nào đó thì mình mới dùng With, ở đây chỉ có một thôi dùng nó mần chi bạn? Vầy được rồi:

Application.DisplayAlerts = False
 
Upvote 0
Em muốn viết đoạn cod thay cho công thức sau nhưng không được nhờ các bác giúp đỡ nhung rat dot ve VBA
=IF(OR((ISERROR(FIND("nước",R35,1))=FALSE),(ISE RROR(FIND("quốc gia",R35,1))=FALSE)),"Khách quốc tế","Khách nội địa")
Xin cám ơn mọi người
 
Upvote 0
Ace nào giúp cho code:
- Có 1 range sẵn (ví dụ A1:C20) trong 1 file sẵn.
- Tạo 1 button, click thì nó sẽ copy-paste range đó sang 1 file mới (new book) để save mới, chỉ lưu dạng Paste value.
Cảm ơn nhiều
 
Upvote 0
Ace nào giúp cho code:
- Có 1 range sẵn (ví dụ A1:C20) trong 1 file sẵn.
- Tạo 1 button, click thì nó sẽ copy-paste range đó sang 1 file mới (new book) để save mới, chỉ lưu dạng Paste value.
Cảm ơn nhiều
Bạn thử với:
PHP:
Sub ABC()
    Dim Nguon As Workbook, Dich As Workbook
    Dim wsN As Worksheet, wsD As Worksheet
    Set Nguon = ThisWorkbook: Set wsN = Nguon.Sheets(1)
    Set Dich = Workbooks.Add
    With Dich
        Set wsD = Dich.Sheets(1)
        wsN.Range("A1:C20").Copy
           wsD.Range("A1").PasteSpecial (xlPasteValues)
    End With
End Sub
 
Upvote 0
Ace nào giúp cho code:
- Có 1 range sẵn (ví dụ A1:C20) trong 1 file sẵn.
- Tạo 1 button, click thì nó sẽ copy-paste range đó sang 1 file mới (new book) để save mới, chỉ lưu dạng Paste value.
Cảm ơn nhiều
Code thì tôi làm rồi: đang chọn vùng A1:C20 của Sheet1 copy và paste GIÁ TRỊ và Sheet2 của cùng 1 file workbook (1 file excel).
Cái tôi muốn hỏi là bạn muốn tạo file excel mới, có quy định việc đặt tên file không?
Khi đó với file mới chỉ cần paste giá trị vào Sheet1, vị trí A1 không?
có cần phải tạo hộp thoại hỏi chọn vùng nào không? (giá trị mặc định của hộp thoại hỏi là A1:C20)
Code của phulien1902 rất hay rồi mà!
Em cũng góp thêm một phần nhé:

Sub HoiVung_CopyGiatri()
On Error Resume Next​
Dim vung As Range​
Sheets("Sheet1").Select​
Set vung = Application.InputBox(Prompt:="Ch" & ChrW(7885) & "n vùng", Title:="Theo yêu c" & ChrW(7847) & "u c" & ChrW(7911) & "a b" & ChrW(7841) & "n", Default:="A1:C20", Type:=8)​
On Error GoTo 0​
'For Each cel In vung​
vung.Select​
Selection.Copy 'Selection.Copy Destination:=Worksheets("Sheet2").Range("A1")​
Sheets("Sheet2").Range("A1").PasteSpecial xlPasteValues​
'Next​
Application.CutCopyMode = False​
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình được bạn quanluu1989 trợ giúp đoạn code sau:
Sub test()
Dim FSO As Object, FileItem As Object, i As Integer, wbmain As Workbook, wb As Workbook
Set wbmain = ThisWorkbook
Set FSO = CreateObject("Scripting.FileSystemObject")
With wbmain
For Each FileItem In FSO.GetFolder(wbmain.Path).Files
If FileItem.Name <> "Tong Hop.xlsx" And Left(FileItem.Name, 1) <> "~" Then
i = i + 1
Set wb = Workbooks.Open(FileItem.Path)
wb.Sheets("Max").Range("D2:E34").Copy
.ActiveSheet.Cells(4, i * 2).PasteSpecial xlPasteValues
.ActiveSheet.Cells(2, i * 2) = Left(FileItem.Name, Len(FileItem.Name) - 5)
wb.Close False
End If
Next
End With
End Sub
Đoạn code này dùng để copy dữ liệu từ các file excel khác nhau về file tổng hợp. Mình muốn hỏi:
1. Hiện giờ đoạn code này tự động lấy dữ liệu tại sheet max trong tất cả các file excel nhưng giờ mình muốn tự add file excel để lấy dữ liệu trong sheet max thì phải sửa code như thế nào?
2. Đoạn code trên đang copy dữ liệu rồi paste vào file tổng hợp bắt đầu từ cột B, mình muốn paste vào file tổng hợp từ cột C hay D thì sửa như thế nào?
Chân thành cảm ơn các bạn!
 
Upvote 0

File đính kèm

Upvote 0
Upvote 0
Di mình k save dc fỏn. Nên mình export ra ngòa với file SM.frm. bạn vào file excel xg mở vba và inport nó là dc. Thanks
Cái này thì ai cũng biết, bạn save lại với phần mở rộng file là *.xlsm là được. Nhưng bạn phải nêu rõ là nhập vào cái gì và tiêu chí tìm kiếm ra sao, kiếm ở sheet nào, cho kết quả bao nhiêu cột...
 
Upvote 0
Cái này thì ai cũng biết, bạn save lại với phần mở rộng file là *.xlsm là được. Nhưng bạn phải nêu rõ là nhập vào cái gì và tiêu chí tìm kiếm ra sao, kiếm ở sheet nào, cho kết quả bao nhiêu cột...
ví dụ: ở ô Search thì mình nhập mã số Housing ở cột B thì sẽ cho ra kết quả các cột còn lại trên listbox và các ô text box thể hiện các giá trị search tương ứng với các giá trị trên Listbox, mình tham khảo trên Web và làm nhưng k hiêu bị sai chổ gì mà k tìm dc mã số
Phần Range"outdata" là define name với hàm =OFFSET(Connector!$N$8,1,0,COUNTA(Connector!$N$9:$N$9989),7) để hiển thị trên listbox
 
Lần chỉnh sửa cuối:
Upvote 0
Xin giúp đỡ về code in và chuyển số biên bản:

Tại sheet BBNT em muốn tạo ra nút in biên bản và tự động chuyển sang số biên bản tiếp theo.
 

File đính kèm

Upvote 0
Nhờ các Thầy giúp em làm sao để điền từng ngày cách dòng cho rộng thì như thế nào ah?

Nhờ các Thầy giúp em làm sao để điền từng ngày cách dòng cho rộng thì như thế nào ah? như ở Sheet6 ấy ah?
Sub CreateCalendar2()
'Tao lich nam hien tai
Dim lMonth As Long
Dim strMonth As String
Dim rStart As Range
Dim strAddress As String
Dim rCell As Range
Dim lDays As Long
Dim dDate As Date

Dim strAddress2 As String


'Add new sheet and format
Worksheets.Add
ActiveWindow.DisplayGridlines = False
With Cells
.ColumnWidth = 6#
.Font.Size = 8
End With


'Create the Month headings
For lMonth = 1 To 4
Select Case lMonth
Case 1
strMonth = "January"
Set rStart = Range("A1")
Case 2
strMonth = "April"
Set rStart = Range("A13")
Case 3
strMonth = "July"
Set rStart = Range("A25")
Case 4
strMonth = "October"
Set rStart = Range("A37")
End Select


'Merge, AutoFill and align months
With rStart
.value = strMonth
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 6
.Font.Bold = True
With .Range("A1:G1")
.Merge
.BorderAround LineStyle:=xlContinuous
End With
.Range("A1:G1").AutoFill Destination:=.Range("A1:U1")
End With
Next lMonth


'Pass ranges for months
For lMonth = 1 To 12
strAddress2 = Choose(lMonth, "A2:G12", "H2:N12", "O2:U12", _
"A14:G14", "H14:N14", "O14:U14", _
"A26:G26", "H26:N26", "O26:U26", _
"A38:G38", "H38:N38", "O38:U38")
lDays = 0
'Range(strAddress2).BorderAround LineStyle:=xlContinuous


'Add dates to month range and format
For Each rCell In Range(strAddress2)
lDays = lDays + 1
dDate = DateSerial(year(Date), lMonth, lDays)
If Month(dDate) = lMonth Then ' It's a valid date
With rCell
.value = dDate
.NumberFormat = "dd" '"ddd dd" '"mmmm yyyy"
End With
End If
Next rCell
Next lMonth


'add con formatting
With Range("A1:U48")
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=TODAY()"
.FormatConditions(1).Font.ColorIndex = 2
.FormatConditions(1).Interior.ColorIndex = 1
End With
End Sub
 

File đính kèm

Upvote 0
Nhờ các Thầy giúp em làm sao để điền từng ngày cách dòng cho rộng thì như thế nào ah? như ở Sheet6 ấy ah?

Dựa vào 7 dòng xuống hàng tôi chỉnh lại cho bạn nếu thích viết code khác thì viết

Mã:
Sub CreateCalendar2()
'Tao lich nam hien tai
    Dim lMonth As Long
    Dim strMonth As String
    Dim rStart As Range
    Dim strAddress As String
    Dim rCell As Range
    Dim lDays As Long
    Dim dDate As Date
    Dim i As Long, c As Long
    Dim strAddress2 As String


    'Add new sheet and format
    Worksheets.Add
    ActiveWindow.DisplayGridlines = False
    With Cells
        .ColumnWidth = 6#
        .Font.Size = 14
    End With


    'Create the Month headings
    For lMonth = 1 To 4
        Select Case lMonth
            Case 1
                strMonth = "January"
                Set rStart = Range("A1")
            Case 2
                strMonth = "April"
                Set rStart = Range("A13")
            Case 3
                strMonth = "July"
                Set rStart = Range("A25")
            Case 4
                strMonth = "October"
                Set rStart = Range("A37")
        End Select


        'Merge, AutoFill and align months
        With rStart
            .Value = strMonth
            .HorizontalAlignment = xlCenter
            .Interior.ColorIndex = 6
            .Font.Bold = True
            With .Range("A1:G1")
                .Merge
                .BorderAround LineStyle:=xlContinuous
            End With
            .Range("A1:G1").AutoFill Destination:=.Range("A1:U1")
        End With
    Next lMonth


    'Pass ranges for months
    For lMonth = 1 To 12
        strAddress2 = Choose(lMonth, "A2:G12", "H2:N12", "O2:U12", _
                            "A14:G14", "H14:N14", "O14:U14", _
                            "A26:G26", "H26:N26", "O26:U26", _
                            "A38:G38", "H38:N38", "O38:U38")
        lDays = 0
        'Range(strAddress2).BorderAround LineStyle:=xlContinuous


        'Add dates to month range and format
        i = 0: c = 0
        For Each rCell In Range(strAddress2)
            c = Int(i / 7)
            lDays = lDays + 1
            dDate = DateSerial(Year(Date), lMonth, lDays)
            If Month(dDate) = lMonth Then ' It's a valid date
                With rCell.Offset(c)
                    .Value = dDate
                    .NumberFormat = "dd" '"ddd dd" '"mmmm yyyy"
                End With
            End If
            i = i + 1
            
        Next rCell
    Next lMonth


    'add con formatting
     With Range("A1:U48")
           .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=TODAY()"
           .FormatConditions(1).Font.ColorIndex = 2
           .FormatConditions(1).Interior.ColorIndex = 1
    End With
End Sub
 
Upvote 0
Ý em là dòng (tương đường mỗi tuần) cách nhau một dòng trắng. em thấy code chạy chưa được! Thầy giúp chỉnh lại code giúp em nhé!
 
Upvote 0

File đính kèm

Upvote 0
dạ em cám ơn ah! thật rất hay ah! thế mà em lại ko nghĩ ra cách này. Thật hay.
 
Upvote 0
Xin các anh/chị giúp đỡ ạ.

Em có tham khảo 1 số nguồn và làm được form Booking như file đính kèm ở dưới.

1.Các anh/chị có thể giú em code khi gõ số điện thoại vào textbox "timkiem" thì những thông tin liên quan sẽ hiện lên listbox hoặc sẽ chuyển tới dòng đó được không ạ. Em có tham khảo code của bác ndu96081631 nhưng chỉ dừng lại tìm kiếm ở số phiếu.
2. Trong sơ đồ giường nằm, em có tạo 1 bảng phụ để tìm thông tin về số ghế và ngày tháng. Liệu có cách nào khác ko ạ. Vì công thức nhiều nên file xử lý hơi lâu.

Mong các anh/chị giúp đỡ. Em xin cảm ơn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xin chào các AC trong diễn đàn

E có file sau, nhờ các AC xem giúp.
- E muốn khi chọn vùng dữ liệu từ D4:D11, rồi ấn DELETE thì dữ liệu cột E sẽ lấy dữ liệu tương ứng bên cột C
- Hiện tại Code nó chỉ chạy cho 1 dòng đầu tiên thôi ạ
- E xin cảm ơn !
 

File đính kèm

Upvote 0
Mình có đoạn code dùng để tra chi phí thẩm định thiết kế nguồn vốn khác:
Hàm Thamdinhthietke3 có 2 đối số là CPXD (chi phí xây dựng) và Loai_cong_trinh (loại công trình)
Nếu loại công trình có giá trị là các số nguyên từ 1 đến 5 tương ứng với 5 loại công trình thì tiến hành nội suy định mức chi phí thẩm định thiết kế theo CPXD, ngược lại lại thì hiện thông báo để người dùng nhập cho đúng.
Mặc dù mình đã khai báo Loai_cong_trinh là Integer và điều kiện phải bằng 1, 2, 3, 4, 5 nhưng nếu nhập không phải là số nguyên thì vẫn cứ ra giá trị.
Xin vui lòng trợ giúp.
Function ThamdinhThietke3(CPXD As Double, Loai_cong_trinh As Integer) 'Tra dinh muc chi phi chung cong trinh DAN DUNG
Dim Ka, Kb, Kc, Ga, Gb As Double
If Loai_cong_trinh = 1 Then
If CPXD <= 15 Then
Kc = 0.099
ElseIf CPXD > 15 And CPXD <= 50 Then
Ga = 15
Gb = 50
Ka = 0.099
Kb = 0.066
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 50 And CPXD <= 100 Then
Ga = 50
Gb = 100
Ka = 0.066
Kb = 0.051
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 100 And CPXD <= 200 Then
Ga = 100
Gb = 200
Ka = 0.051
Kb = 0.039
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 200 And CPXD <= 500 Then
Ga = 200
Gb = 500
Ka = 0.039
Kb = 0.03
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 500 And CPXD <= 1000 Then
Ga = 500
Gb = 1000
Ka = 0.03
Kb = 0.024
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 1000 And CPXD <= 2000 Then
Ga = 1000
Gb = 2000
Ka = 0.024
Kb = 0.017
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 2000 And CPXD <= 5000 Then
Ga = 2000
Gb = 5000
Ka = 0.017
Kb = 0.013
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 5000 And CPXD <= 8000 Then
Ga = 5000
Gb = 8000
Ka = 0.013
Kb = 0.012
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
Else
Kc = 0.012
End If
ThamdinhThietke3 = Kc / 100
ElseIf Loai_cong_trinh = 2 Then
If CPXD <= 15 Then
Kc = 0.114
ElseIf CPXD > 15 And CPXD <= 50 Then
Ga = 15
Gb = 50
Ka = 0.114
Kb = 0.076
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 50 And CPXD <= 100 Then
Ga = 50
Gb = 100
Ka = 0.076
Kb = 0.058
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 100 And CPXD <= 200 Then
Ga = 100
Gb = 200
Ka = 0.058
Kb = 0.045
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 200 And CPXD <= 500 Then
Ga = 200
Gb = 500
Ka = 0.045
Kb = 0.035
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 500 And CPXD <= 1000 Then
Ga = 500
Gb = 1000
Ka = 0.035
Kb = 0.026
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 1000 And CPXD <= 2000 Then
Ga = 1000
Gb = 2000
Ka = 0.026
Kb = 0.021
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 2000 And CPXD <= 5000 Then
Ga = 2000
Gb = 5000
Ka = 0.021
Kb = 0.016
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 5000 And CPXD <= 8000 Then
Ga = 5000
Gb = 8000
Ka = 0.016
Kb = 0.013
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
Else
Kc = 0.013
End If
ThamdinhThietke3 = Kc / 100
ElseIf Loai_cong_trinh = 3 Then
If CPXD <= 15 Then
Kc = 0.065
ElseIf CPXD > 15 And CPXD <= 50 Then
Ga = 15
Gb = 50
Ka = 0.065
Kb = 0.043
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 50 And CPXD <= 100 Then
Ga = 50
Gb = 100
Ka = 0.043
Kb = 0.033
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 100 And CPXD <= 200 Then
Ga = 100
Gb = 200
Ka = 0.033
Kb = 0.026
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 200 And CPXD <= 500 Then
Ga = 200
Gb = 500
Ka = 0.026
Kb = 0.02
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 500 And CPXD <= 1000 Then
Ga = 500
Gb = 1000
Ka = 0.02
Kb = 0.015
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 1000 And CPXD <= 2000 Then
Ga = 1000
Gb = 2000
Ka = 0.015
Kb = 0.012
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 2000 And CPXD <= 5000 Then
Ga = 2000
Gb = 5000
Ka = 0.012
Kb = 0.01
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 5000 And CPXD <= 8000 Then
Ga = 5000
Gb = 8000
Ka = 0.01
Kb = 0.008
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
Else
Kc = 0.008
End If
ThamdinhThietke3 = Kc / 100
ElseIf Loai_cong_trinh = 4 Then
If CPXD <= 15 Then
Kc = 0.072
ElseIf CPXD > 15 And CPXD <= 50 Then
Ga = 15
Gb = 50
Ka = 0.072
Kb = 0.048
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 50 And CPXD <= 100 Then
Ga = 50
Gb = 100
Ka = 0.048
Kb = 0.036
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 100 And CPXD <= 200 Then
Ga = 100
Gb = 200
Ka = 0.036
Kb = 0.029
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 200 And CPXD <= 500 Then
Ga = 200
Gb = 500
Ka = 0.029
Kb = 0.022
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 500 And CPXD <= 1000 Then
Ga = 500
Gb = 1000
Ka = 0.022
Kb = 0.017
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 1000 And CPXD <= 2000 Then
Ga = 1000
Gb = 2000
Ka = 0.017
Kb = 0.014
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 2000 And CPXD <= 5000 Then
Ga = 2000
Gb = 5000
Ka = 0.014
Kb = 0.01
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 5000 And CPXD <= 8000 Then
Ga = 5000
Gb = 8000
Ka = 0.01
Kb = 0.009
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
Else
Kc = 0.009
End If
ThamdinhThietke3 = Kc / 100
ElseIf Loai_cong_trinh = 5 Then
If CPXD <= 15 Then
Kc = 0.076
ElseIf CPXD > 15 And CPXD <= 50 Then
Ga = 15
Gb = 50
Ka = 0.076
Kb = 0.051
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 50 And CPXD <= 100 Then
Ga = 50
Gb = 100
Ka = 0.051
Kb = 0.039
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 100 And CPXD <= 200 Then
Ga = 100
Gb = 200
Ka = 0.039
Kb = 0.03
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 200 And CPXD <= 500 Then
Ga = 200
Gb = 500
Ka = 0.03
Kb = 0.024
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 500 And CPXD <= 1000 Then
Ga = 500
Gb = 1000
Ka = 0.024
Kb = 0.018
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 1000 And CPXD <= 2000 Then
Ga = 1000
Gb = 2000
Ka = 0.018
Kb = 0.016
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 2000 And CPXD <= 5000 Then
Ga = 2000
Gb = 5000
Ka = 0.016
Kb = 0.012
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
ElseIf CPXD > 5000 And CPXD <= 8000 Then
Ga = 5000
Gb = 8000
Ka = 0.012
Kb = 0.01
Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
Else
Kc = 0.01
End If
ThamdinhThietke3 = Kc / 100
Else
MsgBox "Loai cong trinh chua phu hop!" & vbCrLf & vbCrLf _
& "Ban vui long chon Loai_cong_trinh nhu sau:" & vbCrLf _
& "1 = Cong trinh Dan dung" & vbCrLf _
& "2 = Cong trinh Cong nghiep" & vbCrLf _
& "3 = Cong trinh Giao thong" & vbCrLf _
& "4 = Cong trinh Nong nghiep phat trien nong thon" & vbCrLf _
& "5 = Cong trinh Ha tang ky that" & vbCrLf & vbCrLf _
& "Xin cam on!"
End If
End Function
 
Upvote 0
Chào longriver28284,

Bạn thử thêm như sau xem:
Mã:
....
& "Xin cam on!"
[COLOR=#ff0000]Exit Function[/COLOR]
End If
End Function
 
Upvote 0
Vẫn không có gì thay đổi ạ!
Bạn thử như vầy:
Mã:
Function ThamdinhThietke3(CPXD As Double, Loai_cong_trinh [COLOR=#ff0000]As Double[/COLOR]) 'Tra dinh muc chi phi chung cong trinh DAN DUNG
If Loai_cong_trinh Mod 1 > 0 Or Loai_cong_trinh > 5 Then
    MsgBox "Loai cong trinh chua phu hop!" & vbCrLf & vbCrLf _
    & "Ban vui long chon Loai_cong_trinh nhu sau:" & vbCrLf _
    & "1 = Cong trinh Dan dung" & vbCrLf _
    & "2 = Cong trinh Cong nghiep" & vbCrLf _
    & "3 = Cong trinh Giao thong" & vbCrLf _
    & "4 = Cong trinh Nong nghiep phat trien nong thon" & vbCrLf _
    & "5 = Cong trinh Ha tang ky that" & vbCrLf & vbCrLf _
    & "Xin cam on!"
    Exit Function
End If
Dim Ka, Kb, Kc, Ga, Gb As Double
If Loai_cong_trinh = 1 Then
'.......5 truong hop
    Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
    Else
    Kc = 0.01
    End If
    ThamdinhThietke3 = Kc / 100
End If
End Function
 
Upvote 0
Nhờ các bạn xem giúp mình lỗi đoạn code sau. Nếu copy range của từng sheet sang sheet("DSACH") thì có vẻ hơi lâu nên mình dùng value = value nhưng nó ko chạy.

file: https://mediafire.zendesk.com/…/token/Nk80ZRMspX1u50VbQNG…/…


Mình thử bỏ lệnh IF đi thì marco chạy nhưng copy 2 lần, hic


Hoặc có cách nào nhanh hơn copy range từng sheet sang sheet("DSACH") không.

Thanks

Sub COPY ()

P/S: Nhờ chỉ dùm cách gỡ rối khác

Dim SoSheet As Long
SoSheet = ActiveWorkbook.Sheets.Count
For j = 1 To SoSheet
lr_j = Sheets(j).Cells(Rows.Count, 2).End(xlUp).Row
lr = Sheets("DSACH").Cells(Rows.Count, 2).End(xlUp).Row
If ActiveSheet.Name = "DSACH" Or ActiveSheet.Name = "SOLIEU" Then
Else
Sheets("DSACH").Cells(lr + 1, 1).Resize(lr_j, 17).Value = _
Sheets(j).Range("A3").Resize(lr_j, 17).Value
End If
Next j

End Sub

P/S: Nhờ chỉ dùm cách gỡ rối khác với cách

For j = 1 To SoSheet - 1 nhé

- Có cách nào đếm số sheet trong workbooks nhưng loại trừ sheet có tên "DSACH" ko vậy???
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các bạn xem giúp mình lỗi đoạn code sau. Nếu copy range của từng sheet sang sheet("DSACH") thì có vẻ hơi lâu nên mình dùng value = value nhưng nó ko chạy.

file: https://mediafire.zendesk.com/…/token/Nk80ZRMspX1u50VbQNG…/…


Mình thử bỏ lệnh IF đi thì marco chạy nhưng copy 2 lần, hic


Hoặc có cách nào nhanh hơn copy range từng sheet sang sheet("DSACH") không.

Bạn thử đoạn sau:

Mã:
Sub COPY()
Dim lr As Long, er As Long, sh As Worksheet, sh0 As Worksheet, tmp()
Set sh0 = Sheets("DSACH")
sh0.Range("A3:Q65000").ClearContents
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> sh0.Name Then
        lr = sh.Cells(Rows.Count, 2).End(xlUp).Row
        tmp = sh.Range("B3:Q" & lr).Value
        er = sh0.Cells(Rows.Count, 2).End(xlUp).Row + 1
        sh0.Range("B" & er).Resize(UBound(tmp, 1), UBound(tmp, 2)).Value = tmp
    End If
Next sh
'Dien STT:
sh0.Range("A3:A" & sh0.Cells(Rows.Count, 2).End(xlUp).Row).Value = No(sh0.Range("A3:A" & sh0.Cells(Rows.Count, 2).End(xlUp).Row))
End Sub

Function No(rng As Range) As Variant
If rng.Columns.Count > 1 Then Exit Function
Dim tmp(), i As Long
ReDim tmp(1 To rng.Count, 1 To 1)
For i = 1 To UBound(tmp, 1)
    tmp(i, 1) = i
Next i
No = tmp
End Function
 
Upvote 0
Vẫn không được ạ!
Mục đích của mình là kiểm tra giá trị của Loai_cong_trinh nhập vào:
1. Nếu là số nguyên dương từ 1đến 5 thì thực hiện các lệnh.
2. Không thuộc trường hợp trên thì thoát hàm và hiện thông báo.
Xin vui lòng trợ giúp!
Bạn thử như vầy:
Mã:
Function ThamdinhThietke3(CPXD As Double, Loai_cong_trinh [COLOR=#ff0000]As Double[/COLOR]) 'Tra dinh muc chi phi chung cong trinh DAN DUNG
If Loai_cong_trinh Mod 1 > 0 Or Loai_cong_trinh > 5 Then
    MsgBox "Loai cong trinh chua phu hop!" & vbCrLf & vbCrLf _
    & "Ban vui long chon Loai_cong_trinh nhu sau:" & vbCrLf _
    & "1 = Cong trinh Dan dung" & vbCrLf _
    & "2 = Cong trinh Cong nghiep" & vbCrLf _
    & "3 = Cong trinh Giao thong" & vbCrLf _
    & "4 = Cong trinh Nong nghiep phat trien nong thon" & vbCrLf _
    & "5 = Cong trinh Ha tang ky that" & vbCrLf & vbCrLf _
    & "Xin cam on!"
    Exit Function
End If
Dim Ka, Kb, Kc, Ga, Gb As Double
If Loai_cong_trinh = 1 Then
'.......5 truong hop
    Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
    Else
    Kc = 0.01
    End If
    ThamdinhThietke3 = Kc / 100
End If
End Function
 
Upvote 0
Nhờ các bạn xem giúp mình lỗi đoạn code sau. Nếu copy range của từng sheet sang sheet("DSACH") thì có vẻ hơi lâu nên mình dùng value = value nhưng nó ko chạy.

file: https://mediafire.zendesk.com/…/token/Nk80ZRMspX1u50VbQNG…/…


Mình thử bỏ lệnh IF đi thì marco chạy nhưng copy 2 lần, hic


Hoặc có cách nào nhanh hơn copy range từng sheet sang sheet("DSACH") không.

Thanks

Sub COPY ()

P/S: Nhờ chỉ dùm cách gỡ rối khác

Dim SoSheet As Long
SoSheet = ActiveWorkbook.Sheets.Count
For j = 1 To SoSheet
lr_j = Sheets(j).Cells(Rows.Count, 2).End(xlUp).Row
lr = Sheets("DSACH").Cells(Rows.Count, 2).End(xlUp).Row
If ActiveSheet.Name = "DSACH" Or ActiveSheet.Name = "SOLIEU" Then
Else
Sheets("DSACH").Cells(lr + 1, 1).Resize(lr_j, 17).Value = _
Sheets(j).Range("A3").Resize(lr_j, 17).Value
End If
Next j

End Sub

P/S: Nhờ chỉ dùm cách gỡ rối khác với cách

For j = 1 To SoSheet - 1 nhé

- Có cách nào đếm số sheet trong workbooks nhưng loại trừ sheet có tên "DSACH" ko vậy???
Bạn xem thử file (Mình ứng dụng code của thày Bate)
 

File đính kèm

Upvote 0
Vẫn không được ạ!
Mục đích của mình là kiểm tra giá trị của Loai_cong_trinh nhập vào:
1. Nếu là số nguyên dương từ 1đến 5 thì thực hiện các lệnh.
2. Không thuộc trường hợp trên thì thoát hàm và hiện thông báo.
Xin vui lòng trợ giúp!
Bạn thử lại:
Mã:
Function ThamdinhThietke3(CPXD As Double, Loai_cong_trinh [COLOR=#0000ff]As Byte[/COLOR]) 'Tra dinh muc chi phi chung cong trinh DAN DUNG
If [COLOR=#0000ff]TypeName(Loai_cong_trinh) <> "Integer"[/COLOR] Or Loai_cong_trinh > 5 Then
    MsgBox "Loai cong trinh chua phu hop!" & vbCrLf & vbCrLf _
    & "Ban vui long chon Loai_cong_trinh nhu sau:" & vbCrLf _
    & "1 = Cong trinh Dan dung" & vbCrLf _
    & "2 = Cong trinh Cong nghiep" & vbCrLf _
    & "3 = Cong trinh Giao thong" & vbCrLf _
    & "4 = Cong trinh Nong nghiep phat trien nong thon" & vbCrLf _
    & "5 = Cong trinh Ha tang ky that" & vbCrLf & vbCrLf _
    & "Xin cam on!"
    Exit Function
End If
Dim Ka, Kb, Kc, Ga, Gb As Double
If Loai_cong_trinh = 1 Then
'.......5 truong hop
'    Kc = Kb - (Kb - Ka) * (CPXD - Gb) / (Ga - Gb)
'    Else
'    Kc = 0.01
'    End If
'    ThamdinhThietke3 = Kc / 100
End If
End Function
 
Upvote 0
Dear các anh/chị
Em có 1 case chưa biết xử lý thế nào nhờ các anh/chị tư vấn xử lý MACRO giúp ạ, cụ thể là ntn:
Em có 1 file Excel gồm 1 sheet chứa trường thông tin + 1 sheet biểu mẫu cần xuất ra (Sheet 2 này có hàm link từ Sheet 1 sang sao cho khi đổi giá trị ở ô màu đỏ (C3-sheet2) bằng các giá trị thứ tự từ trên xuống dưới của cột B bên sheet 1 thì sẽ thành 1 nội dung khác --> Sheet này là sheet cần tạo ra).
--> Sản phẩm: Cần mỗi 1 giá trị trong cột B (sheet 1) chạy từ B3 đến hết (B18) sẽ tạo ra 1 sheet mới hoàn toàn theo mẫu của sheet 2 ("BM01") - đặt tên sheet mới này theo mã trong cột B để phân biệt. Có 16 giá trị trong cột B thì xuất ra 16 sheet mới ở workbook.
Nhờ các anh/chị giúp ạ!
http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=168274&d=1478681879
 

File đính kèm

Upvote 0
Xóa nội dung do không trả lời với trích dẫn
 
Lần chỉnh sửa cuối:
Upvote 0
Câu hỏi mới: Nhờ Thầy nào online giúp đỡ giùm em với.

Nhờ Thầy giúp giùm em, thêm code cho hàm diễn giải có hàm round, em muốn xóa chữ "round(" thì Ok, còn đối số cuối của số làm tròn em cắt chưa được), phân cách công thức ở máy em là dấu ;

Đọc trên diễn đàn thấy mã asc số 59, nhưng cũng chưa bắt được cái dấu ; ở cuối hàm round.
Em cảm ơn Thầy
Public Function diengiai(rngData As Range)
Dim strText As String, strText2 As String
Dim i As Long, j As Long, dem As Long
Dim subText() As String, dau() As String
Dim Res As Double
strText = rngData.Formula
For i = 1 To Len(strText)
Select Case Mid(strText, i, 1)
Case "+", "-", "*", "/", "^"
ReDim Preserve dau(j)
dau(j) = Mid(strText, i, 1)
j = j + 1
End Select
Next i
strText = Replace(strText, "=", "")
strText = Replace(strText, ":", "")
strText = Replace(strText, "#", "")
strText = Replace(strText, "{", "(")
strText = Replace(strText, "}", ")")
strText = Replace(strText, "[", "(")
strText = Replace(strText, "]", ")")

strText = Replace(strText, "+", "@")
strText = Replace(strText, "-", "@")
strText = Replace(strText, "*", "@")
strText = Replace(strText, "/", "@")
strText = Replace(strText, "", "@")
strText = Replace(strText, "^", "@")
'strText = Replace(strText, ";", "#")
If Left(strText, 6) = "ROUND(" Then
strText = Replace(strText, "ROUND(", "")
strText = Split(strText, ";")(0)
End If

strText = Trim(strText)
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào mọi người,

Mọi người chỉ giúp em trường hợp này với. Em có bảng tính như sau :
[TABLE="width: 384"]
[TR]
[TD="class: xl64"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[/TR]
[/TABLE]
macro.jpg
Em muốn chọn vùng màu xanh nên viết code như sau :

Range("B2",Range("B1").End(xlDown).End(xlToRight)).Select

Nhưng do trong cột có ô trống nên excel chỉ chọn vùng A1&A2 thôi.

Mọi người chỉ giúp em đoạn code để chọn dc chính xác vùng màu xanh với nhen.

Cám ơn mọi người
 
Upvote 0
Xin chào mọi người,

Mọi người chỉ giúp em trường hợp này với. Em có bảng tính như sau :
[TABLE="width: 384"]
[TR]
[TD="class: xl64"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[TD="class: xl66"][/TD]
[/TR]
[/TABLE]
View attachment 169029
Em muốn chọn vùng màu xanh nên viết code như sau :

Range("B2",Range("B1").End(xlDown).End(xlToRight)).Select

Nhưng do trong cột có ô trống nên excel chỉ chọn vùng A1&A2 thôi.

Mọi người chỉ giúp em đoạn code để chọn dc chính xác vùng màu xanh với nhen.

Cám ơn mọi người
Vậy bạn sửa lại thế này xem sao.
Mã:
Range("B2", Range("F65000").End(xlUp)).Select
 
Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom