VBA代码,用于将非空白单元格从一张图纸复制到另一张图纸

VBA代码,用于将非空白单元格从一张图纸复制到另一张图纸,vba,excel,Vba,Excel,我试图编写一个VBA代码,将“非空白”单元格从一个文件复制到另一个文件。此代码选择最后一个非空行,但对于列,它正在将A4复制到AU。我想将列A4复制到LastcolumnNotblank和最后一行。因此,基本上将A4复制到(LastColumn)(LastRow)而不是空白 如果有人能帮忙编辑下面的代码,我将不胜感激。非常感谢 Sub Export_Template() '' TPD File_name = Application.GetSaveAsFilename(InitialFileN

我试图编写一个VBA代码,将“非空白”单元格从一个文件复制到另一个文件。此代码选择最后一个非空行,但对于列,它正在将
A4复制到AU
。我想将列
A4复制到LastcolumnNotblank
和最后一行。因此,基本上将
A4复制到(LastColumn)(LastRow)而不是空白

如果有人能帮忙编辑下面的代码,我将不胜感激。非常感谢

Sub Export_Template()

'' TPD

File_name = Application.GetSaveAsFilename(InitialFileName:="Engineering TPD", FileFilter:="Excel Files (*.xlsx), *.xlsx")

If File_name <> False Then

 Application.ScreenUpdating = False
 Application.DisplayAlerts = False

 LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

 For i = 4 To LastRow
 If Left(ActiveSheet.Range("A" & i).Value, 1) <> "" Then lastactiverow = i
 Next i
   'MsgBox (lastactiverow)
    ActiveSheet.Range("A4:AU" & lastactiverow).Select
    Selection.Copy

Set NewBook = Workbooks.Add

ActiveSheet.Range("A1").PasteSpecial xlPasteValues

    ActiveWorkbook.SaveAs Filename:=File_name, FileFormat:=51

    ActiveWorkbook.Close (False)

End If
End Sub
子导出_模板()
“TPD
文件名=应用程序.GetSaveAsFilename(初始文件名:=“工程TPD”,文件过滤器:=“Excel文件(*.xlsx),*.xlsx”)
如果文件名为False,则
Application.ScreenUpdating=False
Application.DisplayAlerts=False
LastRow=ActiveSheet.Cells(Rows.Count,“A”).End(xlUp).Row
对于i=4到最后一行
如果左(ActiveSheet.Range(“A”&i.Value,1)”,则lastactiverow=i
接下来我
'MsgBox(lastactiverow)
ActiveSheet.Range(“A4:AU”和lastactiverow)。选择
选择,复制
Set NewBook=工作簿。添加
ActiveSheet.Range(“A1”).Paste特殊XLPaste值
ActiveWorkbook.SaveAs文件名:=文件名,文件格式:=51
ActiveWorkbook.Close(False)
如果结束
端接头
  • 我假设
    列A
    是一个很好的指示器,指示在哪里可以找到上次使用的行
  • 还假设
    行1
    是查找上次使用的列的良好指示器
  • 您需要将代码第三行的
    Sheet1
    更改为包含要复制数据的工作表的名称
  • 您需要声明变量(使用
    选项Explicit
  • 避免
    。选择
    。选择
    要不惜一切代价(在下面的解决方案中找不到)
  • 您没有重新启用
    屏幕更新
    显示警报
  • 这是经过测试的,可以正常工作

  • 选项显式
    子导出_模板()
    将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)
    将新书本作为工作簿
    变暗LRow尽可能长,LCol尽可能长
    暗文件名
    FileName=Application.GetSaveAsFilename(InitialFileName:=“工程TPD”,FileFilter:=“Excel文件(*.xlsx),*.xlsx”)
    如果文件名为False,则
    Application.ScreenUpdating=False
    Application.DisplayAlerts=False
    Set NewBook=工作簿。添加
    LRow=ws.Range(“A”&ws.Rows.Count).End(xlUp).Row
    LCol=ws.Cells(1,ws.Columns.Count).End(xlToLeft).Column
    ws.Range(ws.Cells(4,1),ws.Cells(LRow,LCol)).Copy
    NewBook.Sheets(1).范围(“A1”).粘贴特殊XLPaste值
    NewBook.SaveAs文件名:=文件名,文件格式:=51
    NewBook,关闭False
    Application.ScreenUpdating=True
    Application.DisplayAlerts=True
    如果结束
    端接头
    
    下面的代码将保留您的
    ActiveSheet
    范围,并使用
    SaveAs
    以您的特定名称保存到新工作簿,而不需要任何额外的废话。它删除除
    活动工作表
    之外的所有工作表,并删除前三行,然后使用
    另存为
    保存到
    此工作簿.路径
    。将不会更改启用宏的工作簿。 由于明显的问题,我实际上不喜欢使用
    ActiveSheet
    ,但因为您在使用它,所以我保留了它。我建议您使用工作表的名称

    Sub SaveActiveSheetRangeAsNewWorkbook()
    Dim ws As Worksheet
    
    Application.DisplayAlerts = False
    
        With ThisWorkbook
            For Each ws In Application.ThisWorkbook.Worksheets
                If ws.Name <> ActiveSheet.Name Then
                    ws.Delete
                End If
            Next
    
            .Sheets(1).Range("A1:A3").EntireRow.Delete
            .SaveAs Filename:="Engineering TPD", FileFormat:=xlOpenXMLWorkbook
        End With
    
    Application.DisplayAlerts = True
    
    End Sub
    
    Sub-SaveActiveSheetRangeAsNewWorkbook()
    将ws设置为工作表
    Application.DisplayAlerts=False
    使用此工作簿
    对于Application.ThisWorkbook.Worksheets中的每个ws
    如果是ws.Name ActiveSheet.Name,那么
    ws.Delete
    如果结束
    下一个
    .表(1).范围(“A1:A3”).EntireRow.Delete
    .SaveAs文件名:=“工程TPD”,文件格式:=xlOpenXMLWorkbook
    以
    Application.DisplayAlerts=True
    端接头
    
    lmk如果下面的解决方案对您有效,非常感谢您的回复@urderboy,我复制粘贴了您的代码,但它不起作用,我收到一个错误“对象范围失败”,它在“ws.Range(单元格(4,1),单元格(LRow,LCol))。copy”上高亮显示黄色。我还注意到“Option Explicit”可能不在正确的位置?是的,你所有的假设都是正确的。再次感谢。您是否更改了#3中提到的工作表名称。选项explicit在正确的位置我发现了错误。未限定单元格对象。再试一次-应该可以
    Sub SaveActiveSheetRangeAsNewWorkbook()
    Dim ws As Worksheet
    
    Application.DisplayAlerts = False
    
        With ThisWorkbook
            For Each ws In Application.ThisWorkbook.Worksheets
                If ws.Name <> ActiveSheet.Name Then
                    ws.Delete
                End If
            Next
    
            .Sheets(1).Range("A1:A3").EntireRow.Delete
            .SaveAs Filename:="Engineering TPD", FileFormat:=xlOpenXMLWorkbook
        End With
    
    Application.DisplayAlerts = True
    
    End Sub