Dùng code gì để đóng (Close) một file ở một cửa sổ khác? (1 người xem)

Liên hệ QC

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

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Chào các Anh Chị,

Nếu như mở một file đã lưu sẳn, rồi lại mở tiếp một file đã lưu sẳn lên thì nó có chung một cửa sổ, sau đó dùng code để đóng một file thì rất dễ (Workbooks(FileName).Close True/False).

Nhưng khi mở sẳn một file rồi ta lại mở một file trắng, sau đó trong file này ta mở một file có sẳn thì lúc này ta có 2 file nhưng mỗi file lại có 2 cửa sổ (xem hình), thì tôi không thể đóng file kia được bằng code.

Vậy các Anh Chị cho tôi hỏi là dùng code gì trong file này để đóng file kia được?

Cám ơn rất nhiều!
 

File đính kèm

  • TwoWindows.jpg
    TwoWindows.jpg
    73.7 KB · Đọc: 35
Lần chỉnh sửa cuối:
Cám ơn huuthang_bd, đã giải quyết được vân đề, nhưng mình có thay đổi một chút vì mình muốn đóng luôn cửa sổ đó, mình thay dòng màu đỏ bằng dòng màu xanh:

Mã:
Sub CloseWBInOtherApp()
    On Error Resume Next
    Dim xlApp As Application
    Const sFullName = "C:\Users\HOANG TRONG NGHIA\Desktop\VoYeu\NAM_2015\OCT_2015.xlsx"
    Set xlApp = GetObject(sFullName).Application
    
[COLOR=#ff0000]    ''xlApp.Workbooks(Mid(sFullName, InStrRev(sFullName, "\") + 1)).Close False[/COLOR]
    
[COLOR=#0000ff]    xlApp.Workbooks(Mid(sFullName, InStrRev(sFullName, "\") + 1)).Saved = True[/COLOR]
[COLOR=#0000ff]    xlApp.Quit[/COLOR]


End Sub
Nếu vậy sao không làm vầy luôn, đề phòng trường hợp có nhiều Workbook đang mở trong cửa sổ đó, khỏi phải hỏi có save không.
PHP:
Sub CloseWBInOtherApp()
    Dim xlApp As Application
    Const sFullName = "D:\ABC.xls"
    Set xlApp = GetObject(sFullName).Application
    xlApp.DisplayAlerts = False
    xlApp.Quit
End Sub
 
Upvote 0
Hiểu rồi, nhưng thật là bất tiện, mỗi cái Application.Caption nó khác nhau, có thằng thì Micro... trước, thằng thì sau, thằng thì có cái đuôi .xlsx thằng thì không!

Cũng khó xác định sao cho chính xác bằng API thật!

Tìm caption (chính xác) để đóng là chuyện khó. Lúc trước tôi có viết 1 code theo cách khác: Tìm gần gần giống là mần:
Mã:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Const GW_HWNDNEXT = 2 
'---------------------------------------
Function CloseWindow(ByVal WinCap As String)
  Dim hWnd As Long, n As Long
  Dim sTitle As String
  hWnd = FindWindow(vbNullString, vbNullString)
  Do While hWnd <> 0
    sTitle = Space$(255)
    sTitle = Left$(sTitle, GetWindowText(hWnd, sTitle, Len(sTitle)))
    n = n + 1
    If UCase(sTitle) Like UCase(WinCap) Then
      SendMessage hWnd, &H10, 0&, 0&
      Exit Function
    End If
    Debug.Print sTitle
    If n = [COLOR=#ff0000]100[/COLOR] Then Exit Function
    hWnd = GetWindow(hWnd, GW_HWNDNEXT)
  Loop
End Function
'---------------------------------
Sub Main()
  Const WinCap = "*OCT_2015.xlsx*"
  CloseWindow WinCap
End Sub
Không chắc là được nhưng cứ thử
(Vì sợ "Treo" nên cho cái đỏ đỏ vào)
 
Upvote 0
Web KT

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

Back
Top Bottom