-
VBA Access: điều khiển lệnh Excel, Access khác
vodainhan > 12-07-17, 09:33 AM
Mọi người cho tôi hỏi một tí: (Đang sử dụng office 2010)
1. Từ Access, làm sao chỉnh thiết lập trang giấy ngang cho 1 file Excel khác:
...
appExcel.Application.PrintCommunication = False
With appExcel.ActiveSheet.PageSetup
.Orientation = xlLandscape
.Zoom = 90
End With
Tại sao đoạn code này không có tác dụng và làm sao để nó thực hiện?
2. Từ Access: Tại sao không chạy được Code của Database khác
...
appAccess.Run "ThoiGian"
(ThoiGian là 1 code trong 1 form của Database khác. Vậy sửa lại thế nào?)
3. Từ Access: Làm sao để nhấn 1 option button của 1 option group (trên DB khác) và chạy các lệnh của option button này?
4. Nếu trong DB1 có sử dụng hàm (ví dụ Dlookup)
TU = DLookup("[T00 DM TUAN]![TUNGAY]", "T00 DM TUAN", "[T00 DM TUAN]![TUAN] =[Forms]![F_DSBN]![TB1] ")
thì ở 1 DB2 phải điều chỉnh cú pháp thế nào để hàm trên có thể hoạt động trên DB1?
Ví dụ:
appAccess.Forms!TenForm!TU = DLookup("[T00 DM TUAN]![TUNGAY]", "T00 DM TUAN", "[T00 DM TUAN]![TUAN] =[Forms]![F_DSBN]![TB1] ")
(sửa lại cú pháp hoặc có giải pháp hay hơn)
5. Từ số tuần cho trước, làm sao tính ra ngày đầu tiên của tuần?. Ví dụ: Tuần 27 --> ngày đầu tiên là 3/7/2017?
Nhờ cao thủ giúp dùm. Cám ơn nhiều! -
RE: VBA Access: điều khiển lệnh Excel, Access khác
maidinhdan > 12-07-17, 10:21 PM
(12-07-17, 09:33 AM)vodainhan Đã viết: Mọi người cho tôi hỏi một tí: (Đang sử dụng office 2010)
1. Từ Access, làm sao chỉnh thiết lập trang giấy ngang cho 1 file Excel khác:
Tại sao đoạn code này không có tác dụng và làm sao để nó thực hiện?
2. Từ Access: Tại sao không chạy được Code của Database khác
...
appAccess.Run "ThoiGian"
(ThoiGian là 1 code trong 1 form của Database khác. Vậy sửa lại thế nào?)
3. Từ Access: Làm sao để nhấn 1 option button của 1 option group (trên DB khác) và chạy các lệnh của option button này?
4. Nếu trong DB1 có sử dụng hàm (ví dụ Dlookup)
TU = DLookup("[T00 DM TUAN]![TUNGAY]", "T00 DM TUAN", "[T00 DM TUAN]![TUAN] =[Forms]![F_DSBN]![TB1] ")
thì ở 1 DB2 phải điều chỉnh cú pháp thế nào để hàm trên có thể hoạt động trên DB1?
Ví dụ:appAccess.Forms!TenForm!TU = DLookup("[T00 DM TUAN]![TUNGAY]", "T00 DM TUAN", "[T00 DM TUAN]![TUAN] =[Forms]![F_DSBN]![TB1] ")
(sửa lại cú pháp hoặc có giải pháp hay hơn)
5. Từ số tuần cho trước, làm sao tính ra ngày đầu tiên của tuần?. Ví dụ: Tuần 27 --> ngày đầu tiên là 3/7/2017?
Nhờ cao thủ giúp dùm. Cám ơn nhiều!
Trả lời:
Câu 1: Dùng code như sau:
Mã PHP:Function PageSetupExcel()
Dim appExcel As Object 'Excel Object
Dim wbkNew As Object 'Workbook Object
Dim wksNew As Object 'Sheet Object
Set appExcel = CreateObject("Excel.Application")
Set wbkNew = appExcel.Workbooks.Open("D:\Ex.xlsx") ' Duong dan file Excel 2010 cua ban
Set wksNew = appExcel.Worksheets("Sheet1") 'Ten Sheet can dinh dang
appExcel.Visible = False 'Khong mo file Excel khi thi hanh lenh, muon mo xem thi cho bang True
With wksNew.PageSetup
.Orientation = xlLandscape
.Zoom = 90
End With
appExcel.ActiveWorkbook.Save ' Luu len file Goc
'appExcel.ActiveWorkbook.SaveAs "D:\Ex2.xlsx" ' Luu thanh file Ex2 va giu nguyen file Goc
' Dong Excel va giai phong bo nho
wbkNew.Close
Set wbkExcel = Nothing
Set appExcel = Nothing
End Function
Câu 2, Câu 3, Câu 4:Không thể gọi hàm từ 1 form khác, muốn gọi hàm để dùng thì khai báo trong Modules
Câu 5. Dùng hàm DatePart
Mã PHP:DatePart("ww", #7/3/2017#)
Lưu ý; chổ ngày tháng điền vào theo kiểu định dạng: mm/dd/yyyy
Thân mến! -
RE: VBA Access: điều khiển lệnh Excel, Access khác
vodainhan > 14-07-17, 11:01 PM
Cám ơn bạn maidinhdan đã giúp. Câu 1,2,3 mình tham khảo từ rất nhiều nguồn mà vẫn chưa thông. Đan nghiên cứu hướng dẫn của bạn.
Câu 2,3 không có cách à bạn?
Còn câu 5 hàm DatePart("ww", #7/3/2017#) cho ra số tuần thì tôi biết (từ NGÀY --> ra SỐ TUẦN), nhưng đây là ngược lại (từ SỐ TUẦN --> ra NGÀY ĐẦU TIÊN của tuần). -
RE: VBA Access: điều khiển lệnh Excel, Access khác
maidinhdan > 14-07-17, 11:27 PM
(14-07-17, 11:01 PM)vodainhan Đã viết: Cám ơn bạn maidinhdan đã giúp. Câu 1,2,3 mình tham khảo từ rất nhiều nguồn mà vẫn chưa thông. Đan nghiên cứu hướng dẫn của bạn.
Câu 2,3 không có cách à bạn?
Còn câu 5 hàm DatePart("ww", #7/3/2017#) cho ra số tuần thì tôi biết (từ NGÀY --> ra SỐ TUẦN), nhưng đây là ngược lại (từ SỐ TUẦN --> ra NGÀY ĐẦU TIÊN của tuần).
Câu 2,3: Dứt khoát là không có cách nhé.
Câu 5: Cũng không thể làm được. từ SỐ TUẦN --> ra NGÀY ĐẦU TIÊN của tuần:
Lý do
1. rất đơn giản là phải cần thêm tham số năm nào nửa.
2. Ngày đầu tiền của tuần của bạn là Chủ nhật hay thứ 2.
Suy nghĩ thật chu đáo 2 ý này rồi hãy hỏi tiếp. Gợi ý với bạn là dùng hàm DateAdd, và xemthêm thamsố hàm DatePart(.....vbMonday, vbFirstFullWeek)
Sau 3 ngày không làm được thì hỏi lại nhé, chứ giờ chưa muốn gửi code. -
RE: VBA Access: điều khiển lệnh Excel, Access khác
ongke0711 > 15-07-17, 12:26 AM
(12-07-17, 09:33 AM)vodainhan Đã viết: 2. Từ Access: Tại sao không chạy được Code của Database khác
appAccess.Run "ThoiGian"
(ThoiGian là 1 code trong 1 form của Database khác. Vậy sửa lại thế nào?)
3. Từ Access: Làm sao để nhấn 1 option button của 1 option group (trên DB khác) và chạy các lệnh của option button này?
Thực sự ra ý đồ cuối cùng bạn muốn chạy trên máy khác để làm gì? Có thể sẽ giải pháp khác cho mục đích của bạn chứ không phải ngồi điều khiển máy khác như vậy.
Hiện tại chỉ có các chương trình tương tự như Remote Desktop, Teamview với việc cung cấp quyền Administrator đầy đủ mới có thể xâm nhập và xử lý trên máy khác được.
Việc muốn máy khác làm một việc gì đó thì cũng giống như việc tự động đóng ứng dụng Access trên các máy con khi bạn bảo trì file Back-End. Các máy con linked table với file BE. Bạn chỉ cần ra thông số trên file BE,các máy con kiểm tra, thấy thông số này thì sẽ chạy một đoạn code nào đó mà bạn đã lập trình sẳn.
Bạn tham khảo bài này: http://thuthuataccess.com/forum/thread-9483.html -
RE: VBA Access: điều khiển lệnh Excel, Access khác
MTNQ > 15-07-17, 02:23 PM
Xin lỗi! mình ít khi vào mail, nay vào thấy câu hỏi của bạn mình xin phép đưa lên đây luôn nhé:
Trích dẫn:1. VBA Access: code lệnh mở trang web bằng trình duyệt CocCoc. ví dụ
Call Shell("C:\Users\Administrator\AppData\Local\CocCoc\Browser\Application\browser.exe ""http://xxxxxxx", 1)
nhưng ở các máy khác khác nhau thì tên C:\Users\.... khác nhau. Làm sao để có thể mở trên tất cả các máy tính có cài CocCoc mà không cần sửa thủ công dòng lệnh trên ở từng máy?
Có nhiều cách, đơn giản thì như sau:
Mã:Dim strPath As String
strPath = Environ("APPDATA")
strPath = Left(strPath, InStr(strPath, "APPDATA") + 6)
strPath = strPath & "\Local\CocCoc\Browser\Application\browser.exe"
Call Shell(strPath & " ""http://xxxxxxx""", 1) -
RE: VBA Access: điều khiển lệnh Excel, Access khác
vodainhan > 16-07-17, 02:15 PM
Trước hết rất cảm ơn các bạn, đàn anh trong lĩnh vực này đã nhiệt tình đóng góp ý kiến.
Tôi đang tự học và xây dựng các chương trình quản lý nhỏ phục vụ công việc hàng ngày tại cơ quan. Tuy nhiên do phải mò mẫm tự học VBA Access nên có nhiều chỗ chưa rõ. Mục đích xây dựng các chương trình là để phục vụ quản lý rất nhiều loại báo cáo hàng tuần và hàng tháng từ rất nhiều file access và excel, word (đang nâng cấp để tự động hóa tối đa). chỉ sử dụng trên 1 máy nhưng xài nhiều file Access khác nhau, từ file Access này mở và điều khiển file Access (in, xuất file, gửi email...) khác hoặc sửa file excel khác (in, gửi email...) nên có chỗ bị bí chỗ này chỗ nọ. Một mặt tôi tìm các hướng dẫn của Microsoft, trong phần Help của Access và bí lắm mới vào diễn đàn Access nhờ các bạn giúp phương án.
* Sau khi gửi câu hỏi, tôi cũng không ngừng tìm hiểu và phát hiện ở câu 3, tôi tìm hiểu được đoạn code sau đây có thể nhấn 1 nút option group của 1 file access khác, đã hoạt động được
...
'SetFocus OptionGroup
With appAccess.Forms!F_DSBN!BC 'BC là tên của Option Group
.Value = appAccess.Forms!F_DSBN!OptionTuan.OptionValue 'OptionTuan là tên của Option 1 trong BC
.SetFocus
End With
...
* Ở câu 5 tôi phát hiện cách tính ngày đầu tiên của tuần mà không dùng hàm, chỉ 1 phép tính rất đơn giản (Do DB của tôi chỉ sử dụng trong 1 năm nên chấp nhận được. Thứ 2 là ngày đầu tiên của tuần, tuần 1 bắt đầu từ 02/01/2017)
'THIET LAP THOI GIAN TU NGAY VA DEN NGAY
TU = 42730 + SoTuan * 7 'Ngày bắt đầu tuần
DEN = 42730 + SoTuan * 7 + 6 (hoặc =TU+6) 'Ngày két thúc tuần
Textbox SoTuan là 1 số nguyên từ 1 - 53
Tôi đặt mặc định bằng công thức này
=Val(Round((Date()-#02/01/2017#)/7,0)) 'để tự hiện ra tuần hiện tại khi mở Form.
Giải quyết được vấn đề này (câu 3,5) thì coi như không cần câu 2,4 nữa.
* Còn vần đề file Access mở trình duyệt CocCoc trên các máy khác nhau, tôi đã sử dụng đoạn code này và thấy cũng ổn:
Function OpenDocument(ByVal strURLLink As String) As Boolean
On Error GoTo Catch
' This opens the link in the default program or web browser of your computer.
Application.FollowHyperlink (strURLLink)
OpenDocument = True
Exit Function
Catch:
OpenDocument = False
MsgBox "Error#: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
Private Sub Cm01_Click()
Call OpenDocument("http://xxxxxxxxxx") 'mở địa chỉ web
End Sub
Mong các bạn có gì hay cứ chia sẽ thêm!
À, thêm 1 bài toán nữa: Code VBA Access nào để kiểm tra 1 file (vd: D:\abc.xlsx) có tồn tại không, nếu không có thì tạo tên file đó, còn có thì thôi? -
RE: VBA Access: điều khiển lệnh Excel, Access khác
maidinhdan > 16-07-17, 03:30 PM
Bạn có hỏi : Từ Access: Làm sao để nhấn 1 option button của 1 option group (trên DB khác) và chạy các lệnh của option button này
Và bạn tìm được câu đáp án.
(16-07-17, 02:15 PM)vodainhan Đã viết: * Sau khi gửi câu hỏi, tôi cũng không ngừng tìm hiểu và phát hiện ở câu 3, tôi tìm hiểu được đoạn code sau đây có thể nhấn 1 nút option group của 1 file access khác, đã hoạt động được
...
'SetFocus OptionGroup
With appAccess.Forms!F_DSBN!BC 'BC là tên của Option Group
.Value = appAccess.Forms!F_DSBN!OptionTuan.OptionValue 'OptionTuan là tên của Option 1 trong BC
.SetFocus
End With
...
Rất muốn học hỏi về demo này, rất mong bạn chia sẽ.
*Về Code VBA Access nào để kiểm tra 1 file (vd: D:\abc.xlsx) có tồn tại không, nếu không có thì tạo tên file đó, còn có thì thôi?
Xem link này: Tự động tạo CSDL Access bằng VBA -
RE: VBA Access: điều khiển lệnh Excel, Access khác
vodainhan > 16-07-17, 08:35 PM
Đoạn code đầy đủ nè bạn.
‘Từ file Access 1
Private Sub CmChonOption_Click()
Dim strDB As String
Dim appAccess As Access.Application
'Initialize string to database path.
Const strConPathToSamples = ("D:\Bao cao\")
strDB = strConPathToSamples & ("Access 2.accdb")
'Create new instance of Microsoft Access Application.
Set appAccess = CreateObject("Access.Application")
'Make Application Window Visible
appAccess.Visible = True 'An/hien cua so. True: hien cua so
'Open database in Microsoft Access window.
appAccess.OpenCurrentDatabase strDB
'Open form
appAccess.DoCmd.OpenForm "Form1", acNormal
'SetFocus OptionGroup
With appAccess.Forms!Form1
.Value = appAccess.Forms!Form1!OptionTuan.OptionValue
.SetFocus
End With
'thiet lap thoi gian
appAccess.[Forms]![Form1]![TU] = 42730 + Tuan * 7
appAccess.[Forms]![Form1]![DEN] = 42730 + Tuan * 7 + 6
appAccess.DoCmd.Requery
appAccess.DoCmd.OutputTo acOutputReport, "R01 DS", acFormatPDF, "D:\Bao cao\BC_Tuan.pdf"
appAccess.Quit
End Sub