7,786
社区成员
发帖
与我相关
我的任务
分享
参考这一句:
arrDataList(lListPnt).Comment(k) = objDocSht.Cells(i, 3).Value
这儿 objDocSht.Cells(i, 3).Value 就是取之前指定工作表的“第i行、第3列(C列)的值”。
你如果要取第4列(D列),把3改成4就行了。1对应A列,2对应B列……其它类推。
这个 .Value,就是表示取单元格的“结果”,如果单元格实际是填入的“公式”,那么就是“公式计算结果”。
注意一下,“日期、时间”取出来可能是“一个数值”(猜测的,你可以自己验证一下),
这种情况下如果要取“日期、时间文本”,你可以试下把 .Value改为 .Text 。

Option Explicit
Private Type DataInfo
Comment() As String
ID_List() As String
Title As String
MaxSN As Long
End Type
Private arrDataList() As DataInfo
Private mlListMaxSN As Long
Private mlListMaxUBD As Long
Private Sub LoadData()
Dim objExcel As Object
Dim objDocWBK As Object
Dim objDocSht As Object
Dim strName As String
Dim strTemp As String
Dim lPartID As Long
Dim lNullCount As Long
Dim lListPnt As Long
Dim i&, k&, w As Long
mlListMaxSN = -1&
On Error GoTo E_FinalExit
Set objExcel = CreateObject("Excel.Application")
' 从哪个文档加载数据,按你的实际情况更改:
Set objDocWBK = objExcel.Workbooks.Open("E:\Temp\数据信息.xlsx", True)
Set objDocSht = objDocWBK.Sheets("Sheet1")
mlListMaxUBD = 7&
ReDim arrDataList(mlListMaxUBD)
strName = vbLf ' 随便设置一个“不可能”且不为空的初值
lPartID = 0&
lListPnt = -1&
lNullCount = 0&
i = 1& ' 数据从“第1行”开始
Do
strTemp = objDocSht.Cells(i, 1).Value
If ("" = strTemp) Then
lNullCount = 1& + lNullCount
If (5& = lNullCount) Then ' 检测到“连续5个空行”判定数据结束
mlListMaxSN = lListPnt
arrDataList(lListPnt).MaxSN = k
Exit Do
End If
Else
lNullCount = 0&
If (strTemp <> strName) Then
If (-1& < lListPnt) Then arrDataList(lListPnt).MaxSN = k
strName = strTemp
lListPnt = 1& + lListPnt
If (lListPnt > mlListMaxUBD) Then
mlListMaxUBD = 4& + mlListMaxUBD
ReDim Preserve arrDataList(mlListMaxUBD)
End If
k = 0&: w = 7&
ReDim arrDataList(lListPnt).ID_List(w)
ReDim arrDataList(lListPnt).Comment(w)
arrDataList(lListPnt).Title = strName
Else
k = 1& + k
If (k > w) Then
w = 8& + w
ReDim Preserve arrDataList(lListPnt).Comment(w)
ReDim Preserve arrDataList(lListPnt).ID_List(w)
End If
End If
arrDataList(lListPnt).ID_List(k) = objDocSht.Cells(i, 2).Value
arrDataList(lListPnt).Comment(k) = objDocSht.Cells(i, 3).Value
End If
i = 1& + i
Loop
E_FinalExit:
Set objDocSht = Nothing
Call objDocWBK.Close(False)
Set objDocWBK = Nothing
Call objExcel.Quit
Set objExcel = Nothing
End Sub
在Private Sub LoadData( ) 中,有个变量声明: Dim lListPnt As String
这个输入失误,正确的应该是: Dim lListPnt As Long
传了代码之后,偶然发现,不过我已经关了浏览器,在弄别的东西了,就没说这个。
不过,不好用文字来描述,给你写了个简单的示例,自己下载来看看吧。
注意代码中的“文件路径”需要按你的实际情况更改一下。
我用的绝对路径,你也可以改来用“相对路径”。
但如果“相对路径”是相对于App.Path,要注意用“双击工程文件”方式打开,否则在IDE中运行时“相对关系”不一定正确。
代码在百度网盘:
链接: https://pan.baidu.com/s/1c168Oog
密码: 785w