Xin hướng dẫn cách Ctrl A , Ctrl C để copy từ WEB rồi dán dữ liệu Ctrl V vào excel

Liên hệ QC

phamvandunghp84

Thành viên thường trực
Tham gia
5/3/20
Bài viết
241
Được thích
12
Mình muốn dùng VBA để vào một trang web bằng trình duyệt google rồi copy bằng cách Ctrl A C dán vào Ctrl V vào sheet1 excel.
mình tìm được code để mở trang web nhưng không biết cách gửi phím như nào .. mong các bạn sửa giúp mình nhé!

Sub Open_Chrome()
Dim Dir As String
Dim fileName As String ' tên chuong trình
Dir = "C:\Program Files (x86)\Google\Chrome\Application" 'Tên đường dẫn
fileName = "chrome.exe" 'Tên chuong trình

Shell Dir & "\" & fileName & " https://dantri.com.vn/ "

End Sub
 
Mình muốn dùng VBA để vào một trang web bằng trình duyệt google rồi copy bằng cách Ctrl A C dán vào Ctrl V vào sheet1 excel.
mình tìm được code để mở trang web nhưng không biết cách gửi phím như nào .. mong các bạn sửa giúp mình nhé!

Sub Open_Chrome()
Dim Dir As String
Dim fileName As String ' tên chuong trình
Dir = "C:\Program Files (x86)\Google\Chrome\Application" 'Tên đường dẫn
fileName = "chrome.exe" 'Tên chuong trình

Shell Dir & "\" & fileName & " https://dantri.com.vn/ "

End Sub
Có bạn nào biết chỉ mình với
 
Bạn thử sử dụng Hàm dưới đây:

=CopyWebsite("...com", A2, True)
Hoặc:
=CopyWebsite(A1, A2, True)

Dán dưới ô A2, có/ không dán các đối tượng

Hoặc macro:

Call CopyWebsite2("...com", [A2], False)


Code viết giải trí, chứ không nghĩ ra mục đích của công việc trên.
Và dữ kiện quá ít để hiểu.


----------------------
JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
'//////////////////////////////////////////////////////////////
#If Win64 Then
  Private Pri_TimerID As LongPtr
#Else
  Private Pri_TimerID As Long
#End If

Function CopyWebsite(Optional URL As String, Optional oRange As Range, Optional PasteObject As Boolean = True) As String
  On Error Resume Next
  If Pri_TimerID <> 0 Then KillTimer 0&, Pri_TimerID
  Static URL_ As String, Rng As Range, Caller As Range, bPasteObject As Boolean
  If VBA.TypeName(Application.Caller) = "Range" Then
    Set Caller = Application.Caller
    URL_ = URL: Set Rng = oRange(2, 1): bPasteObject = PasteObject
    Pri_TimerID = SetTimer(0&, 0&, 0, AddressOf CopyWebsite_callback)
  Else
    Rng.Select
    Dim IE As Object
    ActiveSheet.DrawingObjects.Delete
    Rng.Resize(10000, 1).ClearContents
    Dim oDO As Object
    Set oDO = VBA.CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    oDO.SetText RequestSite(URL_)
    oDO.PutInClipboard
    If bPasteObject Then
      ActiveSheet.Paste
    Else
      ActiveSheet.PasteSpecial DisplayAsIcon:= _
        False, NoHTMLFormatting:=True
    End If
    Caller.ClearContents
    Set Caller = Nothing
    Set oDO = Nothing
    Set IE = Nothing
    Set Rng = Nothing
  End If
  On Error GoTo 0
End Function

Sub CopyWebsite2(Optional URL As String, Optional oRange As Range, Optional PasteObject As Boolean = True)
  On Error Resume Next
  oRange(1, 1).Parent.Activate
  oRange(1, 1).Select
  Dim IE As Object
  Dim oDO As Object
  Set oDO = VBA.CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
  ActiveSheet.DrawingObjects.Delete
  oRange.Resize(10000, 1).ClearContents
  oDO.SetText RequestSite(URL)
  oDO.PutInClipboard
  If PasteObject Then
    ActiveSheet.Paste
  Else
    ActiveSheet.PasteSpecial DisplayAsIcon:= _
      False, NoHTMLFormatting:=True
  End If
  Set oDO = Nothing
  Set IE = Nothing

  On Error GoTo 0
End Sub
Private Function RequestSite(URL As String) As String
  On Error Resume Next
  With VBA.CreateObject("MSXML2.XMLHTTP")
      .Open "GET", URL, False
      .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
      .Send ""
      If .Status <> 200 Then Exit Function
      RequestSite = .responseText
    End With
  Return
End Function
Private Function CopyWebsite_callback()
  Call CopyWebsite
End Function
 
