Tình hình là em có file excel với cột để search là cột B; cột cần điền dữ liệu là cột cách đó 2 ô (send key chứ ko offset đuợc vì có rất nhiều dòng ẩn biến động)
Em muốn sau khi find (sẽ nhảy cell select vào cột B) thì sendkeys "{Right 2}. đồng thời xét nếu cell null thì tự động thêm dấu "=". Phần thêm dấu tạm e chưa nghi.
Code như sau ạ.
Em chỉ là đọc với cố hiểu chứ chưa có gì về VBA ạ.
Nhờ các Cụ giúp em với.
Em xin gưử toàn bộ code em sử dụng luôn ạ.
Tại This Workbook
Module 1
Em muốn sau khi find (sẽ nhảy cell select vào cột B) thì sendkeys "{Right 2}. đồng thời xét nếu cell null thì tự động thêm dấu "=". Phần thêm dấu tạm e chưa nghi.
Code như sau ạ.
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
SendKeys "{Right 2}"
End If
End Sub
Em chỉ là đọc với cố hiểu chứ chưa có gì về VBA ạ.
Nhờ các Cụ giúp em với.
Em xin gưử toàn bộ code em sử dụng luôn ạ.
Tại This Workbook
Mã:
Option Explicit
Sub Workbook_Open()
On Error Resume Next
ThisWorkbook.Names("secret_name").Delete
Application.OnKey "{F1}", ""
Application.OnKey "{F3}", ""
Application.OnKey "{UP}", ""
Application.OnKey "{DOWN}", ""
Application.OnKey "^{g}", ""
Application.OnKey "^{d}", ""
Application.OnKey "^{r}", ""
Application.OnKey "^{w}", ""
MsgBox "Done!"""
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DoHook False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
SendKeys "{Right 2}"
End If
End Sub
Module 1
Mã:
Private Const WM_KEYDOWN = &H100
Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13
Private Const VK_F1 = 112
'khai bao phim f1
Private Const VK_F2 = 113
'khai bao phim F2
Private Const VK_F3 = 114
'khai bao phim f3
Private Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As LongPtr, ByVal hmod As LongPtr, ByVal dwThreadId As Long) As Long
Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As LongPtr, ByVal ncode As Long, ByVal wParam As LongPtr, lParam As Any) As Long
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As Long
Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public HookHandle As Long
Function LowLevelKeyboardProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim hs As KBDLLHOOKSTRUCT
If code = HC_ACTION Then
' chi xu ly khi nhan phim
If wParam = WM_KEYDOWN Then
CopyMemory hs, ByVal lParam, LenB(hs)
If (hs.vkCode = VK_F1) Or (hs.vkCode = VK_F3) Then
LowLevelKeyboardProc = 1
Exit Function
End If
End If
End If
LowLevelKeyboardProc = CallNextHookEx(HookHandle, code, wParam, lParam)
End Function
Sub DoHook(ByVal SetHook As Boolean)
If SetHook Then
HookHandle = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, Application.Hinstance, 0)
Else
UnhookWindowsHookEx (HookHandle)
HookHandle = 0
End If
End Sub
Lần chỉnh sửa cuối: