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复制行高?的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL中用VBA复制整行

vba怎么复制指定内容到指定工作表?

使用 Excel VBA 实现复制 粘贴 和保存,并自动运行VBA

用VBA编写复制功能,能不能只粘贴值,不粘贴格式

vba代码求助,将修改区域复制到数组中?

在 VBA 中复制数组引用