Lần chỉnh sửa cuối:
Mình muốn dùng VBA để vào một trang web bằng trình duyệt google rồi copy bằng cách Ctrl A C dán vào Ctrl V vào sheet1 excel.
mình tìm được code để mở trang web nhưng không biết cách gửi phím như nào .. mong các bạn sửa giúp mình nhé!

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Sub Open_Chrome()
Dim Dir As String
Dim fileName As String ' tên chuong trình
Dir = "C:\Program Files (x86)\Google\Chrome\Application" 'Tên đường dẫn
fileName = "chrome.exe" 'Tên chuong trình

Shell Dir & "\" & fileName & " https://dantri.com.vn/ "

End Sub
Bạn thử sử dụng Hàm dưới đây:

=CopyWebsite("...com", A2, True)
Hoặc:
=CopyWebsite(A1, A2, True)

Dán dưới ô A2, có/ không dán các đối tượng

Hoặc macro:

Call CopyWebsite2("...com", [A2], False)


Code viết giải trí, chứ không nghĩ ra mục đích của công việc trên.
Và dữ kiện quá ít để hiểu.


----------------------
JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
'//////////////////////////////////////////////////////////////
#If Win64 Then
  Private Pri_TimerID As LongPtr
#Else
  Private Pri_TimerID As Long
#End If

Function CopyWebsite(Optional URL As String, Optional oRange As Range, Optional PasteObject As Boolean = True) As String
  On Error Resume Next
  If Pri_TimerID <> 0 Then KillTimer 0&, Pri_TimerID
  Static URL_ As String, Rng As Range, Caller As Range, bPasteObject As Boolean
  If VBA.TypeName(Application.Caller) = "Range" Then
    Set Caller = Application.Caller
    URL_ = URL: Set Rng = oRange(2, 1): bPasteObject = PasteObject
    Pri_TimerID = SetTimer(0&, 0&, 0, AddressOf CopyWebsite_callback)
  Else
    Rng.Select
    Dim IE As Object
    ActiveSheet.DrawingObjects.Delete
    Rng.Resize(10000, 1).ClearContents
    Dim oDO As MSForms.DataObject
    Set oDO = New MSForms.DataObject
    oDO.SetText RequestSite(URL_)
    oDO.PutInClipboard
    If bPasteObject Then
      ActiveSheet.Paste
    Else
      ActiveSheet.PasteSpecial DisplayAsIcon:= _
        False, NoHTMLFormatting:=True
    End If
    Caller.ClearContents
    Set Caller = Nothing
    Set oDO = Nothing
    Set IE = Nothing
    Set Rng = Nothing
  End If
  On Error GoTo 0
End Function

Sub CopyWebsite2(Optional URL As String, Optional oRange As Range, Optional PasteObject As Boolean = True)
  On Error Resume Next
  oRange(1, 1).Select
  Dim IE As Object
  Dim oDO As MSForms.DataObject
  Set oDO = New MSForms.DataObject
  ActiveSheet.DrawingObjects.Delete
  oRange.Resize(10000, 1).ClearContents
  oDO.SetText RequestSite(URL)
  oDO.PutInClipboard
  If PasteObject Then
    ActiveSheet.Paste
  Else
    ActiveSheet.PasteSpecial DisplayAsIcon:= _
      False, NoHTMLFormatting:=True
  End If
  Set oDO = Nothing
  Set IE = Nothing

  On Error GoTo 0
End Sub
Private Function RequestSite(URL As String) As String
  On Error Resume Next
  With VBA.CreateObject("MSXML2.XMLHTTP")
      .Open "GET", URL, False
      .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
      .Send ""
      If .Status <> 200 Then Exit Function
      RequestSite = .responseText
    End With
  Return
End Function
Private Function CopyWebsite_callback()
  Call CopyWebsite
End Function


Cảm ơn bạn rất nhiều.
Bạn có thể hướng dẫn mình một cách đơn giản hơn được không? mình muốn VBA làm thao tác giống như mình thao tác thủ công vậy?

mình nghĩ tới việc dùng PostMessage lHandle hay SendMessage . keybd_event VK_LCONTROL cho có thể thao tác trên các trang web mà IE không hỗ hợ?

bạn giúp mình bước tiếp theo được k?

Sub Open_Chrome()
Dim Dir As String
Dim fileName As String ' tên chuong trình
Dir = "C:\Program Files (x86)\Google\Chrome\Application" 'Tên đường dẫn
fileName = "chrome.exe" 'Tên chuong trình

Shell Dir & "\" & fileName & " https://dantri.com.vn/ "


' mình mở được trang web rồi. giờ mình muốn làm sao VBA nhấn được phím Ctrl A C để copy rồi dán bằng Ctrl V vào sheet "data" excel


End Sub
 
Lập trình không phải nằm trong trí tưởng tượng đâu bạn.
Có nhiều cách để thực hiện.
Nhưng tôi không biết bạn có mục đích gì, để tận dụng vào công việc gì thì sao biết đường hướng dẫn đây.


