当前位置: 首页 > 知识库问答 >
问题:

从另一个工作簿调用宏时VBA代码退出循环

隆飞宇
2023-03-14

一旦进入,它从新打开的工作簿中调用另一个子例程,子例程运行良好(需要2-3分钟),但随后代码自动退出循环(我的意思是它不打开循环中的下一个文件)。是因为被调用宏的处理时间吗?我可以用一些关于这个问题的见解,这将是非常有帮助的。提前致谢:)

Public strFileName As String
Public strfilename2 As String
Public currentWB As Workbook
Public dataWB As Workbook

Sub GetData()
    Dim strListSheet As String
    Dim ws As Worksheet
    Dim Tabnames() As Variant
    Dim celladdress() As Variant
    Dim values() As Variant
    Dim tabcount As Integer
    Dim filecount As Integer
    Dim j As Integer
    Dim k As Integer
    Dim i As Integer

strListSheet = "Data_Specifics"

Sheets(strListSheet).Select
tabcount = WorksheetFunction.CountA(Rows(6)) - 1
filecount = WorksheetFunction.CountA(Columns(2)) - 4

ReDim Tabnames(0, 0 To tabcount - 1)
ReDim celladdress(0, 0 To tabcount - 1)
ReDim values(0 To filecount - 1, 0 To tabcount - 1)

For k = 0 To tabcount - 1
Tabnames(j, k) = ActiveWorkbook.Sheets(strListSheet).Cells(6, k + 4).Value
celladdress(j, k) = ActiveWorkbook.Sheets(strListSheet).Cells(7, k + 4).Value
Next k

For j = 0 To filecount - 1
    For k = 0 To tabcount - 1
        values(j, k) = ActiveWorkbook.Sheets(strListSheet).Cells(j + 9, k + 4).Value
    Next k
Next j
Range("B8").Select
i = -1

Set currentWB = ActiveWorkbook
Do While ActiveCell.Value <> ""

    strFileName = ActiveCell.Offset(1, 1)
    strfilename2 = ActiveCell.Offset(1, 0)

    Application.Workbooks.Open strFileName, UpdateLinks:=False, ReadOnly:=False
    Set dataWB = ActiveWorkbook

    i = i + 1
        For k = 0 To tabcount - 1
        Sheets(Tabnames(0, k)).Select
        Range(celladdress(0, k)).Select
        If values(i, k) <> "XXXXX" Then
        Selection.Value = values(i, k)
        Else
        End If
        Next k

        strfilename2 = "'" & strfilename2 & "'" & "!ValidateDataNew"
        Application.Run strfilename2
        dataWB.Close SaveChanges:=True

    currentWB.Activate
    Sheets(strListSheet).Select
    ActiveCell.Offset(1, 0).Select
    i = i
Loop
Exit Sub

末端接头

共有1个答案

柴文林
2023-03-14

为了确保错误来自validateDataNew宏,让我们首先删除sub getdata代码中可能存在的错误。

我们应该删除使用selectselectionActiveCell时可能出现的所有错误。相反,应使用完全限定的range对象。

用下面的代码替换do While activeCell.value<>“”循环:

Dim lRow As Long

Set currentWB = ActiveWorkbook
lRow = 8 ' start scanning from row 8

' use a loop with fully qualifed range, not select
Do While currentWB.Worksheets(strListSheet).Range("B" & lRow).Value <> ""

    strFileName = currentWB.Worksheets(strListSheet).Range("B" & lRow).Offset(1, 1)
    strfilename2 = currentWB.Worksheets(strListSheet).Range("B" & lRow).Offset(1, 0)

    Set dataWB = Workbooks.Open(strFileName, UpdateLinks:=False, ReadOnly:=False)

    i = i + 1
    For k = 0 To tabcount - 1
        If values(i, k) <> "XXXXX" Then
            dataWB.Worksheets(Tabnames(0, k)).Range(celladdress(0, k)).Value = values(i, k)
        Else
        End If
    Next k

    strfilename2 = "'" & strfilename2 & "'" & "!ValidateDataNew"
    Application.Run strfilename2

    dataWB.Close SaveChanges:=True
    Set dataWB = Nothing

    lRow = lRow + 1 ' advance the row by 1
Loop
 类似资料:
  • 当在列中单击文本“发送调查”时,我正在尝试从工作表“”上的活动行复制单元格b中的值,并将其粘贴到单元格中。A2在我的另一个工作簿“”上的“”表。 由于某种原因,我没有收到任何错误,但是没有任何内容被粘贴到我的其他工作簿的单元格A2中。 有人能告诉我哪里出了问题吗。提前感谢

  • 我试图实现一个简单的Excel-VBA宏,让用户在文件资源管理器中浏览另一个工作簿,然后将该工作簿中的某些单元格复制到我的活动工作簿中。下面是我的简短代码: 该宏用于从所选工作簿(B2:C43)复制单元格,并将其复制到当前工作簿“配置”表上的单元格(A6:B47)中。当我运行宏时,我得到“运行时错误'1004':Range类的PasteSpecial方法失败”。调试器突出显示行:

  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误

  • 我正试图将所有工作表(7张)从workbook1(wb1)复制到WB2。wb1包含命令按钮,但我不希望它们出现在我的新工作簿中。我正在使用循环将单个工作表从一个工作簿复制到另一个工作簿。但是复制到第二张时出错了。我使用的代码如下:- 循环第一次成功运行,但对于i=2,代码给出错误

  • 问题内容: 我需要根据通过Java从数据库中获取的数据生成Excel工作表。为此,我需要在生成Excel时调用一些VBA宏函数。有人可以帮助我如何从Java代码调用VBA宏吗? 问题答案: 我不太了解您从数据库中的数据生成Excel工作表的总体方法。通常,我会使用Vivek提出的Apache POI。 但是,如果您确实需要在工作表中调用Excel宏,则需要做两件事: 首先,您需要一个JAVA-CO

  • 本文向大家介绍使用VBA宏调用ABAP代码,包括了使用VBA宏调用ABAP代码的使用技巧和注意事项,需要的朋友参考一下 请尝试使用以下脚本-