huyhoang_mmyeht
Thành viên hoạt động
- Tham gia
- 5/5/09
- Bài viết
- 142
- Được thích
- 12
Tình hình là file mình làm như thế này vì chưa hiểu rõ nên làm hơi dài dòng bạn xem hộ mình nhé!
Mình muốn lấy ra excel cũng như báo cáo trong access đó như file đầu mình có minh họa đó!
DoCmd.OutputTo acOutputReport, "R02-Currentstock", acFormatXLS, "C:\1.xls", -1
Thì bạn cứ thay đổi đường dẫn đến file đó là được.bạn hai lúa miền tây ơi cho hỏi cái!
nếu mình muốn lấy dữ liệu từ thư mục khác thì mình viết như thế nào?
Mình làm thử rồi nhưng không đc nên mới lên đây hỏi lại bạn mong bạn chỉ giúp hộ mình!
Làm cho bạn cái dialog mở theo ý muốn.ví dụ file này ở 2 thư mục khác nhau mình muốn lấy dữ liệu qua lại thì mình cần làm như thế nào?
file đính kèm bạn xem nhé!
Option Compare Database
Private Sub cmdCapNhat_Click()
Dim fd As Object, strFileName As String
Set fd = CreateObject("MSComDlg.CommonDialog")
With fd
.ShowOpen
If Len(.FileName) > 0 Then
strFileName = .FileName
Else
Exit Sub
End If
End With
With DoCmd
.SetWarnings (False)
sSQL = "UPDATE [TB hang hoa] b " _
& "RIGHT JOIN " _
& "[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & strFileName & "].[Sheet1$B4:G18] a " _
& "ON a.Mahang=b.Mahang " _
& "SET b.ngay=a.ngay,b.Mahang=a.Mahang,b.tenhang=a.tenhang," _
& "b.makholuutru=a.makholuutru,b.tenkholuutru=a.tenkholuutru," _
& "b.Soluongban=a.Soluongban " _
& "where a.mahang is not null"
DoCmd.RunSQL sSQL
Me.RecordSource = "TB hang hoa"
.SetWarnings (True)
End With
Set fd = Nothing
End Sub
Private Sub cmdLayDuLieu_Click()
Dim fd As Object, strFileName As String
Set fd = CreateObject("MSComDlg.CommonDialog")
With fd
.ShowOpen
If Len(.FileName) > 0 Then
strFileName = .FileName
Else
Exit Sub
End If
End With
With DoCmd
.SetWarnings (False)
.RunSQL "Delete * from [TB hang hoa]"
.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
"TB hang hoa", strFileName, True, "B4:G18"
Me.RecordSource = "TB hang hoa"
.SetWarnings (True)
End With
Set fd = Nothing
End Sub
Sub HLMT_Update()
On Error GoTo loi
Set Cn = CreateObject("ADODB.Connection")
Dim mySQL As String
Dim fd As Object, strFileName As String
Set fd = CreateObject("MSComDlg.CommonDialog")
With fd
.ShowOpen
If Len(.Filename) > 0 Then
strFileName = .Filename
Else
Exit Sub
End If
End With
With Cn
mySQL = "UPDATE [TB hang hoa] b " _
& "right JOIN " _
& "[Excel 8.0;HDR=Yes;IMEX=2;DATABASE=" _
& ThisWorkbook.FullName & "].[Sheet1$B4:G600] a " _
& "ON b.Mahang=a.Mahang " _
& "SET b.ngay=a.ngay,b.Mahang=a.Mahang,b.tenhang=a.tenhang," _
& "b.makholuutru=a.makholuutru,b.tenkholuutru=a.tenkholuutru," _
& "b.Soluongban=a.Soluongban " _
& "where a.mahang is not null"
.Provider = "Microsoft Jet 4.0 OLE DB Provider"
.ConnectionString = "Data Source=" & strFileName
.CursorLocation = adUseClient
.Open
.Execute mySQL
.Close
End With
Set Cn = Nothing
Set fd = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub
Sub HLMT_LayDuLieu()
Dim cnn As Object, rst As Object, strCNString As String, lsSQL As String
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Dim fd As Object, strFileName As String
Set fd = CreateObject("MSComDlg.CommonDialog")
With fd
.ShowOpen
If Len(.Filename) > 0 Then
strFileName = .Filename
Else
Exit Sub
End If
End With
strCNString = "Data Source=" & strFileName
On Error GoTo loi
With cnn
.Provider = "Microsoft Jet 4.0 OLE DB Provider"
.ConnectionString = strCNString
.CursorLocation = adUseClient
.Open
End With
lsSQL = "SELECT * " & _
"FROM [TB hang hoa]"
rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
Range("B5:G6000").ClearContents
Range("B5").CopyFromRecordset rst
rst.Close: cnn.Close
Set rst = Nothing: Set cnn = Nothing
Set fd = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub
Sub HLMT_Update()
On Error GoTo loi
Set Cn = CreateObject("ADODB.Connection")
Dim mySQL As String
Dim strFileName
strFileName = Application.GetOpenFilename()
With Cn
mySQL = "UPDATE [TB hang hoa] b " _
& "right JOIN " _
& "[Excel 8.0;HDR=Yes;IMEX=2;DATABASE=" _
& ThisWorkbook.FullName & "].[Sheet1$B4:G600] a " _
& "ON b.Mahang=a.Mahang " _
& "SET b.ngay=a.ngay,b.Mahang=a.Mahang,b.tenhang=a.tenhang," _
& "b.makholuutru=a.makholuutru,b.tenkholuutru=a.tenkholuutru," _
& "b.Soluongban=a.Soluongban " _
& "where a.mahang is not null"
.Provider = "Microsoft Jet 4.0 OLE DB Provider"
.ConnectionString = "Data Source=" & strFileName
.CursorLocation = adUseClient
.Open
.Execute mySQL
.Close
End With
Set Cn = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub
Sub HLMT_LayDuLieu()
Dim cnn As Object, rst As Object, strCNString As String, lsSQL As String
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Dim strFileName
strFileName = Application.GetOpenFilename()
strCNString = "Data Source=" & strFileName
On Error GoTo loi
With cnn
.Provider = "Microsoft Jet 4.0 OLE DB Provider"
.ConnectionString = strCNString
.CursorLocation = adUseClient
.Open
End With
lsSQL = "SELECT * " & _
"FROM [TB hang hoa]"
rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
Range("B5:G6000").ClearContents
Range("B5").CopyFromRecordset rst
rst.Close: cnn.Close
Set rst = Nothing: Set cnn = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub
trong access cũng bị lổi thì sao bạn
mình test ok rồi bạn à!
tiện thể cho mình hỏi luôn, nếu mình muốn chỉ định thư mục mặc định ở một ổ đỉa bất kỳ thì mình làm như thế nào?
vì công việc của mình là lấy dữ liệu ở rất nhiều mấy khác nhau nên mình muốn làm mặc định cho tiện!
còn phần access thì bạn giúp mình luôn, nếu thư mục có khoảng cách thì nó có hiểu không bạn?
Bạn xem file đính kèm nhé, về code ngắn hơn thì mình chưa nghĩ ra, bạn tạm dùng thế nhé.thì file lúc nảy mình có ví ** đó bạn bạn làm hộ mình để mình học hỏi!
thông cảm mình hơi gà! trong sub HLMT_Update nếu dữ liệu có rất nhiều cột thì làm theo bạn thì hơi dài dòng bạn có cách nào ngắn gọn hơn không?