• VBA Access: điều khiển lệnh Excel, Access khác
  • 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 lenhmuon 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:08 PM

    (14-07-17, 11:01 PM)vodainhan Đã viết: ...
    Câu 2,3 không có cách à bạn?
    ...

    Bạn đưa file lên đi, làm không được chỗ nào thì mọi người góp ý chỗ đó cho nhanh  027
  • 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