Chụp ảnh màn hình (1 người xem)

  • Thread starter Thread starter ilvba
  • Ngày gửi Ngày gửi
Liên hệ QC

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

ilvba

Thành viên mới
Tham gia
24/6/19
Bài viết
32
Được thích
7
các anh chị cho em hỏi, có cách nào để macro chụp ảnh một vùng cố định trên màn hình không ạ.
và làm thế nào để xác định tọa độ 4 điểm trên màn hình ạ.
Em cảm ơn ạ.
 
Chỉ dùng API thôi bạn. Gú gồ VBA screen capture
 
Upvote 0
Chỉ dùng API thôi bạn. Gú gồ VBA screen capture
Vâng, mình cũng google cả tối, được mẩu code này nhưng không hài lòng lắm ạ.
Mã:
Option Explicit

Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const VK_SNAPSHOT = &H2C

Sub PrintScreen()
    keybd_event VK_SNAPSHOT, 1, 0, 0
    ActiveSheet.Paste
End Sub
 
Upvote 0
Hì hì, cách hay, nhưng copy nguyên màn hình rồi.
Google tiếp đi bạn
 
Upvote 0
Hì hì, cách hay, nhưng copy nguyên màn hình rồi.
Google tiếp đi bạn
Cái tệ nhất là nó chỉ copy cái gì liên quan tới excel ấy.
Nếu copy được nguyên màn hình mà không dính gì tới excel thì tốt ạ.
Em nghĩ khi ấy có thể dán vào excel rồi xử lý tiếp thì tốt quá.
 
Upvote 0
Vậy cho Excel hide hay minimize đi rồi captue, copy
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu copy được nguyên màn hình mà không dính gì tới excel thì tốt ạ.
Nhưng bài 1 viết
có cách nào để macro chụp ảnh một vùng cố định trên màn hình không ạ

Vậy cuối cùng là copy cả màn hình hay chỉ 1 vùng trên màn hình?

Nếu là copy cả màn hình giống như khi không có Excel thì ẩn Excel đi. Đề phòng bạn không nói rõ tôi lưu ý. Nếu là copy Desktop không có Excel, không có cả mọi cửa sổ khác thì không ai lại ẩn (kéo xuống Taskbar) lần lượt mọi cửa sổ có thể có. Lúc này giả nhấn [Win]+[D] thôi. Bạn tự nhấn tổ hợp [Win]+[D] thì sẽ thấy Desktop "trần như nhộng".
 
Upvote 0
Nhưng bài 1 viết


Vậy cuối cùng là copy cả màn hình hay chỉ 1 vùng trên màn hình?

Nếu là copy cả màn hình giống như khi không có Excel thì ẩn Excel đi. Đề phòng bạn không nói rõ tôi lưu ý. Nếu là copy Desktop không có Excel, không có cả mọi cửa sổ khác thì không ai lại ẩn (kéo xuống Taskbar) lần lượt mọi cửa sổ có thể có. Lúc này giả nhấn [Win]+[D] thôi. Bạn tự nhấn tổ hợp [Win]+[D] thì sẽ thấy Desktop "trần như nhộng".
Dạ, mục đích cuối cùng vẫn là chụp một vùng màn hình. Nhưng khả năng là khó, nên em tính chụp cả màn hình paste vô sheet. Rồi em tính toán cái vùng đó tương đương với range nào trên excel. Em chụp ảnh vùng range đó là ok. hơi cách rách nhưng có lẽ phải đi đường vòng ạ.
Về vấn đề chụp cả màn hình dán vào excel thì em vẫn chưa làm dc ạ.
 
Upvote 0
Dạ, mục đích cuối cùng vẫn là chụp một vùng màn hình. Nhưng khả năng là khó, nên em tính chụp cả màn hình paste vô sheet. Rồi em tính toán cái vùng đó tương đương với range nào trên excel. Em chụp ảnh vùng range đó là ok. hơi cách rách nhưng có lẽ phải đi đường vòng ạ.
Về vấn đề chụp cả màn hình dán vào excel thì em vẫn chưa làm dc ạ.
Nhưng bạn vẫn chưa nói rõ. Bạn hiện thời có Excel chiếm toàn bộ màn hình. Nếu đồng nghiệp của bạn có Normal và Excel chiếm một tí, Notepad chiểm 1 tí, Paint chiếm một tí v...v Lúc này bạn cần chụp toàn bộ màn hình với các icons trên nó + Paint + Notepad, tức chỉ không có Excel hay màn hình nhưng không có Excel, Notepad, Paint?

