VBA复制行高?
Posted
技术标签:
【中文标题】VBA复制行高?【英文标题】:VBA copy row height? 【发布时间】:2016-03-11 16:38:46 【问题描述】:我有一个用 excel 2003 制作的电子表格(保存为启用宏的 2007 .xlsm 电子表格),它使用查询从 SQL 获取数据。我已将电子表格设为只读,因此用户不会弄乱我的工作,并使用以下代码仅将主电子表格中的值复制到新电子表格中
Sub NewWB()
Dim wbNew As Workbook
Dim wbThis As Workbook
Dim rng As Range
Dim wbName As String
Dim Pic As Picture
wbName = ThisWorkbook.Name
Set wbThis = Application.Workbooks(wbName)
Set rng = wbThis.Worksheets("Report").Range("C1:AZ65336")
Set wbNew = Workbooks.Add(xlWBATWorksheet)
Set Pic = wbThis.Worksheets("Report").Pictures("Picture 2")
With Pic
With .ShapeRange
.ScaleHeight 1#, msoScaleFromTopLeft
.ScaleWidth 1#, msoScaleFromTopLeft
End With
End With
rng.Copy
With wbNew
.Worksheets(1).Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
.Worksheets(1).Range("A1").PasteSpecial Paste:=8
.Worksheets(1).Range("A1").PasteSpecial xlPasteFormats
Pic.Copy
.Worksheets(1).Paste
.SaveAs Filename:=wbThis.Path & "\" & Left(wbName, InStr(wbName, ".") - 1) & _
Format(Date, "_yyyy-mm-dd"), _
FileFormat:=xlWorkbookNormal
End With
' wbThis.Close
End Sub
它可以很好地解决一个小问题。它不会复制我的行高,因此我复制的徽标最终会覆盖部分数据!让我难以置信的是,有一种方法可以直接复制列,但无法复制行。
我还需要做什么才能复制行高,我正在处理文档的前 100 行。
【问题讨论】:
您可以遍历前 100 行并在目标工作表中设置行高。 exceltip.com/cells-ranges-rows-and-columns-in-vba/… 有什么理由不能只删除前两行然后复制整个工作表吗? 【参考方案1】:我做了两个新变量
Dim rngNew as Range
Dim x As Integer
并编辑了我的“With wbNew”部分以具有以下代码
With wbNew
.Worksheets(1).Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 'Paste only the values and how the values are formatted
.Worksheets(1).Range("A1").PasteSpecial Paste:=8 ' Paste the column widths
.Worksheets(1).Range("A1").PasteSpecial xlPasteFormats ' Paste cell formats (boarders, colors, etc)
x = 1
For Each rngNew In .Worksheets(1).Range("A1:A100") ' Set the range in the new worbook
rngNew.EntireRow.RowHeight = wbThis.Worksheets("Report").Range("A" & CStr(x)).RowHeight 'Each row in the new workbook equals the equivilant row in the first workbook
x = x + 1
Next
Pic.Copy ' Copy the logo
.Worksheets(1).Paste ' Paste the Logo
.SaveAs Filename:=wbThis.Path & "\" & Left(wbName, InStr(wbName, ".") - 1) & _
Format(ReportDate, "_yyyy-mm-dd"), _
FileFormat:=xlWorkbookNormal ' Save the workbook as a generic .xls
End With
它比我希望的要粗略,它假设我从第一行开始(这对我正在做的事情来说很好),但除非有更好的答案,否则它会起作用。
【讨论】:
以上是关于VBA复制行高?的主要内容,如果未能解决你的问题,请参考以下文章