windows echo xcopy 自动时间_VBA实践+excel英文逐句自动有道翻译为中文

aa8634b27569ae5d17a0f92443d5eebf.png

VBA实践+excel英文逐句自动有道翻译为中文

有一个需求是这样的,如下图所示,在一个excel工作表中,B列是英文,每一个单元格一句英文,在C列要填英文对应的有道机译结果。为保证准确度,要求必须一句句翻译,不能把英文做成一个文档再上传有道翻译。

9c113833f27ae5063a994e5a81f06f32.png
excel英语翻译

尝试使用VBA代码模拟键盘和鼠标自动完成复制单元格英文-粘贴到有道客户端的输入框-等待翻译结果-复制翻译结果-粘贴到对应的单元格中的整个过程。代码实现环境为64位win8.1,64位excel2010,有道桌面客户端,代码如下。模拟的鼠标键盘按键可能会被网站、软件等拦截,用到其他地方不一定管用哦。

Private Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPtr 'SetCursorPos函数把光标移到屏幕的指定位置
Private Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

'这是 VB API 函数声明,
'在 WINDOWS 系统中有个文件 kernel32.dll 动态连接(函数)库文件,里面包含好多WINDOWS 功能的函数。该声明是指,在所写的程序中要用到这个库文件中的一个函数 Sleep, 它的参数是dwMilliseconds.
'功能是,让这条语句的下一条语停顿 dwMilliseconds 时间后再运行。单位为毫秒
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Const MOUSEEVENTF_LEFTDOWN = &H2 '按下左键,&H2表示2的十六进制值
Private Const MOUSEEVENTF_LEFTUP = &H4 '释放左键,&H4表格4的十六进制值

Private Sub 单击()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 '高版本系统如win10可能需要使用call调用ddl动态连接这样才能生效,如call mouse_event (MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0).https://blog.csdn.net/qq_39533125/article/details/75220288
Sleep 50
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Sleep 100
End Sub


Sub 自动发送翻译()

Dim WS As Worksheet
Dim xPaste&, yPaste&, xCopy&, yCopy&, xClear&, yClear&
Dim i%
Dim myData As DataObject

Set WS = ThisWorkbook.Sheets("工作表1")
'粘贴位置
xPaste = 217
yPaste = 96
'复制按钮位置
xCopy = 198
yCopy = 551
'清除按钮位置
xClear = 610
yClear = 288

For i = 2 To 5
    WS.Cells(i, 2).Copy
 
    Sleep 500 '延时500毫秒
    SetCursorPos xPaste, yPaste '把光标移动到屏幕输入框位置
    DoEvents '会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。
    Sleep 500
    Call 单击
    DoEvents
    Sleep 500
    Application.SendKeys "^V" '粘贴英文到输入框
    DoEvents
 
    Sleep 500
    SetCursorPos xCopy, yCopy
    DoEvents
    Sleep 2000 '等待翻译结果出来
    Call 单击 '单击复制按钮,复制翻译结果
    DoEvents
 
    Sleep 500
    SetCursorPos xClear, yClear
    DoEvents
    Sleep 500
    Call 单击
    DoEvents

    '把翻译结果输入到单元格中
    Set myData = New DataObject
    With myData
        .GetFromClipboard
        If .GetText <> "" Then WS.Cells(i, 3).Value = .GetText '把剪贴板的文本放入到单元格
    End With
    Set myData = Nothing

Next i

MsgBox "完成"

End Sub
知乎视频​www.zhihu.com
zhihu-card-default.svg

想要学习更多关于excel vba的知识,可以看看这个很实用的书。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值