Thường người ta viết code cho trường hợp tổng quát chứ không ai lại giả sử là Excel chiếm toàn bộ màn hình.
 
Upvote 0
Nhưng bạn vẫn chưa nói rõ. Bạn hiện thời có Excel chiếm toàn bộ màn hình. Nếu đồng nghiệp của bạn có Normal và Excel chiếm một tí, Notepad chiểm 1 tí, Paint chiếm một tí v...v Lúc này bạn cần chụp toàn bộ màn hình với các icons trên nó + Paint + Notepad, tức chỉ không có Excel hay màn hình nhưng không có Excel, Notepad, Paint?

Thường người ta viết code cho trường hợp tổng quát chứ không ai lại giả sử là Excel chiếm toàn bộ màn hình.
Đoạn code này nó chụp được đây anh.
Mã:
'Declare Windows API Functions
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 
'Declare Virtual Key Codes
Private Const VK_SNAPSHOT = &H2C
Private Const VK_KEYUP = &H2
Private Const VK_MENU = &H12
Public Const VK_TAB = &H9
Public Const VK_ENTER = &HD
 
Sub ScreenPrint() ' <- chay chuong trinh nay
    'Press Alt + TAB Keys -- Step1
    Alt_Tab
 
    'Press Print Screen key using Windows API -- Step2.
    keybd_event VK_SNAPSHOT, 1, 0, 0 'Print Screen key down
    keybd_event VK_SNAPSHOT, 1, VK_KEYUP, 0 'Print key Up - Screenshot to Clipboard
 

    
End Sub
 
Sub Alt_Tab()
    DoEvents
    keybd_event VK_MENU, 1, 0, 0 'Alt key down
    DoEvents
    keybd_event VK_TAB, 0, 0, 0 'Tab key down
    DoEvents
    keybd_event VK_TAB, 1, VK_KEYUP, 0 'Tab key up
    DoEvents
    keybd_event VK_ENTER, 1, 0, 0 'Tab key down
    DoEvents
    keybd_event VK_ENTER, 1, VK_KEYUP, 0 'Tab key up
    DoEvents
    keybd_event VK_MENU, 1, VK_KEYUP, 0 'Alt key up
    DoEvents
End Sub
 
'https://officetricks.com/print-screen-save-as-image-file-attach-to-sheet-automate-in-vba/
Sau khi chạy code xong, anh vào paint và ấn ctr+V.
Em ko lý giải nổi là tại sao khi chạy code xong thì ko thao tác được với sheet excel nữa.
 
Upvote 0
Đoạn code này nó chụp được đây anh.
Mã:
'Declare Windows API Functions
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

'Declare Virtual Key Codes
Private Const VK_SNAPSHOT = &H2C
Private Const VK_KEYUP = &H2
Private Const VK_MENU = &H12
Public Const VK_TAB = &H9
Public Const VK_ENTER = &HD

Sub ScreenPrint() ' <- chay chuong trinh nay
    'Press Alt + TAB Keys -- Step1
    Alt_Tab

    'Press Print Screen key using Windows API -- Step2.
    keybd_event VK_SNAPSHOT, 1, 0, 0 'Print Screen key down
    keybd_event VK_SNAPSHOT, 1, VK_KEYUP, 0 'Print key Up - Screenshot to Clipboard


  
End Sub

Sub Alt_Tab()
    DoEvents
    keybd_event VK_MENU, 1, 0, 0 'Alt key down
    DoEvents
    keybd_event VK_TAB, 0, 0, 0 'Tab key down
    DoEvents
    keybd_event VK_TAB, 1, VK_KEYUP, 0 'Tab key up
    DoEvents
    keybd_event VK_ENTER, 1, 0, 0 'Tab key down
    DoEvents
    keybd_event VK_ENTER, 1, VK_KEYUP, 0 'Tab key up
    DoEvents
    keybd_event VK_MENU, 1, VK_KEYUP, 0 'Alt key up
    DoEvents
