如何用VBA将SQL Server不定行列数据导入Excel(Windows身份验证)
关键代码片段
1. Windows身份验证连接SQL Server的核心逻辑
无需手动输入用户名密码,通过Windows身份验证直接对接SQL Server:
' 后期绑定方式,无需提前引用库 Dim conn As Object Set conn = CreateObject("ADODB.Connection") ' 替换为你的SQL服务器名和目标数据库名 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=你的SQL服务器名;Initial Catalog=目标数据库名;Trusted_Connection=Yes;" conn.Open ' 执行查询获取数据示例 Dim rs As Object Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM 需要导出的表名", conn
2. 无剪贴板直接导出不确定行列的SQL数据
绕过剪贴板粘贴的报错问题,直接把查询结果写入工作表,自动适配数据的行列范围:
' 创建新工作表 Dim newSheet As Worksheet Set newSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) newSheet.Cells.NumberFormat = "@" ' 全局设置单元格为文本格式 ' 写入表头 Dim colIndex As Integer For colIndex = 0 To rs.Fields.Count - 1 newSheet.Cells(1, colIndex + 1).Value = rs.Fields(colIndex).Name Next colIndex ' 自动写入所有数据(无需担心行列数不确定) newSheet.Range("A2").CopyFromRecordset rs ' 释放资源 rs.Close conn.Close Set rs = Nothing Set conn = Nothing
3. 修正现有剪贴板粘贴的错误处理
如果必须保留剪贴板粘贴的方式,增加有效性检查并明确粘贴类型:
' 检查剪贴板是否包含可识别的数据 Dim dataObj As Object Set dataObj = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") If dataObj.GetFormat(1) Then Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False ' 清除剪贴板状态 Else MsgBox "剪贴板中无有效数据" End If
内容的提问来源于stack exchange,提问作者tester12341234
相关产品推荐
相关产品推荐

