gpt4 book ai didi

arrays - Excel VBA 查找数组中的最后一个条目(但不在电子表格中)

转载 作者:行者123 更新时间:2023-12-04 21:54:17 27 4
gpt4 key购买 nike

我有一些 Excel 代码组合了一组文件名,然后循环并从中提取一些数据。数据不在电子表格本身中 - 它完全在 VBA 中组装。每个月都会添加新文件,因此数量会有所不同。

我的问题是正在工作的代码不再工作,我正在尝试找出解决方法。 (相关:Error: Microsoft Excel has stopped working - But I didn't change anything)

UBound 查找数组的大小。但是数组并没有完全填满数据。如何找到数组中最后一个有东西的项目?

我正在搜索并找到与在电子表格上查找项目数相关的答案,但这并没有真正使用工作表。看来 CountA 可能是我想要的,但是 Excel: Find last value in an array没有一个我可以弄清楚在我的情况下工作的例子。

换句话说,我想在下面的代码中使用除 UBound 之外的东西,所以我不会跳过其中包含某些内容的条目。

    FName = Array("april2010.xls", "feb2010.xls", "jan2010.xls", "july2010.xls", "june2010.xls", _
"mar2010.xls", "may2010.xls", "sep2010.xls", "..\FINAL-MO-BAL-2011\APRIL2011.xls", _
"..\FINAL-MO-BAL-2011\AUG2011.xls", "..\FINAL-MO-BAL-2011\DEC2011.xls", _
"..\FINAL-MO-BAL-2011\FEB2011.xls", "..\FINAL-MO-BAL-2011\JAN2011.xls", _
"..\FINAL-MO-BAL-2011\JULY2011.xls", "..\FINAL-MO-BAL-2011\JUNE2011.xls", _
"..\FINAL-MO-BAL-2011\MARCH2011.xls", "..\FINAL-MO-BAL-2011\MAY2011.xls", _
"..\FINAL-MO-BAL-2011\NOV2011.xls", "..\FINAL-MO-BAL-2011\OCT2011.xls", _
"..\FINAL-MO-BAL-2011\SEP2011.xls", FName2, FName3, FName4, FName5, FName6, _
FName7, FName8, FName9, FName10, FName11, FName12, FName13, FName14, FName15, _
FName16, FName17, FName18, FName19, FName20, FName21, FName22, FName23, FName24, _
FName25, FName26, FName27, FName28, FName29, FName30, FName31, FName32, FName33, _
FName34, FName35, FName36, FName37, FName38, , FName39, FName40, FName41, FName42, _
FName43, FName44, FName45, FName46, FName47, FName48, FName49)

If IsArray(FName) Then
Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
WorkbookName = ThisWorkbook.Name
rnum = 1
For Fnum = LBound(FName) To UBound(FName)
Set mybook = Nothing
On Error Resume Next
Set mybook = Workbooks.Open(Filename:=FName(Fnum), ReadOnly:=True)

With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
.CutCopyMode = False
.DisplayAlerts = False
.Visible = False
End With

On Error GoTo 0

If Not mybook Is Nothing Then
On Error Resume Next

最佳答案

使用 Filter功能

Dim fName As Variant
Dim fltName As Variant

fName = Array("april2010.xls", "feb2010.xls", "jan2010.xls", "july2010.xls", "june2010.xls", _
"mar2010.xls", "may2010.xls", "sep2010.xls", "..\FINAL-MO-BAL-2011\APRIL2011.xls", _
"..\FINAL-MO-BAL-2011\AUG2011.xls", "..\FINAL-MO-BAL-2011\DEC2011.xls", _
"..\FINAL-MO-BAL-2011\FEB2011.xls", "..\FINAL-MO-BAL-2011\JAN2011.xls", _
"..\FINAL-MO-BAL-2011\JULY2011.xls", "..\FINAL-MO-BAL-2011\JUNE2011.xls", _
"..\FINAL-MO-BAL-2011\MARCH2011.xls", "..\FINAL-MO-BAL-2011\MAY2011.xls", _
"..\FINAL-MO-BAL-2011\NOV2011.xls", "..\FINAL-MO-BAL-2011\OCT2011.xls", _
"..\FINAL-MO-BAL-2011\SEP2011.xls", "FName2", "FName3", "FName4", "FName5", "FName6", _
"FName7", "FName8", "FName9", "FName10", "FName11", "FName12", "FName13", "FName14", "FName15", _
"FName16", "FName17", "FName18", "FName19", "FName20", "FName21", "FName22", "FName23", "FName24", _
"FName25", "FName26", "FName27", "FName28", "FName29", "FName30", "FName31", "FName32", "FName33", _
"FName34", "FName35", "FName36", "FName37", "FName38", "", "FName39", "FName40", "FName41", "FName42", _
"FName43", "FName44", "FName45", "FName46", "FName47", "FName48", "FName49")

fltName = Filter(fName, ".")

Debug.Print LBound(fltName), UBound(fltName)

我不确定是什么 FName2 , FName3等应该是。您说有没有数据的数组元素,所以它们可能只是用于演示的占位符。

无论如何,我过滤了一个点,因此过滤掉了不是文件名的内容。您可能想要过滤不同的东西。

关于arrays - Excel VBA 查找数组中的最后一个条目(但不在电子表格中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47947079/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com