End Sub

'https://officetricks.com/print-screen-save-as-image-file-attach-to-sheet-automate-in-vba/
Sau khi chạy code xong, anh vào paint và ấn ctr+V.
Em ko lý giải nổi là tại sao khi chạy code xong thì ko thao tác được với sheet excel nữa.
không thao tác được với sheet là sao bạn mình thấy bình thường mà
 
Upvote 0
Đoạn code này nó chụp được đây anh.
Tôi có nói là việc của bạn không làm được đâu?

Hãy đọc kỹ bài của tôi.

Tôi chỉ muốn biết thật kỹ là bạn muốn làm gì. Lúc thì lấy 1 vùng của màn hình, lúc thì cả màn hình cũng chơi, lúc thì bỏ cửa sổ Excel. Tôi muốn hỏi kỹ là ngoài bỏ Excel có bỏ cả các cửa sổ khác hay không. Nhưng bạn không nói ra. Bạn chỉ khoe là làm được. Mà tôi có nói là không làm được đâu?

Thôi tôi làm chơi với yêu cầu tôi tự đặt do bạn không muốn nói ra.

Yêu cầu: cho dù ở thời điểm chạy code có nhiều cửa sổ đang mở thì chỉ lấy desktop, tức trạng thái như sau khi nhấn tổ hợp [Win] (trái) + [D], chỉ 1 vùng có chiều dài width, cao height, bắt đầu từ tọa độ (left, top) - tất cả tính bằng pixel - vào sheet hiện hành, vào cell hiện hành.

Code chỉ viết cho 32 bit.

Tôi không chơi trò "thông tin nhỏ giọt", "van xin thông tin" nên tôi kết thúc ở đây.

Mã:
Option Explicit

Private Const VK_LWIN = 91
Private Const VK_D = 68
Private Const KEYEVENTF_KEYUP = 2
Private Const SRCCOPY As Long = &HCC0020
Private Const CF_BITMAP = 2

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  
Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long

Sub PrintScreen()
Const left = 200
Const top = 200
Const width = 500
Const height = 200
Dim DC As Long, destDC As Long, hbmp As Long, oldbmp As Long
    keybd_event VK_LWIN, 0, 0, 0
    keybd_event VK_D, 0, 0, 0
    keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0
    
    Application.Wait Now + TimeValue("0:00:05")
    
    DC = GetDC(0)
    destDC = CreateCompatibleDC(DC)
    hbmp = CreateCompatibleBitmap(DC, width, height)
    oldbmp = SelectObject(destDC, hbmp)
    BitBlt destDC, 0, 0, width, height, DC, left, top, SRCCOPY
    SelectObject destDC, oldbmp
    
    DeleteDC destDC
    ReleaseDC 0, DC
    
    OpenClipboard 0
    EmptyClipboard
    SetClipboardData CF_BITMAP, hbmp
    CloseClipboard
    
    DeleteObject hbmp
    
    ActiveSheet.Paste
End Sub
 
Upvote 0
Dạ, mục đích cuối cùng vẫn là chụp một vùng màn hình. Nhưng khả năng là khó, nên em tính chụp cả màn hình paste vô sheet. Rồi em tính toán cái vùng đó tương đương với range nào trên excel. Em chụp ảnh vùng range đó là ok. hơi cách rách nhưng có lẽ phải đi đường vòng ạ.
Về vấn đề chụp cả màn hình dán vào excel thì em vẫn chưa làm dc ạ.

Thắc mắc chút nên nhảy vô hỏi :)
"Chụp màn hình xong rồi tính thuộc range nào" --> vậy tại sao không dùng tính năng dùng chuột quét các ô trong Excel rồi lấy ra địa chỉ vùng vừa quét nhỉ?
 
Upvote 0
Nhưng bài 1 viết


Vậy cuối cùng là copy cả màn hình hay chỉ 1 vùng trên màn hình?

