【VBA】excel获取股票实时行情(历史数据,基金数据下载)

文章目录

  • 0. 效果展示与获取
    • 其它相关内容:
  • 1. Excel VBA 自动化与对象模型
  • 2. HTTP 请求与 API 数据获取
  • 3. JSON 数据解析与字符串处理
  • 4. 自动任务调度与实时刷新
  • 5. 错误处理与健壮性设计

0. 效果展示与获取

作品:https://mbd.pub/o/bread/aJaUmplq

需要定制可以联系我:不过不便宜

🟢 实时行情:

视频展示:

excel 股票实时行情

在这里插入图片描述

其它相关内容:

☘️App(exe):这个只展示当前价格实时变化。
在这里插入图片描述
☘️ 基金下载App (exe):只支持基金哦
在这里插入图片描述
☘️ 股票历史数据下载:一支
在这里插入图片描述
☘️ 股票历史数据下载:20 支
在这里插入图片描述

1. Excel VBA 自动化与对象模型

编写VBA时先在编辑器的工具–选项,里面设置一下文本的字体、字号。excel默认的字体不太好。

原理与作用:

Excel VBA(Visual Basic for Applications)是 Office 应用内置的编程语言,通过 VBA 可以直接操作 Excel 的各个对象(如工作簿、工作表、单元格等),实现数据自动读取、写入和格式化。

关键技术点:

  • 对象模型: 通过 ThisWorkbookWorksheetsRange 等对象,可以定位到任意单元格,实现数据的读写操作。
  • 动态定位: 利用字符串拼接和变量控制,实现根据不同行或区域自动更新数据,保证灵活性。
' 基础对象操作示例
Sub BasicObjectDemo()Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets("Sheet1")' 写入数据到A1单元格ws.Range("A1").Value = "实时数据"' 动态定位最后一行Dim lastRow As LonglastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1ws.Cells(lastRow, 1).Value = Now() & " 数据更新"
End Sub

应用场景:
这种自动化技术适用于需要周期性更新数据的报表、仪表板以及需要与外部数据源交互的业务应用。


2. HTTP 请求与 API 数据获取

关键技术点:

  • MSXML2.XMLHTTP 对象:
    • 用于构造和发送 HTTP 请求(通常是 GET 请求)。
    • 支持同步或异步调用,本文中采用同步方式,确保数据获取后再执行后续逻辑。
  • 动态 URL 构造:
    • 利用股票代码、时间戳等参数构造 URL,确保每次请求的唯一性与时效性。
    • 时间戳的计算(从 1970 年开始的毫秒数)可以避免缓存问题,并确保数据新鲜。
' HTTP请求示例(需引用Microsoft XML库)
Sub GetAPIData()Dim http As New MSXML2.XMLHTTP60Dim url As StringDim timestamp As Long' 生成13位时间戳(毫秒级)timestamp = DateDiff("s", "1/1/1970", Now()) * 1000' 构造动态URLurl = "https://api.example.com/data?symbol=600519&timestamp=" & timestamp' 发送同步GET请求http.Open "GET", url, Falsehttp.setRequestHeader "Content-Type", "application/json"http.sendIf http.Status = 200 ThenDebug.Print http.responseTextElseMsgBox "请求失败:" & http.Status & " - " & http.statusTextEnd If
End Sub

可以先用apipost等软件发送请求,看看api返回的数据的结构,再编写代码处理。


3. JSON 数据解析与字符串处理

现代 API 多以 JSON 格式传递数据,而 VBA 本身对 JSON 支持有限,因此需要借助外部库(如 VBA-JSON)进行解析。同时,返回的数据往往带有包装或格式不规范,必须进行预处理。

☘️VBA-JSON:https://github.com/VBA-tools/VBA-JSON

下载source code,解压,然后再VBA编辑器中,文件,导入,选择解压后的.bas文件即可。
在这里插入图片描述
然后,工具,引用,勾选微软脚本运行时这个选项:
在这里插入图片描述

关键技术点:

  • 数据清洗:
    • 去除 API 返回结果中包裹 JSON 数据的函数调用(例如去掉 fortune_hq(...) 外壳)。
    • 将不符合标准的单引号替换为双引号,确保 JSON 格式正确。
  • 字符串提取:
    • 利用自定义函数,通过查找特定键名及其对应的方括号,提取出数组子串。
    • 使用字符遍历和计数法(如括号匹配算法)来定位 JSON 数组的起始与结束位置。
  • JSON 解析库:
    • 调用外部 JSON 库(如 VBA-JSON),将清洗后的字符串转换为 VBA 中的字典或集合对象,方便后续数据操作。
' JSON解析示例(需导入VBA-JSON模块)
Sub ParseJSONdata()Dim rawData As StringDim jsonStr As StringDim jsonDict As Dictionary' 原始数据示例rawData = "fortune_hq({""data"":[[1633046400000,1850.0],[1633132800000,1862.5]]})"' 数据清洗处理jsonStr = Mid(rawData, InStr(rawData, "{"), InStrRev(rawData, "}") - InStr(rawData, "{"))jsonStr = Replace(jsonStr, "'", """")  ' 单引号转双引号' 使用JSON库解析Set jsonDict = JsonConverter.ParseJson(jsonStr)' 提取数据数组Dim dataArray As CollectionSet dataArray = jsonDict("data")' 输出第一个数据点Debug.Print "时间戳:" & dataArray(1)(1)Debug.Print "价格:" & dataArray(1)(2)
End Sub

4. 自动任务调度与实时刷新

原理与作用:
实时数据监控系统需要定时刷新数据,Excel 提供了 Application.OnTime 方法用于任务调度,通过该方法可以在指定时间调用某个子程序,实现周期性操作。
关键技术点:

  • OnTime 方法:
    • 可设定一个未来的时刻执行指定的 VBA 子程序,从而构成循环调用。
    • 每次调用后重新计算下一次运行时间,实现持续的数据刷新。
  • 任务取消机制:
    • 提供停止自动刷新的方法,利用 OnTime 的取消参数,确保当用户需要停止刷新时能够安全退出任务调度。

使用OnTime时,代码要写在模块里面,而不是某个sheet里面。

在这里插入图片描述

Dim NextRunTime As Double' 启动自动刷新(每60秒执行一次)
Sub StartAutoRefresh()NextRunTime = Now + TimeValue("00:01:00")Application.OnTime NextRunTime, "RefreshData"
End Sub' 主刷新过程
Sub RefreshData()On Error GoTo ErrorHandlerGetAPIData  ' 调用数据获取方法ParseJSONdata  ' 调用数据解析方法UpdateDashboard  ' 更新仪表板
Cleanup:StartAutoRefresh  ' 重新调度下一次任务Exit Sub
ErrorHandler:MsgBox "刷新失败:" & Err.DescriptionResume Cleanup
End Sub' 停止自动刷新
Sub StopAutoRefresh()On Error Resume NextApplication.OnTime NextRunTime, "RefreshData", , False
End Sub

5. 错误处理与健壮性设计

原理与作用:
任何数据抓取与处理过程都可能遇到异常情况(如网络故障、数据格式错误等),因此健全的错误处理机制至关重要。
关键技术点:

  • On Error 语句:
    • 捕获运行时错误,防止程序因单个错误而中断。
    • 使用 On Error GoTo 跳转到错误处理代码,提供用户友好的错误提示,并记录错误信息以便后续调试。
  • 错误回归与恢复:
    • 在关键步骤(如 JSON 解析)前后设置错误捕获,确保在失败时及时跳出当前操作区域,而不会影响整个任务的执行。
' 增强型错误处理示例
Sub SafeDataProcessing()On Error GoTo ErrorHandler' 网络请求阶段Dim http As New MSXML2.XMLHTTP60http.Open "GET", "https://api.example.com/data", Falsehttp.sendIf http.Status <> 200 Then Err.Raise vbObjectError + 1, , "HTTP请求失败"' 数据解析阶段On Error GoTo ParseErrorDim jsonDict As DictionarySet jsonDict = JsonConverter.ParseJson(http.responseText)' 数据写入阶段On Error GoTo WriteErrorThisWorkbook.Sheets("Data").Range("A1").Value = jsonDict("price")Exit SubParseError:MsgBox "JSON解析错误:" & Err.Description, vbCriticalExit SubWriteError:MsgBox "数据写入失败:" & Err.Description, vbCriticalExit SubErrorHandler:MsgBox "发生运行时错误:" & Err.Description, vbCriticalExit Sub
End Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35467.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker的使用

时间&#xff1a;2025.3.17 一、当我们想要运行一个容器时&#xff0c;不是在containers处&#xff0c;而是需要在images处找对应容器的镜像 操作步骤&#xff1a; 1.找容器镜像 2.找到容器镜像&#xff0c;通过pull下载到当前主机中 3.下载成功后进行运行 4.运行时的容器镜像…

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…

Matlab 汽车传动系统的振动特性分析

1、内容简介 Matlab 186-汽车传动系统的振动特性分析 可以交流、咨询、答疑 2、内容说明 略 摘要&#xff1a;汽车动力传动系统是一个具有多自由度的、连续的、有阻尼系统。传动系统的振动主要有横向振动、扭转振动、纵向振动。并且汽车传动系统的扭转振动是一个非常重要的振…

【C++】树和二叉树的实现(上)

本篇博客给大家带来的是用C语言来实现数据结构树和二叉树的实现&#xff01; &#x1f41f;&#x1f41f;文章专栏&#xff1a;数据结构 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享&#xff01; 今日思想&#xff…

k8s环境部署

四台机器 分别是 k8s-master&#xff1a;172.25.254.100 k8s-node1&#xff1a;172.25.254.10 k8s-node2&#xff1a;172.25.254.20 docker-harbor&#xff1a;172.25.254.200 reg.timinglee.org 四台机器分别配置好网络和软件仓库 做好地址解析 scp -r /etc/hosts/ root17…

transformer bert 多头自注意力

输入的&#xff08;a1,a2,a3,a4&#xff09;是最终嵌入&#xff0c;是一个(512,768)的矩阵&#xff1b;而a1是一个token&#xff0c;尺寸是768 a1通过Wq权重矩阵&#xff0c;经过全连接变换得到查询向量q1&#xff1b;a2通过Wk权重矩阵得到键向量k2&#xff1b;q和k点乘就是值…

它,让机器人与HMI屏无缝对接

随着工业自动化向智能化发展&#xff0c;机器人与HMI屏的通信变得至关重要。本文将为您介绍一款创新的解决方案&#xff0c;它打破了通信协议的壁垒&#xff0c;实现机器人与HMI屏的无缝连接。 随着工业自动化向智能化的迈进&#xff0c;生产制造业正加速引入大量工业机器人以替…

MySQL 锁

MySQL中最常见的锁有全局锁、表锁、行锁。 全局锁 全局锁用于锁住当前库中的所有实例&#xff0c;也就是说会将所有的表都锁住。一般用于做数据库备份的时候就需要添加全局锁&#xff0c;数据库备份的时候是一个表一个表备份&#xff0c;如果没有加锁的话在备份的时候会有其他的…

win10 c++ VsCode 配置PCL open3d并显示

win10 c VsCode配置PCL open3d并显示 一、效果图二、配置步骤2.1 安装vscode2.2 pcl-open3d配置2.3 vscode中设置 三、测试代码四、注意事项及后续 一、效果图 二、配置步骤 2.1 安装vscode vscode下载链接 下载中文插件、c相关插件 2.2 pcl-open3d配置 1&#xff09;下载…

Python----计算机视觉处理(Opencv:图像颜色替换)

一、开运算 开运算就是对图像先进行腐蚀操作&#xff0c; 然后进行膨胀操作。开运算可以去除二值化图中的小的噪点&#xff0c;并分离相连的物体。 其主要目的就是消除那些小白点 在开运算组件中&#xff0c;有一个叫做kernel的参数&#xff0c;指的是核的大小&#xff0c;通常…

泰勒·斯威夫特(Taylor Swift)的音乐影响力与商业版图深度研究

泰勒斯威夫特的音乐影响力与商业版图深度研究 简介 泰勒斯威夫特&#xff08;Taylor Swift&#xff09;是当今流行音乐领域最具影响力的全球巨星之一。自少年时期出道以来&#xff0c;她在音乐风格、形象和商业战略上不断演变&#xff0c;从乡村音乐新人成长为引领流行文化的…

完全托管的DeepSeek-R1模型正式登陆Amazon Bedrock:安全部署与使用指南

文章目录 摘要一、核心优势&#xff1a;完全托管与企业级安全二、部署注意事项三、实践指南&#xff1a;从接入到调用四、支持区域与定价五、结语 摘要 DeepSeek-R1模型已在Amazon Bedrock平台正式上线&#xff0c;支持通过Bedrock Marketplace和自定义模型导入功能调用。 该模…

Matlab 汽车ABS实现模糊pid和pid控制

1、内容简介 Matlab 181-汽车ABS实现模糊pid和pid控制 可以交流、咨询、答疑 2、内容说明 略 实现汽车防抱死制动系统&#xff08;ABS&#xff09;的控制算法&#xff0c;通常涉及到传统的PID控制和模糊PID控制两种方法。下面将分别介绍这两种控制策略的基本概念以及如何在M…

Spring IOC(五个类注解)

controller、service、Repository、Component 、Configurationpackage com.java.ioc;import com.java.ioc.Controller.HelloController; import com.java.ioc.rep.UserRepository; import com.java.ioc.service.UserService; import org.springframework.boot.SpringApplicatio…

[Java实战]Spring Boot服务CPU 100%问题排查:从定位到解决

Spring Boot服务CPU 100%问题排查&#xff1a;从定位到解决 1. 引言 当Spring Boot服务出现CPU占用率100%时&#xff0c;系统性能会急剧下降&#xff0c;甚至导致服务不可用。本文将通过真实代码案例&#xff0c;详细讲解如何快速定位问题根源&#xff0c;并提供解决方案。无…

机器学习扫盲系列(2)- 深入浅出“反向传播”-1

系列文章目录 机器学习扫盲系列&#xff08;1&#xff09;- 序 机器学习扫盲系列&#xff08;2&#xff09;- 深入浅出“反向传播”-1 文章目录 前言一、神经网络的本质二、线性问题解析解的不可行性梯度下降与随机梯度下降链式法则 三、非线性问题激活函数 前言 反向传播(Ba…

LabVIEW 线性拟合

该 LabVIEW 程序实现了 线性拟合&#xff08;Linear Fit&#xff09;&#xff0c;用于计算给定一组数据点的斜率&#xff08;Slope&#xff09;和截距&#xff08;Intercept&#xff09;&#xff0c;并将结果可视化于 XY Graph 中。本案例适用于数据拟合、实验数据分析、传感器…

XSS漏洞靶场---(复现)

XSS漏洞靶场—&#xff08;复现&#xff09; 反射型 XSS 的特点是攻击者诱导用户点击包含恶意脚本的 URL&#xff0c;服务器接收到请求后将恶意脚本反射回响应页面&#xff0c;浏览器执行该脚本从而造成攻击&#xff0c;恶意脚本不会在服务器端存储。 Level 1(反射型XSS) 此漏…

优选算法系列(2.滑动窗口 _ 上)

目录 解法⼀&#xff08;暴力求解&#xff09;&#xff08;不会超时&#xff0c;可以通过&#xff09;&#xff1a;一.长度最小的子数组&#xff08;medium&#xff09; 题目链接209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 代码&#…

ELK(Elasticsearch、Logstash、Kbana)安装及Spring应用

Elasticsearch安装及Spring应用 一、引言二、基本概念1.索引&#xff08;Index&#xff09;2.类型&#xff08;Type&#xff09;3.文档&#xff08;Document&#xff09;4.分片&#xff08;Shard&#xff09;5.副本&#xff08;Replica&#xff09; 二、ELK搭建1.创建挂载的文件…