【发布时间】:2015-05-04 12:34:56
【问题描述】:
我有一个报告要生成,我在 sheet1 中有一个命令按钮。每次单击按钮时,我都编写了一些 VB 代码来创建一个新的 excel 工作簿,然后在那里转储 SQL 查询结果。 但是我的经理想要的是,我第一次单击按钮时,应该通过打开一个新工作簿来转储数据,但连续单击应该将数据转储到同一个工作簿但新工作表中。这应该会发生,直到我使用命令按钮关闭 Excel 工作表。
下次我再次使用命令按钮打开此 excel 时,数据应在第一次单击时转储到新工作簿中,但对于连续单击,数据应导出到新工作表。 请在此处找到我的代码:
Option Explicit
Option Base 1
Private Sub CommandButton1_Click()
Call Ora_connection
ThisWorkbook.Activate
End Sub
Public Sub Ora_connection()
Dim oconn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
Dim i As Integer
Dim xla As New Excel.Application
Dim xlw As New Excel.Workbook
Dim xlws As Excel.Worksheet
strSQL = ' SQL SELECT here1
Set oconn = New ADODB.Connection
oconn.Open "Provider=OraOLEDB.Oracle;Data Source=" & Sheet1.TextBox3.Text & ";User Id=" & Sheet1.TextBox4.Text & ";Password=" & Sheet1.TextBox5.Text & ";"
'-----------------------------------------------------------------------------------
'Open the recordset
rs.CursorType = adOpenStatic
rs.CursorLocation = adUseClient
rs.LockType = adLockOptimistic
rs.Open strSQL, oconn, adOpenStatic
'open new workbook and export the data
Set xla = New Excel.Application
xla.Visible = True
Set xlw = xla.Workbooks.Add
xlw.Activate
Set xlws = xlw.ActiveSheet
'to copy the header of the table
With xlws.Range("A2")
For i = 0 To rs.Fields.Count - 1
xlws.Cells(1, i + 1) = rs.Fields(i).Name
Next i
'.ClearContents
.CopyFromRecordset rs
End With
On Error Resume Next
rs.Close
oconn.Close
If Not rs Is Nothing Then Set rs = Nothing
If Not oconn Is Nothing Then Set oconn = Nothing
On Error GoTo 0
End Sub
【问题讨论】:
-
目前,您不会自动保存文件,因此当您重复使用按钮时,很难再次保留文件。 要添加的两个主要内容:将文件保存在已知位置+名称,添加工作表(使用代码将其设置为非常隐藏)以保存参数:-boolean 如果文件已经创建(在您的代码中添加 if 以创建工作簿或添加工作表),文件名和位置,也许还有其他东西......有了它,您应该能够提出要求!跨度>
-
我可以按照您所说的那样保存文件,这是一个安全的选项和正确的解决方案,但是我真的不确定使用此工具的这些 ppl 将具有保存权限的驱动器。所以我让这个选项保持打开状态。