Nếu là copy cả màn hình giống như khi không có Excel thì ẩn Excel đi. Đề phòng bạn không nói rõ tôi lưu ý. Nếu là copy Desktop không có Excel, không có cả mọi cửa sổ khác thì không ai lại ẩn (kéo xuống Taskbar) lần lượt mọi cửa sổ có thể có. Lúc này giả nhấn [Win]+[D] thôi. Bạn tự nhấn tổ hợp [Win]+[D] thì sẽ thấy Desktop "trần như nhộng".

Thật ko ngờ VBA có thể chụp được màn hình
1.Nhờ bác làm giúp mình đoạn code mà khi mình gõ vùng chụp vào B1 (hoặc quét chổi vùng chụp) và độ cao của hình thì tự nó chụp rồi xuất ảnh vào định dạng theo chiều cao trong sheet 1 đó luôn.
Mình gửi file đính kèm như là ví dụ.

2. Sẵn tiện cho mình hỏi sao code của bác mình bị báo lỗi? mình có để ảnh trong sheet 2 để bác xem sao có đoạn code báo đỏ. Vì mình tính dùng code của bác để xuất ảnh của pdf (vd như hình chụp ở sheet 3 là đoạn mình dùng snipping tool để cắt ảnh trên file pdf đính kèm, nhưng pdf không cho quét vùng thì không biết làm sao). Bác xem giúp code của bác có làm được không nha.
Cám ơn bác trước
 

File đính kèm

Upvote 0
Thật ko ngờ VBA có thể chụp được màn hình
1.Nhờ bác làm giúp mình đoạn code mà khi mình gõ vùng chụp vào B1 (hoặc quét chổi vùng chụp) và độ cao của hình thì tự nó chụp rồi xuất ảnh vào định dạng theo chiều cao trong sheet 1 đó luôn.
Mình gửi file đính kèm như là ví dụ.
Tôi không hiểu ý. Đã cho vùng thì copy vùng đó thôi, Height để làm gì?

Range (vùng) có phương thức CopyPicture, còn WorkSheet có phương thức Paste. Vậy thì
Mã:
Sub test()
    With ThisWorkbook.Worksheets("Sheet1")
        .Range(.Range("B1").Value).CopyPicture
'        .Range("Q7").Select
        .Paste
    End With
End Sub

Cũng có thể: chọn vùng -> Ctrl + C -> chọn ô đích -> thẻ Home -> Paste -> Linked Picture

Sau đó cứ mỗi lần thay đổi nội dung ở vùng nguồn thì vùng đích cũng thay đổi.

2. Sẵn tiện cho mình hỏi sao code của bác mình bị báo lỗi? mình có để ảnh trong sheet 2 để bác xem sao có đoạn code báo đỏ.
Tôi viết rõ mà
Code chỉ viết cho 32 bit.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi không hiểu ý. Đã cho vùng thì copy vùng đó thôi, Height để làm gì?
để tự nó co giãn, mình copy hình đó bỏ vào power point luôn mà không cần căn chỉnh lại nữa. Nhưng code bác cho mình dùng cũng ổn. Cơ mà sao nó format khác cách dùng của snipping nhỉ? nó bị đậm lên 2 đường này nè bác. Mình muốn nó y như format gốc đó ạ219939

32 bit cho cái gì nhỉ? ===\. thế cấu hình của mình đang ko tương thích hở bác? vậy có cách nào cắt ảnh của pdf được bác nhỉ?
 
