Hỏi cách lấy giá trị cell theo tên sheet cố định ...

Liên hệ QC

nhatnamit

Thành viên mới
Tham gia
19/1/10
Bài viết
15
Được thích
4
Mình đang dùng code dưới đây (code này mò mẫm học hỏi từ GPE) để in hàng loạt. Hiện tại nó tạm thời đáp ứng được nhu cầu.
Mã:
Private Sub MultiPrint_Click()
    Dim HopThoai, Result, ViewOnly
    Dim SRow, SData
    On Error GoTo Ketthuc


    HopThoai = Trim(InputBox("Nhap so phieu theo dang tu so-den so" & vbNewLine & vbNewLine & "Vi du: 1-5 hay 3-3", "In phieu"))
    Result = Split(HopThoai, "-")
    ViewOnly = MsgBox("Neu chi xem truoc thi nhan Cancel!", vbOKCancel, "In luon hay chi xem truoc ?")


    For SRow = Val(Result(0)) To Val(Result(1))
        SData = SRow + 8
        With Sheet4
            .[O1] = Sheet3.Cells(SData, 3).Value
            .[O2] = Sheet3.Cells(SData, 3).Value
            .[O3] = Sheet3.Cells(SData, 4).Value
            
            .[D9] = Sheet3.Cells(SData, 26).Value & " - " & Sheet3.Cells(SData, 27).Value
            .[D10] = Sheet3.Cells(SData, 28).Value
            
            .[D11] = Sheet3.Cells(SData, 8).Value
            .[D13] = Sheet3.Cells(SData, 14).Value
        End With
        If ViewOnly = 2 Then
            [A1:P21].PrintPreview
        Else
            [A1:P21].PrintOut
        End If
    Next
    
Ketthuc:
End Sub

Tuy nhiên cứ mỗi lần copy Sheet3 sang tháng mới thì lại phải vào sửa code vì lúc đó nội dung tháng mới nằm ở Sheet5, 6, 7, ... Vậy có cách nào thay đổi cái phần lấy giá trị từ Sheet3 gán cho Sheet hiện tại (Sheet4) bằng phương thức khác không ? Mình thấy có cách lấy theo kiểu
Mã:
    Dim Sh As Worksheet
    Set Sh = Sheets("Current")
nhưng không biết cách áp dụng cho code trên.

Mong các bạn giúp đỡ. Cám ơn
 
Thôi cũng tạm ổn, sau 1 thời gian mò mẫm, ngâm cứu thì mình cũng tìm cách giải quyết được vấn đề, chia sẻ để ai ko biết tham khảo cũng như các a/c có cách nào hay hơn chỉ giáo.

Mình thay cái phần
Mã:
For SRow = Val(Result(0)) To Val(Result(1))
	SData = SRow + 8
	With Sheet4
		.[O1] = Sheet3.Cells(SData, 3).Value
		.[O2] = Sheet3.Cells(SData, 3).Value
		.[O3] = Sheet3.Cells(SData, 4).Value
		
		.[D9] = Sheet3.Cells(SData, 26).Value & " - " & Sheet3.Cells(SData, 27).Value
		.[D10] = Sheet3.Cells(SData, 28).Value
		
		.[D11] = Sheet3.Cells(SData, 8).Value
		.[D13] = Sheet3.Cells(SData, 14).Value
	End With
	If ViewOnly = 2 Then
		[A1:P21].PrintPreview
	Else
		[A1:P21].PrintOut
	End If
Next

với code tương tự như dưới

Mã:
Dim TenBang As Worksheet, PhamVi As Range, TimKiem As Range
Set TenBang = Sheets("Current")
For SRow = Val(KetQua(0)) To Val(KetQua(1)) Step 1
	'Muon them 1 cell de luu gia tri
	[Q6].Value = SRow


	If Not [Q6] Is Nothing Then
		Set PhamVi = TenBang.Range(TenBang.[A9], TenBang.[A65356].End(xlUp))
		Set TimKiem = PhamVi.Find([Q6].Value, , xlFormulas, xlWhole)


		If Not TimKiem Is Nothing Then
			[O1].Value = TimKiem.Offset(, 3).Value))
			[O2].Value = TimKiem.Offset(, 3).Value
			[O3].Value = TimKiem.Offset(, 4).Value
			
			[D9].Value = TimKiem.Offset(, 26).Value & " - " & TimKiem.Offset(, 27).Value
			[D10].Value = TimKiem.Offset(, 28).Value
			
			[D11].Value = TimKiem.Offset(, 8).Value
			[D13].Value = TimKiem.Offset(, 14).Value
		End If
	End If


	If ViewOnly = 2 Then
		[A1:P21].PrintPreview
	Else
		[A1:P21].PrintOut
	End If
Next

Sau này, cứ thêm sheet tháng khác thì rename cái tên sheet (không phải codename: Sheetx) thành Current mà thôi, đỡ vất vả hơn.
 
Upvote 0
Thôi cũng tạm ổn, sau 1 thời gian mò mẫm, ngâm cứu thì mình cũng tìm cách giải quyết được vấn đề, chia sẻ để ai ko biết tham khảo cũng như các a/c có cách nào hay hơn chỉ giáo.
Mình thay cái phần
Mã:
.........
với code tương tự như dưới
Mã:
Dim TenBang As Worksheet, PhamVi As Range, TimKiem As Range
Set TenBang = Sheets("Current")
For SRow = Val(KetQua(0)) To Val(KetQua(1)) Step 1
    'Muon them 1 cell de luu gia tri
    [Q6].Value = SRow
    If Not [Q6] Is Nothing Then
        ..........
    End If
.........
Next
Sau này, cứ thêm sheet tháng khác thì rename cái tên sheet (không phải codename: Sheetx) thành Current mà thôi, đỡ vất vả hơn.
Tham gia với bạn một chút cho vui! Để đỡ phải đổi tên sheet thì thay vì câu lệnh cố định Set TenBang = Sheets("Current"), ta có thể sử dụng InputBox để chọn sheet cần thao tác. Cụ thể là thay câu lệnh trên bởi dãy lệnh sau:
PHP:
Dim Rng As Range, TenBang As Worksheet
On Error Resume Next
Set Rng = Application.InputBox("Chon 1 o tren sheet can thao tac", Type:=8)
If Not Rng Is Nothing Then Set TenBang = Rng.Parent
Thêm nữa, mình thấy điều kiện Not [Q6] Is Nothing hơi thừa vì cái này luôn trả về True, do đó các lệnh trong cặp If-End If này luôn được thực hiện, không tin bạn cứ thử câu lệnh này sẽ thấy ngay, mặc dù bạn thay đổi nội dung ô Q6 là gì đi nữa:
PHP:
Msgbox Not [Q6] Is Nothing
Phải chăng ý của bạn chỗ này là If [Q6]<>"" Then...?
 
Upvote 0
Cám ơn nghiaphuc về các góp ý. Vì vba không phải là lĩnh vực của mình nên kiến thức của mình về nó chỉ là sự góp nhặt từ nhiều nguồn (GPE, google, ...) với mục đích phục vụ cho công việc ngay trước mắt. Thế nên mới có cái chuyện
Thêm nữa, mình thấy điều kiện Not [Q6] Is Nothing hơi thừa vì cái này luôn trả về True, do đó các lệnh trong cặp If-End If này luôn được thực hiện, không tin bạn cứ thử câu lệnh này sẽ thấy ngay, mặc dù bạn thay đổi nội dung ô Q6 là gì đi nữa ...

:D
 
Upvote 0
Web KT
Back
Top Bottom