ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 有什么高难度的VBA需求,尽管冲我来-我的小助手ChatGPT将尽快帮助你

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-4 21:06 | 显示全部楼层 |阅读模式
这是论坛一位朋友的求助:用VBA绘制wav音频的波形图或频谱图

下面是我的小助手生成的代码,未做任何修改。虽然有点bug(居然想把长度2000万的数组写入工作表),但已经非常了不起了。
  1. Sub PlotWaveform()
  2.   Dim WaveFile As String
  3.   Dim Data() As Integer
  4.   Dim i As Long

  5.   'prompt the user for the file name
  6.   WaveFile = Application.GetOpenFilename("WAV Files (*.wav), *.wav")

  7.   'read the wave file into an array
  8.   Open WaveFile For Binary Access Read As #1
  9.   ReDim Data(LOF(1) \ 2 - 1) As Integer
  10.   For i = 0 To UBound(Data)
  11.     Get #1, , Data(i)
  12.   Next i
  13.   Close #1

  14.   'plot the waveform in a chart
  15.   With Worksheets.Add
  16.     With .Range("A1").Resize(UBound(Data) + 1)
  17.       .Value = Application.Transpose(Data)
  18.       With .Parent.Shapes.AddChart2(251, xlLine, .Left, .Top, .Width, .Height).Chart
  19.         .SetSourceData Source:=.Range("A1").Resize(UBound(Data) + 1)
  20.         .Axes(xlCategory).MajorUnit = (UBound(Data) + 1) \ 10
  21.         .Axes(xlValue).MinimumScale = -32768
  22.         .Axes(xlValue).MaximumScale = 32767
  23.       End With
  24.     End With
  25.   End With
  26. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-4 21:10 | 显示全部楼层
这是一段由AI自动生成的VBA高端应用:VBA实现人脸识别
  1. Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" _
  2. Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, _
  3. ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, _
  4. ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, _
  5. ByVal nID As Long) As Long

  6. Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, _
  7. ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _
  8. ByVal cbVer As Integer) As Boolean

  9. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
  10. ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

  11. Private Const WM_CAP_DRIVER_CONNECT = &H40A
  12. Private Const WM_CAP_DRIVER_DISCONNECT = &H40B
  13. Private Const WM_CAP_SET_PREVIEW = &H432
  14. Private Const WM_CAP_SET_PREVIEWRATE = &H434
  15. Private Const WM_CAP_SET_SCALE = &H432
  16. Private Const WM_CAP_START = &H400

  17. Dim hCap As Long

  18. Sub StartPreview()
  19.     hCap = capCreateCaptureWindow("", WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, Me.hwnd, 0)
  20.     If SendMessage(hCap, WM_CAP_DRIVER_CONNECT, 0, 0) Then
  21.         SendMessage hCap, WM_CAP_SET_SCALE, True, 0
  22.         SendMessage hCap, WM_CAP_SET_PREVIEWRATE, 66, 0
  23.         SendMessage hCap, WM_CAP_SET_PREVIEW, True, 0
  24.         SendMessage hCap, WM_CAP_START, 0, 0
  25.     End If
  26. End Sub

  27. Sub StopPreview()
  28.     If hCap Then
  29.         SendMessage hCap, WM_CAP_DRIVER_DISCONNECT, 0, 0
  30.     End If
  31. End Sub
复制代码


使用该代码可以在VBA窗口中实现摄像头预览功能,但并不支持获取摄像头捕获的图像数据。如果需要处理图像,可以使用其他技术,如DirectX或OpenCV等,获取摄像头数据并进行处理。
以下是使用OpenCV实现的代码示例:
  1. Sub StartPreviewWithOpenCV()
  2.     Dim cap As New cv2.VideoCapture(0) ' 0表示第一个摄像头
  3.     If Not cap.IsOpened() Then
  4.         MsgBox "摄像头未打开!"
  5.         Exit Sub
  6.     End If
  7.     Dim frame As cv2.Mat
  8.     Do
  9.         cap.Read(frame)
  10.         If Not frame.Empty() Then
  11.             ' 处理图像
  12.             ' ...
  13.         End If
  14.     Loop Until frame.Empty()
  15.     cap.Release()
  16. End Sub