Upvote 0
Nếu bây giờ có một ứng dụng đang chạy chiếm một phần của màn hình. Và ta muốn chụp hình ứng dụng này thì bài toán là chụp một phần của màn hình chua noi dung ung dung ay và tất nhiên excel ẩn đi. Chỉ excel hạ xuống thôi, mọi cái gì khác để nguyên.
Tôi chả hiểu nếu cho hạ tất ứng dụng xuống, thì chụp ảnh nền destop để làm cái gì.
Nhưng vì chụp một phần của màn hình, xác định tọa độ vùng cần chụp trên màn hình là khó. Cho nên cái ảnh chụp toàn màn hình (chứa hình ảnh các ứng dụng khác đang chạy) ấy sẽ được paste vào excel.
Tại đây người code sẽ được ảnh toàn màn hình dán vào excel. Tuy nhiên do mục đích chỉ lấy một phần màn hình, cho nên họ sẽ tính toán được phần cần lấy đó nằm
trong khoảng range nào trên excel. Cuối cùng họp xuất vùng range này ra thành file ảnh, như vậy ta có ảnh của một phần của màn hình.
Bây giờ nếu không chụp màn hình dán vào excel thì trên excel làm gì có cái gì ngoài bảng tính excel, vậy xuất ra ảnh vùng Range thì nó là ảnh mang nội dung gì?
Bài toán như vậy tôi thấy rất dễ hiểu.
 
Upvote 0
Đọc của bạn xong mình lùng bùng luôn, khi thì excel, khi thì màn hình, lộn tùng phèo
 
Upvote 0
Ngan gon la lam the nao xuat ra file anh phan mau vang tren man hinh nay. day la hinh anh mot ung dung khac dang hien thi tren man hinh. Chi muon lay phan mau vang thoi. ngoai ra ko lay cai gi khac. Hinh bao quanh nen mau trang la man hinh may tinh co the chua cac ung dung khac dang chay.
ông nào xác định được tọa độ 4 đỉnh của hình chữ nhật màu vàng trên máy tính hộ tôi cái.
219964
và tôi chỉ muốn chụp hình phần chữ nhật màu vàng trên màn hình máy tính thôi.
 
Upvote 0
@ Chủ thớt và bài #15:

Các bạn không cần phải làm gì ngoài việc dùng Excel 2010 trở lên.

Sử dụng chức năng có sẵn Insert/ Screenshot/ Screen Clipping.

Nó còn hịn tới mức gợi ý sẵn/ cho chọn cửa sổ ứng dụng đang chạy. Khi kích hoạt tính năng Screen Clipping thì cửa sổ Excel hiện hành tự động chui xuống taskbar (Nếu muốn chụp chính cửa số Excel đó thì ta click chuột vào nó ở dưới taskbar cho nó hiện lên màn hình).
Nó cho phép QUÉT một cửa sổ hình chữ nhật bất kỳ để được khung hình theo ý muốn (Clipping), và tự động chèn luôn vào bảng tính.


219976
 
Upvote 0
Hay nhỉ, Excel 2010 có cả tính năng này à
 
Upvote 0
32 bit cho cái gì nhỉ? ===\. thế cấu hình của mình đang ko tương thích hở bác?
Có office 32 bit và office 64 bit. Bạn có 64 bit còn code viết cho 32 bit.
vậy có cách nào cắt ảnh của pdf được bác nhỉ?
Làm chơi tí.

Tôi đính kèm tập tin để test. Chạy cả trong Excel 2007 (tôi không có 2007 nhưng tin là sẽ chạy). Ít ra thì những người dùng Excel < 2010 có công cụ để dùng.

Vài chú ý:
1. Vấn đề xác định vùng trên màn hình cần copy là vấn đề "khó". Ý tưởng hiện tại của tôi là hook chuột. Khi bạn click ở đâu đó và giữ chuột trái không thả thì code ghi nhớ điểm đó trên màn hình. Sau đó vẫn không thả chuột mà kéo tới điểm kết thúc (kéo sang phải và xuống dưới) thì trong quá trình kéo sẽ nhìn thấy (code vẽ hình chữ nhật trên màn hình) vùng hiện hành đang được chọn. Khi tới điểm kết thúc vừa ý thì mới thả chuột trái. Lúc này code sẽ ghi nhớ điểm kết thúc và dựa vào điểm đầu và kết thúc để xác định vùng cần copy rồi copy vùng đó trên màn hình vào sheet. Đây là cách thực hiện trong tập tin copy desktop to sheet with drawing.xlsm.

