Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 选择最后一个条目并按1行偏移,然后粘贴值不起作用_Excel_Copy Paste_Offset_Vba - Fatal编程技术网

Excel 选择最后一个条目并按1行偏移,然后粘贴值不起作用

Excel 选择最后一个条目并按1行偏移,然后粘贴值不起作用,excel,copy-paste,offset,vba,Excel,Copy Paste,Offset,Vba,此代码出现运行时错误1004 Sub LoopAllExcelFilesInFolder() 'PURPOSE: To loop through all Excel files in a user specified folder and perform a set task on them 'SOURCE: www.TheSpreadsheetGuru.com Dim wb As Workbook Dim myPath As String Dim myFile As String D

此代码出现运行时错误1004

Sub LoopAllExcelFilesInFolder()
'PURPOSE: To loop through all Excel files in a user specified folder and     perform a set task on them
'SOURCE: www.TheSpreadsheetGuru.com

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog




'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

'Retrieve Target Folder Path From User
  Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)

With FldrPicker
  .Title = "Select A Target Folder"
  .AllowMultiSelect = False
    If .Show <> -1 Then GoTo NextCode
    myPath = .SelectedItems(1) & "\"
End With

   'In Case of Cancel
NextCode:
  myPath = myPath
  If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")
  myExtension = "*.xls*"

'Target Path with Ending Extention
  myFile = Dir(myPath & myExtension)

    'Loop through each Excel file in folder
  Do While myFile <> ""
'Set variable equal to opened workbook
  Set wb = Workbooks.Open(Filename:=myPath & myFile)

'Ensure Workbook has opened before moving on to next line of code
  DoEvents

Dim LastRow As Long
Dim rng1 As Range
wb.Worksheets(1).Activate
Set rng1 = Range("B15:E81,N15:O81")

With ThisWorkbook.Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name
LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row ' get last row with data in column "E"
' paste
.Range("E" & LastRow + 1) = rng1
End With

'Save and Close Workbook
  wb.Close SaveChanges:=True

'Ensure Workbook has closed before moving on to next line of code
  DoEvents

'Get next file name
  myFile = Dir
  Loop

'Message Box when tasks are completed
  MsgBox "Task Complete!"

ResetSettings:
  'Reset Macro Optimization Settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub
Sub-LoopAllExcelFilesInFolder()
'用途:循环浏览用户指定文件夹中的所有Excel文件并对其执行设置任务
来源:www.TheSpreadsheetGuru.com
将wb设置为工作簿
将myPath设置为字符串
将myFile设置为字符串
Dim myExtension作为字符串
Dim FldrPicker As FILE对话框
'优化宏速度
Application.ScreenUpdating=False
Application.EnableEvents=False
Application.Calculation=xlCalculationManual
'从用户检索目标文件夹路径
Set FldrPicker=Application.FileDialog(msoFileDialogFolderPicker)
用FldrPicker
.Title=“选择目标文件夹”
.AllowMultiSelect=False
如果.Show-1,则转到下一个代码
myPath=.SelectedItems(1)和“\”
以
"如果取消,
下一个代码:
myPath=myPath
如果myPath=”“,则转到重置设置
'目标文件扩展名(必须包含通配符“*”)
myExtension=“*.xls*”
'具有结束扩展名的目标路径
myFile=Dir(myPath&myExtension)
'循环浏览文件夹中的每个Excel文件
当我的文件“”时执行此操作
'将变量设置为等于打开的工作簿
设置wb=Workbooks.Open(文件名:=myPath&myFile)
'在继续下一行代码之前,确保工作簿已打开
多芬特
最后一排一样长
变暗rng1 As范围
wb.工作表(1).激活
设置rng1=范围(“B15:E81,N15:O81”)

使用ThisWorkbook.Worksheets(“Sheet1”)您的代码段运行时不会出错。不过,您可能需要重新考虑该方法。使用激活和选择的代码速度慢且效率低。在大多数情况下,不需要激活和选择。对象可以直接寻址


有关避免选择和激活的技术,请参阅。

您的代码片段运行时不会出错。不过,您可能需要重新考虑该方法。使用激活和选择的代码速度慢且效率低。在大多数情况下,不需要激活和选择。对象可以直接寻址


有关避免选择和激活的技术,请参阅。

首先,正如@teylyn所建议的,您应该避免使用
选择
激活
(99.9%的时间不需要它们,它们所做的唯一“贡献”是浪费时间,因为代码运行时间更长)

第二个,您还应该指定要粘贴到
此工作簿
对象中的
工作表

代码

Dim LastRow As Long

wb.Worksheets(1).Range("B15:E81").Copy

With ThisWorkbook.Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name
    LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row ' get last row with data in column "E"

    ' paste
    .Range("E" & LastRow + 1).PasteSpecial Paste:=xlPasteValues
End With
Dim LastRow尽可能长
wb.工作表(1).范围(“B15:E81”).副本

使用此工作簿.工作表(“Sheet1”)首先,正如@teylyn所建议的,您应该避免使用
选择
激活
(99.9%的时间不需要它们,它们所做的唯一“贡献”是浪费时间,因为代码运行时间更长)

第二个,您还应该指定要粘贴到
此工作簿
对象中的
工作表

代码

Dim LastRow As Long

wb.Worksheets(1).Range("B15:E81").Copy

With ThisWorkbook.Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name
    LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row ' get last row with data in column "E"

    ' paste
    .Range("E" & LastRow + 1).PasteSpecial Paste:=xlPasteValues
End With
Dim LastRow尽可能长
wb.工作表(1).范围(“B15:E81”).副本

第三,使用
xlUp
而不是
xlDown
。(我很确定这是错误的根源,您在代码中自动修复了它,但忘记了将其作为可能的原因。)您的代码工作得很好,但在第三次文件操作后,使用pastevalue代码时遇到了错误。我用rng1=Range(“B15:E81”)来代替我使用@teylyn建议的帖子进行复制的方式。但是我如何粘贴到列E的下一个空单元格中?@Tyler行
范围(“E”&LastRow+1)。粘贴特殊粘贴:=xlPasteValues
在找到更新的
LastRow
后粘贴到下一个空行。我认为错误可能来自代码中的另一个地方。请分享代码的其他相关部分。您可以从上面的链接访问该模块。我将rng1添加到.Range(“E”&LastRow+1)=rng1,但什么也没有发生。您可以检查我从模块本身进行的编辑anyway@Tyler我可以;t从当前电脑访问Dropbox,抱歉第三,使用
xlUp
而不是
xlDown
。(我很确定这是错误的根源,您在代码中自动修复了它,但忘记了将其作为可能的原因。)您的代码工作得很好,但在第三次文件操作后,使用pastevalue代码时遇到了错误。我用rng1=Range(“B15:E81”)来代替我使用@teylyn建议的帖子进行复制的方式。但是我如何粘贴到列E的下一个空单元格中?@Tyler行
范围(“E”&LastRow+1)。粘贴特殊粘贴:=xlPasteValues
在找到更新的
LastRow
后粘贴到下一个空行。我认为错误可能来自代码中的另一个地方。请分享代码的其他相关部分。您可以从上面的链接访问该模块。我将rng1添加到.Range(“E”&LastRow+1)=rng1,但什么也没有发生。您可以检查我从模块本身进行的编辑anyway@Tyler我可以;抱歉,无法从当前电脑访问Dropbox