ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 35230|回复: 56

[分享] VBA发送微信消息

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2017-1-19 15:46 | 显示全部楼层 |阅读模式
下面代码可以正常使用,发送微信。
发送机制:
第一步:企业的CorpID + 企业的Secret 换取 Token
第二步:用Token  给 微信ID(不是姓名)发送消息
使用方法:
1 复制代码到 VBA模块
2 改代码中 "微信的Secret" 和 "微信的CorpID" 为自己公司的 就可以了

Dim Url As String
Const CorpID As String = "微信的CorpID"
Const Secret As String = "微信的Secret"
Const SendText As String = "{""touser"": ""成员ID"",""toparty"": ""部门ID"",""totag"": ""标签ID"",""msgtype"": ""text"",""agentid"": 0,""text"": {""content"": ""消息内容""},""safe"":0}"
Const ErrCode As String = """errcode"":0,""errmsg"":""ok"""

Function Token(CorpID As String, Secret As String) As String
'获取Token 提醒一天只能获取 2000次,最好获取后保存方便调用
Dim http
Set http = CreateObject("MSXML2.ServerXMLHTTP")
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" & CorpID & "&corpsecret=" & Secret
http.Open "get", Url, False 'post get 都可以
http.send ""
If http.Status = 200 Then
  Token = http.responseText
End If
'Debug.Print Token
'分解
If InStr(Token, "access_token") > 1 Then
   Token = Split(Token, ",")(0)
   Token = Split(Token, ":")(1)
   Token = Replace(Token, """", "")
Else
   Token = ""
End If
End Function

Sub te()
获取Token方法
Str1 = Token(CorpID, Secret)
Debug.Print Str1
end Sub

Function SendMsg(发送文本 As String) As String
'发消息
Dim http
TokenStr=Token(CorpID, Secret)
Set http = CreateObject("MSXML2.ServerXMLHTTP")
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" & TokenStr
http.Open "Post", Url, False
http.send 发送文本
If http.Status = 200 Then
  SendMsg = http.responseText
End If
'If InStr(SendMsg, ErrCode) = 0 Then MsgBox "错误:" & SendMsg
End Function

Sub te()
'发送文本  替换名字 部门 消息
Str1 = Replace(SendStr, "成员ID", "自己的成员微信ID")
Str1 = Replace(Str1, "部门ID", "自己的部门")
Str1 = Replace(Str1, "标签ID", "自己的标签")
Str1 = Replace(Str1, "消息内容", "自己的发送文本")
'发送消息
Str1 =SendMsg(Str1 )
end Sub

上面的代码可以发信息了。我们一般只知道名字不知道微信ID,下面的代码可以提取微信的成员信息生成数据表,方便查找。
Sub GetWxUers()
'获取微信成员 这个办法很笨 josn高级这里总出错不会用
Dim http
Dim MyArr, MyArr1
Dim i1 As Integer, i2 As Integer, Str1 As String, Str2 As String
TokenStr=Token(CorpID, Secret)
Set http = CreateObject("MSXML2.ServerXMLHTTP")
Url = "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=" & TokenStr & "&department_id=1&fetch_child=1&status=0"
http.Open "Get", Url, False
http.send ""
If http.Status = 200 Then
  Str1 = http.responseText
End If

If InStr(Str1, ErrCode) = 0 Then MsgBox "错误:" & Str1: Exit Sub
'删除头信息
Str1 = Split(Str1, "[{")(1)
'排除http:中的:
Str1 = Replace(Str1, """:", "|")
Str1 = Replace(Str1, "/", "")
'去掉最后一个
Str1 = Replace(Str1, "}", "")
Sql = ""
'个人信息分条
MyArr = Split(Str1, ",{")
For i = 0 To UBound(MyArr)
   '个人 列信息
    MyArr1 = Split(MyArr(i), ",""")
     Str1 = "": Str2 = ""
    For i1 = 0 To UBound(MyArr1)
        Str1 = Str1 & "[" & Split(MyArr1(i1), "|")(0) & "],"
        Str2 = Str2 & "'" & Split(MyArr1(i1), "|")(1) & "',"
    Next
   '去掉最后一个字母,
    Str1 = Left(Str1, Len(Str1) - 1)
    Str2 = Left(Str2, Len(Str2) - 1)
   '去掉部门中的[]
    Str2 = Replace(Str2, "[", "")
    Str2 = Replace(Str2, "]", "")
   '生成SQL插入语句
    Sql = Sql & " INSERT into [users] (" & Str1 & ") Values (" & Str2 & ")"
    Sql = Replace(Sql, """", "")
Next
‘’生成sql插入表
Set ConnWy = Conn("自己的数据库连接代码")
ConnWy.Execute ("delete from [users] ")
ConnWy.Execute (Sql)
ConnWy.Close
End Sub


还可以通过task定时打开excel文件,实现定时自动发送提醒消息。



补充内容 (2019-2-25 15:12):
获取微信成员代码已更新,见27楼

补充内容 (2019-7-31 09:58):
38楼有附件

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-1-19 16:26 | 显示全部楼层
留名关注,学习一下。

TA的精华主题

TA的得分主题

发表于 2017-1-19 16:31 | 显示全部楼层
学习下!!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2017-1-28 01:26 | 显示全部楼层
本帖最后由 node-excel 于 2017-1-28 11:35 编辑

你好,看到你用excel发微信,我测试不能过,已经加入了微信服务号的两项信息,获得的TOKEN总是为空值“”,看到里面有个配置,必须要URL自己的服务器吗?你看看还有什么办法吗?

TA的精华主题

TA的得分主题

发表于 2017-1-28 12:43 | 显示全部楼层
企业的CorpID + 企业的Secret 是公众号中AppID(应用ID)和AppSecret(应用密钥)吗?

TA的精华主题

TA的得分主题

发表于 2017-1-28 13:23 | 显示全部楼层
node-excel 发表于 2017-1-28 01:26
你好,看到你用excel发微信,我测试不能过,已经加入了微信服务号的两项信息,获得的TOKEN总是为空值“”, ...

上面的URL是不对的,不知道是公众号类型不同地址不同还是什么原因,我也试了一下,不能得到token,在公众平台中查看开发者文档,找到一个地址,替换后可以得到token,发送消息的地址估计也是一样。
  1. "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" & CorpID & "&secret=" & Secret
复制代码

TA的精华主题

TA的得分主题

发表于 2017-1-28 13:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
膜一发,学习下

TA的精华主题

TA的得分主题

发表于 2017-1-29 14:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 node-excel 于 2017-1-30 18:16 编辑
№▁▃风筝﹋ 发表于 2017-1-28 13:23
上面的URL是不对的,不知道是公众号类型不同地址不同还是什么原因,我也试了一下,不能得到token,在公众 ...

'Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" & TokenStr
已经改为以下
Url = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=" & TokenStr
原来代码中修改了一些估计为编辑错误的错误,可以不出错了。比如注释定义之类。

还是不能发送啊,  SendMsg = http.responseText   ,返回信息:"{"errcode":48001,"errmsg":"api unauthorized hint: [IX6gRA0376vr46!]"}"我也是每次更新一次,但似乎说没有授权?
要实现微信发送,必须要认证公众号的令牌吗?

TA的精华主题

TA的得分主题

发表于 2017-1-29 22:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习学习一下大牛的作品

TA的精华主题

TA的得分主题

发表于 2017-1-30 01:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-28 11:09 , Processed in 0.043491 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表