gpt4 book ai didi

VBA循环通过文件夹公式粘贴问题

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

我写了一个宏,它可以成功地遍历一个文件夹,将信息复制并粘贴到一个新的工作簿中,并插入三个公式。但是,我遇到了一些问题,我调用的某些宏中的索引函数显示不正确。

Sub LoopAllExcelFilesInFolder()

Application.ScreenUpdating = False

Dim MyFolder As String
Dim MyFile As String
MyFolder = "C:\Users\myname\Desktop\Test Files"
MyFile = Dir(MyFolder & "\*.xlsx")

'This is where my loop code starts
Do While MyFile <> ""
Workbooks.Open Filename:=MyFolder & "\" & MyFile, UpdateLinks:=0
Sheets("Report").Activate
Sheets("Report").Cells.Select
Application.CutCopyMode = False
Application.DisplayAlerts = False
Selection.Copy
ActiveWorkbook.Close True
Windows("Database Loop Test.xlsm").Activate
Sheets("PORT").Activate
Range("A1").Select
ActiveSheet.Paste
'It is successfully pasted to the desired workbook

'Here I call macros that insert sum, mid, and index functions. Sum and mid work but index doesn't
Call icvba
Call iovba
Call idvba

MyFile = Dir
Loop
End Sub

奇怪的是,当我在运行宏后检查索引函数时,它们都是正确的。它没有显示正确的数字,而是显示为#N/A。这是我正在调用的宏的代码。这三个的代码都是一样的;只有工作表正在更改。
Sub icvba()

Worksheets("COMMIT").Activate

Dim source As Worksheet
Dim detntn As Worksheet
Dim EmptyColumn As Long
Dim LastRow As Long

Set source = Sheets("vlookup")
Set detntn = Sheets("COMMIT")

LastColumn = detntn.Cells(1, detntn.Columns.Count).End(xlToLeft).Column
LastRow = Worksheets("COMMIT").Range("A:A").Rows.Count


'This if statement inputs the troublesome index function
If detntn.Range("A2") <> "" Then
EmptyColumn = LastColumn + 1
detntn.Cells(3, EmptyColumn).Formula = "=INDEX(PORT!$S$5:$S$4000,MATCH(COMMIT!$G3,PORT!$G$5:$G$4000,0))"
LastRow = ActiveSheet.UsedRange.Rows.Count
detntn.Cells(3, EmptyColumn).AutoFill destination:=detntn.Range(detntn.Cells(3, EmptyColumn), detntn.Cells(LastRow, EmptyColumn))
End If


'This if statement inputs the mid function
If detntn.Range("A2") <> "" Then
detntn.Cells(2, EmptyColumn).Formula = "=MID(PORT!$A$2,7,50)"
End If


'This if statement inputs a sum function
If detntn.Range("A2") <> "" Then
Worksheets("vlookup").Activate
ActiveSheet.Range("A1").Select
Selection.Copy
Worksheets("COMMIT").Activate
detntn.Cells(1, EmptyColumn).Select
Selection.PasteSpecial Paste:=xlAll
End If

Columns(EmptyColumn).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False

End Sub

此外,当我单独调用 icvba、iocba、idvba 宏时,它们运行良好。只有当我在循环函数中调用它们时,它们才会停止工作。

这是我用 VBA 编写的第一个循环,所以我可能遗漏了一些简单的东西。我只是不知道我要去哪里错了。任何帮助将非常感激!

最佳答案

听起来公式还没有计算出来——试着在最后复制粘贴特殊之前把这个放在:

Not_Calculated: 
Application.Wait(Now + TimeValue("0:00:04")) if not
Application.CalculationState = xlDone then goto Not_Calculated

这基本上会暂停宏继续进行 4 秒以允许计算完成,如果它仍然没有再等待 4 秒

关于VBA循环通过文件夹公式粘贴问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058068/

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