Giúp Mình họp thoại Input (1 người xem)

  • Thread starter Thread starter vu_ctn
  • Ngày gửi Ngày gửi

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

vu_ctn

Thành viên chính thức
Tham gia
3/6/10
Bài viết
70
Được thích
2
Mình đang mài mò VBA. Mình nhờ ACE GPE giúp mình cái Input mình không hiếu lắm. Khi mình mở lên họp thoại Input se hiện ra và mình muốn nhập giá trị cần tim vào Ô D16. nhưng mình mò hoài không ra. có file đính kèm nhờ các ACE giúp đỡ. và chỉ dẫn mình thêm ( hic. lò mò trên web học nên khổ quá )
 

File đính kèm

Mình đang mài mò VBA. Mình nhờ ACE GPE giúp mình cái Input mình không hiếu lắm. Khi mình mở lên họp thoại Input se hiện ra và mình muốn nhập giá trị cần tim vào Ô D16. nhưng mình mò hoài không ra. có file đính kèm nhờ các ACE giúp đỡ. và chỉ dẫn mình thêm ( hic. lò mò trên web học nên khổ quá )

Bạn thử như sau:

Mã:
Sub test()
    [D16] = InputBox("Vui long nhap so", "Nhap So", 120)

End Sub
 
Upvote 0
được rồi bạn ơi. nhưng mình muốn nhúng nó vào code Do_tim() luôn được không bạn.
 
Upvote 0
Được chứ sao không. Bạn đưa File nên đây!
 
Upvote 0
Của bạn đây....................................
 

File đính kèm

Upvote 0
Của bạn đây....................................

Nhìn code của tác giả rồi code do bạn thêm vào:
Mã:
Sub Do_Tim()
'
' Do_Tim Macro
'

'
   
   ' InputBox (" Nhap DB :"): Range("D16").Value
    Danh_STT2
    Danh_STT3
     [COLOR=#ff0000][D16] = InputBox("Vui long nhap so", "Nhap So", 120)[/COLOR]
    Range("H15:H31").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-3]="""","""",VLOOKUP(RC[-3],CSDL,3,0))"
     Selection.FormulaR1C1 = _
        "=IF(RC[-3]="""","""",VLOOKUP(RC[-3],CSDL,3,0))"
    
       
    Range("h15:H31").Select
    Application.CutCopyMode = False
    Selection.Copy
   'ActiveWindow.SmallScroll Down:=-15
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
 
 Range("H15").Select
End Sub
Tôi không tài nào hiểu được cái InputBox ấy có liên quan gì đến code Do_Tim?
 
Upvote 0
Em xin lồi thầy ndu em viết nhầm. nhập vào ô D14 chứ không phải nhập vào ô D16. Thầy có thể sửa các code trong bài của em cho ngắn gọn lại được không thầy. Vì code như thế khi đưa vào bài dữ liệu lên 20.000 dòng sẽ chạy rất chậm. nhưng em khả năng của em chỉ có thế thôi. Mong thầy chỉ dẫn.
 
Upvote 0
Em xin lồi thầy ndu em viết nhầm. nhập vào ô D14 chứ không phải nhập vào ô D16. Thầy có thể sửa các code trong bài của em cho ngắn gọn lại được không thầy. Vì code như thế khi đưa vào bài dữ liệu lên 20.000 dòng sẽ chạy rất chậm. nhưng em khả năng của em chỉ có thế thôi. Mong thầy chỉ dẫn.

Tôi nghĩ là bạn muốn lọc cột B theo chuỗi đã nhập trong InputBox? Đúng không?
Nếu đúng là vậy thì: Bạn đã mô tả quá dài dòng (khiến người ta không biết cuối cùng bạn muốn cái gì)
Giờ việc của bạn là:
- Cho dữ liệu thật lên đây (chừng vài trăm dòng)
- Mô tả chi tiết cần lọc thế nào
- Chỉ định nơi đặt kết quả là ở đâu

Vậy là đủ! Hãy quên mấy vụ InputBox gì đó đi
 
Upvote 0
trên đây là công việc em phải làm hàng tháng. các yêu cầu và qui trình làm em đã nêu ở file đính kèm.
Sheet STEMP và sheet BC là 2 sheet tạm để em lọc ngày tháng vào mã tuyến đường
Thầy xem có cách nào làm cho các nút Lọc của em chạy nhanh thêm tí được không ?

quan trọng là sheet BCCTIET trong sheet này hoàn toàn em làm bằng tay. Thầy xem có nên thiết kế 1 maccro tự động lấy số liệu và tự Sum khi sang ngày khác. ( số lượng thu từng ngày không bằng nhau)
Cảm ơn thầy nhiều.
 

File đính kèm

Upvote 0
trên đây là công việc em phải làm hàng tháng. các yêu cầu và qui trình làm em đã nêu ở file đính kèm.
Sheet STEMP và sheet BC là 2 sheet tạm để em lọc ngày tháng vào mã tuyến đường
Thầy xem có cách nào làm cho các nút Lọc của em chạy nhanh thêm tí được không ?

quan trọng là sheet BCCTIET trong sheet này hoàn toàn em làm bằng tay. Thầy xem có nên thiết kế 1 maccro tự động lấy số liệu và tự Sum khi sang ngày khác. ( số lượng thu từng ngày không bằng nhau)
Cảm ơn thầy nhiều.

Biết ngay là sẽ LỌC gì gì đó. Từ đầu bạn mô tả chính xác có phải đở mất công không (cứ lòng vòng cái gì InputBox, chẳng ăn nhậu gì)
Bài này bạn cứ chờ các cao thủ vào giúp nhé (Quang Hải, Anh Ba Tê, Anh Cò...). Mấy anh đó giờ là đại ca GPE rồi
Ẹc... Ẹc...
 