Tuy nhiên trong quá trình kéo chuột trên vd. cửa sổ PDF thì đôi khi ta thấy cửa sổ bị xê dịch - cái này là do chương trình soạn thảo PDF chứ không phải là lỗi code. Thậm chí nếu thao tác trong cửa sổ notepad thì đoạn văn bản trong vùng chọn được bôi đen. Đó là do notepad xử lý, chả phải do Excel với code của nó. Chả mở Excel mà mở notepad thì khi nhấn giữ chuột rồi kéo thì notepad sẽ bôi đen vùng chọn. Hậu quả là các hình chữ nhật trung gian không được xóa chuẩn. Và nếu văn bản được bôi đen (vd. trong notepad) thì ảnh đen đó sẽ hiển thị trong Excel, vì code copy những gì mắt nhìn thấy.

Thực ra để xác định điểm đầu và cuối không cần vẽ hình chữ nhật. Vẽ chẳng qua để người dùng nhìn thấy vùng mình chọn. Để không vẽ thì dùng tập tin copy desktop to sheet without drawing.xlsm. Nhưng lúc này thao tác là: đưa chuột vào điểm đầu, nhớ là căn chính xác, và click. Tiếp theo đưa chuột vào điểm kết thúc ở dưới và bên phải so với điểm đầu rồi click lần thứ 2.

Cả 2 code, vẽ và không vẽ, sau khi copy vùng vào sheet thì đều gỡ bỏ hook chuột. Tức muốn copy nữa thì lại phải thao tác lại.

Tất nhiên để tránh bôi đen, xê dịch (cuộn cửa sổ) thì ta có thể tạo 1 cửa sổ của Windows lớp "STATIC" và cho nó trong suốt và nằm trên cửa sổ cần copy (PDF, word, VBA ...). Lúc đó thao tác sẽ được thực hiện trên cửa sổ STATIC nên không có chuyện xê dịch, bôi đen. Code để tạo window (CreateWindowEx), làm trong suốt thì ngay trên GPE cũng từng có. Tôi lười viết thêm, nhưng việc tạo STATIC là không hề khó. Lúc đó thì có thể bỏ hook chuột vì việc phát hiện click sẽ được thực hiện trong hàm cửa sổ (WindowProc) của cửa sổ STATIC. Hàm WindowProc sẽ được thay, đánh tráo cho hàm cửa sổ mặc định của STATIC - dùng SetWindowLong + GWL_WNDPROC. Tất nhiên khi xong việc thì trả lại hàm cửa sổ mặc định cho STATIC. Những trò này tôi chơi hơn 20 năm trước nhưng bây giờ lười viết quá.

2. Do code được khởi động khi Excel hoạt động và nó hook chuột để bắt sự kiện về chuột (nhấn, di chuyển, thả) nên tiếp theo không thể chuyển sang ứng dụng khác (notepad, word, PDF, cửa sổ VBA ...) bằng chuột được. Vì sao? Vd. sau khi nhấn Button1 mà ta nhấn icon của PDF trên taskbar bằng chuột thì có nghĩa là lúc đó đã sảy ra sự kiện chuột nhấn và chuột thả, mà chuột thả thì là copy vùng chữ nhật có 2 chiều = 0 (vì 2 điểm nhấn thả trùng nhau) rồi gở bỏ hook chuột. Do vậy khi PDF hiển thị thì không còn hook chuột để theo dõi nhấn thả nữa.

Vì lý do trên sau khi nhấn Button1 thì phải dùng bàn phím để hiển thị PDF. Thao tác như sau: Nhấn Button1 -> nhấn Alt trái và giữ -> nhấn lần lượt TAB tới khi tới icon của PDF -> thả Alt -> click điểm đầu rồi giữ (trường hợp copy desktop to sheet with drawing.xlsm), hoặc click điểm đầu (copy desktop to sheet without drawing.xlsm) -> kéo chuột tới điểm cuối rồi thả (trường hợp copy desktop to sheet with drawing.xlsm), hoặc click điểm cuối (trường hợp copy desktop to sheet without drawing.xlsm).

