intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

LẤY QUERY BẰNG LỆNH VBA

Chia sẻ: Nguyen Quy | Ngày: | Loại File: PDF | Số trang:9

226
lượt xem
24
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Một số Query bạn chỉ cần lấy 1 lần rồi sau đó khi có sự thay đổi dữ liệu gốc trong file Access, bạn chỉ cần nhấn Refresh, dữ liệu sẽ tự động update. Đặc biệt là các Query nhằm tạo báo cáo tổng hợp như: Tổng hợp công nợ nhà cung cấp, tổng hợp công nợ khách hàng, tổng hợp nhập xuất tồn vật tư hàng hoá, Bảng cân đối phát sinh.

Chủ đề:
Lưu

Nội dung Text: LẤY QUERY BẰNG LỆNH VBA

  1. LẤY QUERY BẰNG LỆNH VBA Một số Query bạn chỉ cần lấy 1 lần rồi sau đó khi có sự thay đổi dữ liệu gốc trong file Access, bạn chỉ cần nhấn Refresh, dữ liệu sẽ tự động update. Đặc biệt l à các Query nhằm tạo báo cáo tổng hợp như: Tổng hợp công nợ nhà cung cấp, tổng hợp công nợ khách hàng, tổng hợp nhập xuất tồn vật tư hàng hoá, Bảng cân đối phát sinh. Riêng những báo cáo chi tiết như: Sổ Chi tiết nhập xuất 1 mặt hàng, Sổ chi tiết công nợ 1 khách hàng, sổ cái tài khoản, chúng ta thấy khá là khổ công nếu làm cho mỗi đối tượng hoặc mỗi tài khoản 1 query riêng. Ta nhớ lại khi làm các query loại này ta có sử dụng bộ lọc theo đối tượng. Nếu có cách nào chỉ cần chọn 1 đối tượng trong DS cho vào 1 cell nào đó của Excel, rồi Excel tự lấy query (xác định trước) theo đối tượng đó thì hay. Cái này làm ta liên tưởng ngay đến Macro của VBA. Trước tiên ta cần cái DS đó trước. Giả sử là DS nhà cung cấp và ta muốn các sổ chi tiết công nợ nhà cung cấp. Vậy thì ta thực hành ngay lấy DS bằng VBA: Cách dễ nhất để tạo 1 đoạn code VBA mà bạn chả biết tí gì về VBA là Record Macro.
  2. Bật record Macro lên, làm từng bước để lấy table DSNCC trong file Access, chỉ cần 2 trường là đủ. Sau khi kết thúc ra Excel xong, tắt record macro. Mở cửa sổ code ra xem ta thấy đoạn code: PHP Code: Sub GetData() With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MS Access Database;DBQ=E:\Data\Thanh My\Access\Kho & KHa ng.mdb;_ DefaultDir=E:\Data\Thanh My\Access;DriverId=25;FIL=MS Access" _ ), Array(";MaxBufferSize=2048;PageTimeout=5;")),_ Destination:=Range("A1")) .CommandText = Array( _ "SELECT DSNCC.msNCC, DSNCC.TenNCC" & Chr(13) & "" & Chr(10) &_ "FROM `E:\Data\Thanh My\Access\Kho & KHang`.DSNCC DSNCC" _
  3. ) .Name = "Query from MS Access Database" ... .Refresh BackgroundQuery:=False End With End Sub Xem cho biết thôi, vì cái chính là ta cần cái query Chi tiết nhà CC kia. Lấy lại cái Query Sổ chi tiết nhà cung cấp w: Win Engineering ở bài trước mà có record macro: ta sẽ có đoạn code: PHP Code: Sub GetcongnoNCC() With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MS Access Database;DBQ=E:\Data\Thanh My\Access\Kho & KHa ng.mdb;_ DefaultDir=E:\Data\Thanh My\Access;DriverId=25;FIL=MS Access" _
  4. ), Array(";MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1")) .CommandText = Array( _ "SELECT DSNCC.msNCC, DSNCC.TenNCC, DSNCC.MST, DSNCC.Dunodky, _ DSNCC.Ducodky, CTnx.NgayCT, CTnx.SoCT, CTnx.Noidung,_ CTnx.TratienNCC, CTnx.CongtienNX" & Chr(13) & "" & Chr(10) _ & "FROM `E:\Data\Thanh My\Access\Kho & KHang`.CTnx CTnx," _ ,_ " `E:\Data\Thanh My\Access\Kho & KHang`.DSNCC DSNCC" & Chr(13) & "" & Chr(10)_ & "WHERE DSNCC.msNCC = CTnx.NhaCC AND ((DSNCC.msNCC='w'))" _ ) .Name = "Query from MS Access Database" .FieldNames = True .RowNumbers = False
  5. .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With End Sub
  6. Chú ý phần tô đậm màu đỏ: WHERE DSNCC.msNCC = CTnx.NhaCC AND ((DSNCC.msNCC='w'))". Đây là cái mà ta cần. nêu ta thay DSNCC.msNCC='nt' ta sẽ được chi tiết của nhà cung cấp Nam Thịnh có mã 'nt'. Ta có thể dùng 1 validation tại cell L1 với list là cái DS lúc nãy mới lấy xuống, nhưng validation chỉ có 1 cột mã, không hình tượng lắm. Tôi thích dùng combobox hơn, nó cho phép coi 2 c ột vừa mã vừa tên nhà CC, dễ chọn lựa.
  7. Double click vào cái combo tạo code cho combo như sau: PHP Code: Private Sub ComboBox1_Change() GetcongnoNCC End Sub Còn cái Code GetcongnoNCC ta phải sửa 1 tí: Thêm vào sub ở ngay trên cùng: PHP Code: Dim MS as string MS=combobox1.value Range("a1:j7").Clear Câu màu đỏ sửa như sau: "WHERE DSNCC.msNCC = CTnx.NhaCC AND ((DSNCC.msNCC=' " & MS & " '))" Chú ý dấu nháy đơn màu đỏ.
  8. Bạn sẽ có được 1 Macro hoạt động ngon l ành: Chỉ cần chọn tên NCC trong combobox:
  9. Tương tự bạn làm combobox cho tài khoản KT, DS khách hàng, DS mặt hàng.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2