Upvote 0
trên đây là công việc em phải làm hàng tháng. các yêu cầu và qui trình làm em đã nêu ở file đính kèm.
Sheet STEMP và sheet BC là 2 sheet tạm để em lọc ngày tháng vào mã tuyến đường
Thầy xem có cách nào làm cho các nút Lọc của em chạy nhanh thêm tí được không ?

quan trọng là sheet BCCTIET trong sheet này hoàn toàn em làm bằng tay. Thầy xem có nên thiết kế 1 maccro tự động lấy số liệu và tự Sum khi sang ngày khác. ( số lượng thu từng ngày không bằng nhau)
Cảm ơn thầy nhiều.
Sao mình thấy tổng tiền sheet BC là 18.897.600 còn ở sheet BCCTIET là 19.816.000? Nhân viên Thành là ai và được chọn trong tiêu chí nào vậy bạn?
 
Upvote 0
Nhân viên Thành em lấy làm VD thôi. bình thường em nhập xong rồi đánh tên vào nhân viên Thu vào.
Công ty em có 6 nhân viên thu. còn tổng tiền để em xem lại. em sợ nhất là khâu này Sum qua Sum lại thì bị lêch tiền. hic hic

Thầy ndu ơi em định làm cái Inputbox cho oai vậy mà. chứ cốt lỗi của bài là lọc Dữ liệu.
 
Upvote 0
Nhân viên Thành em lấy làm VD thôi. bình thường em nhập xong rồi đánh tên vào nhân viên Thu vào.
Công ty em có 6 nhân viên thu. còn tổng tiền để em xem lại. em sợ nhất là khâu này Sum qua Sum lại thì bị lêch tiền. hic hic

Thầy ndu ơi em định làm cái Inputbox cho oai vậy mà. chứ cốt lỗi của bài là lọc Dữ liệu.

Vậy thì kiểm tra rồi thông báo nhé. Có thể ta không cần dùng đến 2 sheet tạm đó đâu.
 
Upvote 0
Em đã kiểm tra . và đây là file có kết quả đúng .
 

File đính kèm

Upvote 0
Em đã kiểm tra . và đây là file có kết quả đúng .

Bạn chèn thêm sheet mới rồi chạy code sau:

[GPECODE=sql]Sub LayDL()
Dim cn As Object, rst As Object
Dim strSQL As String
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
strSQL = "SELECT F1,F2,F5 " & _
"FROM [DL$B4:F2000] " & _
"WHERE F2 like '" & Sheet5.[C4] & "%' and Month(F1) = " & Sheet5.[C5] & _
" order by F1"
Set rst = cn.Execute(strSQL)
With Sheet5
.[A8:D2000].ClearContents
.[A8].CopyFromRecordset rst
End With
rst.Close: cn.Close
Set rst = Nothing: Set cn = Nothing

End Sub

[/GPECODE]

Tôi chỉ giúp bạn phần lấy dữ liệu, phần còn lại bạn tự làm nhé.

Bạn tham khảo file đính kèm.
 

File đính kèm

Upvote 0
Mình không làm được cột Sum sao Thầy Hai Lúa. cứ hết 1 ngày thì nó sẽ Sum cột tiền lại.
 
Upvote 0
Mình không làm được cột Sum sao Thầy Hai Lúa. cứ hết 1 ngày thì nó sẽ Sum cột tiền lại.

Tôi đã sắp xếp cột ngày lại, bạn dùng công cụ subtotal để cộng theo cột ngày. Nếu muốn code thì ghi lại macro của công đoạn này rồi cho vào code luôn. Tập làm cho quen bạn nhé.
 
Upvote 0
Viết cho bạn code cộng luôn. Gọi Sub này tại cuối Sub kia là được
PHP:
Sub Cong()
Dim Data(), I, X
With Sheet5
    Data = .Range(.[A8], [A65536].End(3)).Resize(, 4).Value
   With CreateObject("scripting.dictionary")
        For I = 1 To UBound(Data)
            If Not .exists(Data(I, 1)) Then
                .Add Data(I, 1), I
                Data(I, 4) = Data(I, 3)
            Else
                X = .Item(Data(I, 1))
                Data(X, 4) = Data(X, 4) + Data(I, 3)
            End If
        Next
   End With
   [A8].Resize(I - 1, 4) = Data
End With
End Sub
 
Upvote 0
Mình tạo 1 dòng tự động chèn cuối 1 ngày và Sum lại. (minh họa ở file đính kèm.)
 

File đính kèm

Upvote 0
Mình tạo 1 dòng tự động chèn cuối 1 ngày và Sum lại. (minh họa ở file đính kèm.)
PHP:
Sub Cong()
Dim Data(), I, N, K, Res(1 To 65536, 1 To 3), dinhdang
With Sheet5
    Data = .Range(.[A8], [A65536].End(3).Offset(1)).Resize(, 3).Value
    N = 8
        For I = 1 To UBound(Data) - 1
            K = K + 1
            Res(K, 2) = Data(I, 2)
            Res(K, 3) = Data(I, 3)
            If Data(I, 1) <> Data(I + 1, 1) Then
                K = K + 1
                Res(N - 7, 1) = Data(I, 1)
                Res(K, 3) = "=sum(R" & N & "C:R[-1]C)"
                dinhdang = dinhdang & "," & "C" & K + 7
                N = K + 8
            End If
        Next  
   dinhdang = Replace(dinhdang, ",", "", 1, 1)
   .[A8].Resize(K, 3) = Res
   .Range(dinhdang).Font.Bold = True
End With
End Sub
 
Upvote 0
cảm ơn thầy quanghai1969. Vấn đề đã được gải quyết. thành thật cám ơn thầy./-*+/
 
Upvote 0

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

Back
Top Bottom