3. Trong cả 2 tập tin thì giữa 2 thời điểm click điểm đầu và cuối không được phép cuộn cửa sổ - hoặc ứng dụng tự cuộn hoặc ta tự cuộn thì đều không được. Vì sao? Vd. khi click điểm đầu và nó có tọa độ là (x1, y1) trên màn hình. Khi click điểm cuối nó có tọa độ (x2, y2). Nhưng do cửa sổ được cuộn nên cái điểm (x1, y1) trên màn hình kia bây giờ nó lại nằm ở nội dung khác trong cửa sổ ứng dụng (notepad, word, PDF, VBA ...). Thậm chí do cuộn thì điểm click (x2, y2) tuy nằm trên màn hình nhưng có thể rơi vào đoạn nội dung mà khi click điểm đầu nó không được nhìn thấy do nằm ngoài màn hình. Hậu quả là vẽ cũng không đúng mà hình chữ nhật được xác định từ các tọa độ đầu và cuối cũng không chính xác, tiếp theo là vùng không mong muốn sẽ được copy vào sheet.

4. Cách tốt nhất là dùng copy desktop to sheet without drawing.xlsm và click 2 lần để chọn điểm đầu (góc trên bên trái) và điểm cuối (gọc dưới bên phải). Cần di chuyển chuột thật chính xác tới điểm đầu và cuối rồi click.
 

File đính kèm

Upvote 0
@ Chủ thớt và bài #15:

Sử dụng chức năng có sẵn Insert/ Screenshot/ Screen Clipping.

Nó còn hịn tới mức gợi ý sẵn/ cho chọn cửa sổ ứng dụng đang chạy. Khi kích hoạt tính năng Screen Clipping thì cửa sổ Excel hiện hành tự động chui xuống taskbar (Nếu muốn chụp chính cửa số Excel đó thì ta click chuột vào nó ở dưới taskbar cho nó hiện lên màn hình).
Nó cho phép QUÉT một cửa sổ hình chữ nhật bất kỳ để được khung hình theo ý muốn (Clipping), và tự động chèn luôn vào bảng tính.


View attachment 219976
Ôi em làm được rồi, cám ơn bác lắm ạ. Nhưng nó nhanh quá, không kịp tìm được cửa sổ khác là nó bị dính ở cửa sổ hiện hành luôn, em phải làm nhanh thật nhanh mới kịp
 
Upvote 0
Ôi em làm được rồi, cám ơn bác lắm ạ. Nhưng nó nhanh quá, không kịp tìm được cửa sổ khác là nó bị dính ở cửa sổ hiện hành luôn, em phải làm nhanh thật nhanh mới kịp
Tôi không hiểu bạn nói gì. Với tôi cứ phải diễn giải cụ thể.

Tôi có làm lại như đã định, tức giống như tool trong Excel. Bạn thử test xem
 

File đính kèm

Upvote 0
Tôi không hiểu bạn nói gì. Với tôi cứ phải diễn giải cụ thể.

Tôi có làm lại như đã định, tức giống như tool trong Excel. Bạn thử test xem
Tôi không hiểu bạn nói gì. Với tôi cứ phải diễn giải cụ thể.

Tôi có làm lại như đã định, tức giống như tool trong Excel. Bạn thử test xem
Tuyệt vời bác ạ. Em thích code hơn là cách sẵn có của Excel
Cách bác befaint hướng dẫn, trong vòng vài giây là nó đã đứng yên và bắt mình phải chọn khu vực chụp.
Khi em bấm nút, nó đưa về màn hình trang GPE nhưng em đang muốn chụp trang excel thì khi em bấm vào excel nó lại trả về dấu + như hình (nghĩa là mất lệnh chụp).
Để kịp chụp là phai chọn trang excel ngay tức thì thì nó mới còn lệnh chụp (em nghĩ trong vòng 3 giây phải mở excel lên mới kịp, nếu không nó sẽ xem như mình muốn chụp màn hình mà chưa kịp chuyển). Bác thử làm mà để yên cỡ 5 giây đi ạ, nó sẽ không cho mình chọn thứ khác trên taskbar nữa (nếu chọn thì coi như mất lệnh chụp)
Em có video mà ko up được
 

File đính kèm

  • FDAA5BF4-16B4-4FDD-9B12-EA86BCD28C91.jpeg
    FDAA5BF4-16B4-4FDD-9B12-EA86BCD28C91.jpeg
    4.8 MB · Đọc: 12
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom