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