一旦进入,它从新打开的工作簿中调用另一个子例程,子例程运行良好(需要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
末端接头
为了确保错误来自validateDataNew
宏,让我们首先删除sub getdata
代码中可能存在的错误。
我们应该删除使用select
、selection
和ActiveCell
时可能出现的所有错误。相反,应使用完全限定的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
我试图实现一个简单的Excel-VBA宏,让用户在文件资源管理器中浏览另一个工作簿,然后将该工作簿中的某些单元格复制到我的活动工作簿中。下面是我的简短代码: 该宏用于从所选工作簿(B2:C43)复制单元格,并将其复制到当前工作簿“配置”表上的单元格(A6:B47)中。当我运行宏时,我得到“运行时错误'1004':Range类的PasteSpecial方法失败”。调试器突出显示行:
当在列中单击文本“发送调查”时,我正在尝试从工作表“”上的活动行复制单元格b中的值,并将其粘贴到单元格中。A2在我的另一个工作簿“”上的“”表。 由于某种原因,我没有收到任何错误,但是没有任何内容被粘贴到我的其他工作簿的单元格A2中。 有人能告诉我哪里出了问题吗。提前感谢
我正试图将所有工作表(7张)从workbook1(wb1)复制到WB2。wb1包含命令按钮,但我不希望它们出现在我的新工作簿中。我正在使用循环将单个工作表从一个工作簿复制到另一个工作簿。但是复制到第二张时出错了。我使用的代码如下:- 循环第一次成功运行,但对于i=2,代码给出错误
试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误
问题内容: 我需要根据通过Java从数据库中获取的数据生成Excel工作表。为此,我需要在生成Excel时调用一些VBA宏函数。有人可以帮助我如何从Java代码调用VBA宏吗? 问题答案: 我不太了解您从数据库中的数据生成Excel工作表的总体方法。通常,我会使用Vivek提出的Apache POI。 但是,如果您确实需要在工作表中调用Excel宏,则需要做两件事: 首先,您需要一个JAVA-CO
本文向大家介绍使用VBA宏调用ABAP代码,包括了使用VBA宏调用ABAP代码的使用技巧和注意事项,需要的朋友参考一下 请尝试使用以下脚本-