【问题标题】:How to perform 'insert rows' instead of 'copy rows' using CopyFromRecordset(excel vba)如何使用 CopyFromRecordset(excel vba)执行“插入行”而不是“复制行”
【发布时间】:2013-07-09 12:43:51
【问题描述】:

我是 excel VBA 的新手。我有一个要求,我必须将表值从 sql server 2005 复制到 Excel 工作表。我已经用谷歌搜索并为上述要求编写了代码(如下所列)。

在此 Excel 表中,有一组固定的行显示图例和日期。这些行应在打印数据库/表值后显示。当我使用 .CopyFromRecordset 将记录从记录集中复制到 Excel 工作表时,显示图例和日期的行将被数据库/表值覆盖。请让我知道如何执行插入行而不是复制。或者有什么办法可以达到上述目的。

---代码------------

Sub GETSQLSERVERDATA()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim USERID As String
Dim rs As ADODB.Recordset

Set rs = New ADODB.Recordset

USERID = Range("C1").Value 'Input form excel template.
Server_Name = "" 'Enter server name
Database_Name = "" 'Enter database name
User_ID = "" 'SQL server user id
Password = "" SQL server password

SQLStr = "SELECT END_DATE,PERIOD FROM PERIOD_MAP WHERE USERID='" + USERID + "'"

Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"  
rs.Open SQLStr, Cn, adOpenStatic

With Worksheets("Sheet1").Range("A2:D2") ' Enter your sheet name and range here
    .ClearContents
    .CopyFromRecordset rs
End With

rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub

【问题讨论】:

  • 在运行.CopyFromRecordset method 之前,您需要检查rs variable 中的行数。然后在之前插入适当数量的行,然后运行该方法...

标签: vba excel excel-2007 export-to-excel


【解决方案1】:

您可以在复制 rs 之前插入行吗?

Worksheets("Sheet1").Rows(Worksheets("Sheet1").Range("A2:D2").Row).Insert _
            Shift:=xlDown, _
            CopyOrigin:=xlFormatFromLeftOrAbove

【讨论】:

  • 就像@KazJaw 提到的那样,在记录集中插入与记录一样多的行。
  • 感谢 KazJaw 和 @Raybarg 的帮助。现在我可以插入记录了。
猜你喜欢
  • 2023-01-14
  • 2012-05-07
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多