复制代码


这是一个使用OpenCV库读取摄像头数据并处理图像的简单示例。需要注意的是,需要在VBA中使用OpenCV需要先安装OpenCV的COM组件并在VBA中导入相关类型库。

TA的精华主题

TA的得分主题

发表于 2023-2-5 09:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 opiona 于 2023-2-5 09:18 编辑

这个可以有
但是以后就业形式更严峻了


单项功能估计以后都是机器人完成了
码农只能做些做功能整合的工作了

TA的精华主题

TA的得分主题

发表于 2023-2-5 09:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
https://club.excelhome.net/thread-1651345-1-1.html
这个问题真需要你的小助手来完成。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-5 10:30 来自手机 | 显示全部楼层
我也有个问题,是网友在下帖33楼提出的,要修改listview控件的网格线样式和颜色,我没有深入研究过,不懂怎么实现,借用下你的神器解答一下。

https://club.excelhome.net/thread-1428537-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-5 11:25 | 显示全部楼层
蓝桥玄霜 发表于 2023-2-5 09:56
https://club.excelhome.net/thread-1651345-1-1.html
这个问题真需要你的小助手来完成。

这个问题AI没有解出来

TA的精华主题

TA的得分主题

发表于 2023-2-5 11:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
__虽然有点bug(居然想把长度2000万的数组写入工作表),但已经非常了不起了。

補風捉影?  繪聲繪影??  
代碼程序沒有什麼"了不起", 重點//正確性+可驗證...只要有誤差, 跟本"起不了"作用


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-5 11:35 | 显示全部楼层
ivccav 发表于 2023-2-5 10:30
我也有个问题,是网友在下帖33楼提出的,要修改listview控件的网格线样式和颜色,我没有深入研究过,不懂怎 ...

我没有认真看原帖,我的提问是“在VBA中,如何修改listview控件网格线样式和颜色”,下面是AI给出的答案。或许你可以提出更明确的要求
————————————
在VBA中,您可以使用ListView控件的GridLines属性来更改网格线样式,并使用GridLinesColor属性来更改网格线颜色。

以下是示例代码:

ListView1.GridLines = True '启用网格线
ListView1.GridLinesColor = RGB(0, 0, 255) '设置网格线颜色为蓝色

请注意,您需要先在Microsoft Windows Common Controls 6.0 (SP6)中添加引用,才能在VBA中使用ListView控件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-5 11:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ivccav 发表于 2023-2-5 10:30
我也有个问题,是网友在下帖33楼提出的,要修改listview控件的网格线样式和颜色,我没有深入研究过,不懂怎 ...

我换了个提问方式“如何让listview控件,隔行或者隔列显示不一样的颜色”,下面是AI给出的答案
  1. Private Sub ListView1_DrawItem(ByVal Item As MSComctlLib.ListItem)
  2.      Dim Brush As Long
  3.     ' 如果当前项的索引为偶数,则使用淡灰色
  4.     If Item.Index Mod 2 = 0 Then
  5.         Brush = RGB(192, 192, 192)
  6.     Else
  7.         Brush = RGB(255, 255, 255)
  8.     End If

  9.    ' 设置当前项的背景色
  10.    Item.BackColor = Brush
  11. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-2-5 12:53 | 显示全部楼层
hnsd24 发表于 2023-2-5 11:35
我没有认真看原帖,我的提问是“在VBA中,如何修改listview控件网格线样式和颜色”,下面是AI给出的答案 ...


运行不了的,因为Listview没有GridLinesColor这个属性。

你那个隔行换色的代码也是无法操作的。

我的感觉是ChatGPT回答不了人类未写过的代码。

它能提供一些似是而非的回答,可能能给提问者一些灵感

当然了,论坛里的提问,多数都是很水的,绝大部分都是有现成答案的,用ChatGPT是个不错的选择
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 10:21 , Processed in 0.045620 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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