Sau khi mở Chrome lên, nội dung website cần được Active thì VBA mới có thể gửi phím và chọn nội dung được, nhưng chi cho mất công vậy.
Vì sao phải mở Chrome?
Vì sao phải gửi phím để copy?


Code ở trên tôi viết cho bạn là Copy về Trang tính.

Bây giờ bạn thực hiện sao chép lại code vào module:

Gõ vào ô bất kì:
=CopyWebsite("https://dantri.com.vn/", A2, True)

Hoặc gọi thủ tục:
Sub CopySite()
Call CopyWebsite2("https://dantri.com.vn/", Sheets("Data").[A2], True)
End Sub
 
Lập trình không phải nằm trong trí tưởng tượng đâu bạn.
Có nhiều cách để thực hiện.
Nhưng tôi không biết bạn có mục đích gì, để tận dụng vào công việc gì thì sao biết đường hướng dẫn đây.


Sau khi mở Chrome lên, nội dung website cần được Active thì VBA mới có thể gửi phím và chọn nội dung được, nhưng chi cho mất công vậy.
Vì sao phải mở Chrome?
Vì sao phải gửi phím để copy?


Code ở trên tôi viết cho bạn là Copy về Trang tính.

Bây giờ bạn thực hiện sao chép lại code vào module:

Gõ vào ô bất kì:
=CopyWebsite("https://dantri.com.vn/", A2, True)

Hoặc gọi thủ tục:
Sub CopySite()
Call CopyWebsite2("https://dantri.com.vn/", Sheets("Data").[A2], True)
End Sub
mình làm theo bạn nhưng nó bị lỗi như này bạn ạ.

Vì sao phải mở Chrome? có những trang web không hỗ trợ mở bằng IE nó không mở được bạn ạ nên mình mới cần cách SendMessage . keybd_event VK_LCONTROL ..vv



1585811079314.png
 
mình làm theo bạn nhưng nó bị lỗi như này bạn ạ.

Vì sao phải mở Chrome? có những trang web không hỗ trợ mở bằng IE nó không mở được bạn ạ nên mình mới cần cách SendMessage . keybd_event VK_LCONTROL ..vv

-------------------------------------


Bây giờ bạn thực hiện sao chép lại code vào module:
 
-------------------------------------
Cảm ơn bạn mình đã thử nó đã chạy nhưng không load được dữ liệu. mình muốn dán theo kiểu text , mình thử sửa lại như này nhưng k được
ActiveSheet.PasteSpecial Format:="Text", DisplayAsIcon:= _
False, NoHTMLFormatting:=True

1585816340500.png
 
Cảm ơn bạn mình đã thử nó đã chạy nhưng không load được dữ liệu. mình muốn dán theo kiểu text , mình thử sửa lại như này nhưng k được
ActiveSheet.PasteSpecial Format:="Text", DisplayAsIcon:= _
False, NoHTMLFormatting:=True

View attachment 234570
----------------------------

Bạn thử sử dụng Hàm dưới đây:

=CopyWebsite("...com", A2, True)
Hoặc:
=CopyWebsite(A1, A2, True)

Dán dưới ô A2, có/ không dán các đối tượng


Bạn có đọc bài viết của tôi không vậy.

Sửa True thành False, có/ không dán các đối tượng
 
----------------------------




Bạn có đọc bài viết của tôi không vậy.

Sửa True thành False, có/ không dán các đối tượng
bạn thử giúp mình trang này https://www.investing.com/ mình thấy nó copy được dữ liệu bạn ạ
Bài đã được tự động gộp:

bạn thử giúp mình trang này https://www.investing.com/ mình thấy nó copy được dữ liệu bạn ạ
nó chỉ lấy được phần khung thôi bạn. phần số liệu thì không lấy được. trừ khi mình copy và dán bằng tay..
 
Lần chỉnh sửa cuối:
bạn thử giúp mình trang này https://www.blockchain.com/charts mình thấy nó copy được dữ liệu bạn ạ
-----------------------

Bạn đã đọc đoạn tôi đã đăng ở trên hay chưa?

-------------------
Nhưng tôi không biết bạn có mục đích gì, để tận dụng vào công việc gì thì sao biết đường hướng dẫn đây.
-------------------

Ở trên bạn cho ví dụ là trang Dân trí, bây giờ là trang blockchain, 2 công nghệ web cách nhau 10 năm.

Mục đích của bạn là nạo dữ liệu Runtime.

Bạn tham khảo SeleniumBasic để thực hiện.

Vấn đề này tôi có thể làm được nhưng nó sẽ lấy đi thời gian của tôi, nên tôi không thể trợ giúp thêm.
 
Thì phải lòng vòng vậy mới có người làm giúp chứ. Nếu ngay từ đầu đưa web blockchain thì đâu có ai làm giúp. :)
 
Web KT
Back
Top Bottom