set "comm&"p=me.controls.add("vb.commandbutton","name"&p)
'"comm&"p 是一个字符串常量,而不是comm1(comm2..)
应该:
set comm1=me.constros.add("vb.commandbutton","name1")
set comm2=me.constros.add("vb.commandbutton","name2")
...
... with "thecomm"&p '说明1
同上,只能是:
with comm1
'with comm2
'...
'"comm&"p 是一个字符串常量,而不是comm1(comm2..)
应该:
set comm1=me.constros.add("vb.commandbutton","name1")
set comm2=me.constros.add("vb.commandbutton","name2")
...
... with "thecomm"&p '说明1
同上,只能是:
with comm1
'with comm2
'...
解决方案 »
- listbox的OLEDragDrop事件遍历文件夹问题
- 问2个低级问题!!!!!一定结分的!!!回答有份
- of123() 请进,还是关于定位目录的问题
- 谁能告诉我ReadProcessMemory的每个参数具体怎么用?
- 如何使用鼠标拖动使image对象放大或缩小?
- 请问如何在MsAgent角色的气球提示中使用按钮等对象?
- 请教在VB程序中实现long类型移位操作,谢谢!!!
- 如何用vb收发email,最好由example(急!急!!急!!!)
- 把MSFlexGrid的属性WordWrap设为True怎么换不了行呢?
- 调查:多少VB程序员在开发时惯用COM技术
- 为什么,vb使用数据控件无法识别access2000呀,access98好象可以呀,有没有办法解决呀,虽然很简单,可对我很重要
- 那里有完整的ADO文档下载?包括ADOX。
Private Sub Command1_Click()
Dim cmd As CommandButton
Set cmd = Me.Controls.Add("VB.CommandButton", "cmd1")
With cmd
.Width = 1000
.Height = 1000
.Top = 1000
.Left = 1000
.Visible = True
.ZOrder
.Caption = "cmd1"
End With
MsgBox cmd.Name
End Sub
Private Sub Command2_Click()
'''''''''''''''''''''''''''''''''''''''''
' 用Controls对象
'''''''''''''''''''''''''''''''''''''''''
With Me.Controls("cmd" & CStr(1))
.Caption = "cmd2"
End With
End Sub
您需要自己写30个controls.add
Public WithEvents cmd2 As CommandButton
Public WithEvents cmd3 As CommandButton
Public WithEvents cmd4 As CommandButton
Public WithEvents cmd5 As CommandButton'注意,一定要public,否则不能用callbyname获得Private Sub cmd1_Click()
MsgBox "ok"
End SubPrivate Sub Command1_Click()
Dim i As Integer
For i = 1 To 5
CallByName Me, "cmd" & CStr(i), VbSet, Controls.Add("VB.CommandButton", "cmd" & CStr(i))
With CallByName(Me, "cmd" & CStr(i), VbGet)
.Caption = "cmd" & CStr(i)
.Width = 1000
.Height = 500
.Left = 1000
.Top = 550 * i
.Visible = True
End With
Next
End Sub
先在窗体上放一个command控件,index 设为0
for i=1 to 30
load command(i)
command(i).caption="caption"&trim(str(i))
....
command(i).visible=true
next写command的事件时再用 index 判断
select case index
case 1
....
end select
dataenv1.rscmd1.filter="fld1<>0"
end sub
放在datareport中
===========================================
Public StartTime As String
Public EndTime As StringPublic Sub ShowData()
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim BillsRs As New ADODB.Recordset
DataEnv.rsTEA.Close
cmd.ActiveConnection = SYScnn
cmd.CommandType = adCmdText
cmd.CommandText = "UPDATE TEA SET STATCOUNT=0"
cmd.Execute
cmd.CommandText = "UPDATE TEA SET STATCOST=0"
cmd.Execute
cmd.CommandText = "SELECT SUM(PRIVATECOST) AS PCOST, SUM(ADDCOST) AS ACOST, SUM(FACTCOST) AS TOTALCOST , SUM(SERVICECOST) AS SCOST" & _
" FROM BILL " & _
" WHERE ETIME>='" & StartTime & "' AND ETIME<='" & EndTime & "'"
rs.Open cmd.Execute
Me.Sections("Title").Controls("TimeLbl").Caption = StartTime & " 至 " & EndTime
Me.Sections("Last").Controls("PrivateLbl").Caption = CStr(Format(CCur(rs.Fields("PCOST")), "¥#,##0.00"))
Me.Sections("Last").Controls("AddLbl").Caption = CStr(Format(CCur(rs.Fields("ACOST")), "¥#,##0.00"))
Me.Sections("Last").Controls("ServiceLbl").Caption = CStr(Format(CCur(rs.Fields("SCOST")), "¥#,##0.00"))
Me.Sections("Last").Controls("TotalLbl").Caption = CStr(Format(CCur(rs.Fields("TOTALCOST")), "总收入:¥#,##0.00"))
rs.Close
Set rs = Nothing
cmd.CommandText = "SELECT * FROM BILL " & _
" WHERE ETIME>='" & StartTime & "' AND ETIME<='" & EndTime & "'"
rs.Open cmd.Execute
BillsRs.Open "BILLS", SYScnn
Do Until rs.EOF
BillsRs.Filter = "BILLID=" & rs.Fields("ID")
If Not BillsRs.EOF Then BillsRs.MoveFirst
Do Until BillsRs.EOF
cmd.CommandText = "UPDATE TEA SET STATCOUNT=STATCOUNT+" & BillsRs.Fields("AMOUNT") & _
" WHERE ID=" & BillsRs.Fields("TEAID")
cmd.Execute
cmd.CommandText = "UPDATE TEA SET STATCOST=STATCOST+" & BillsRs.Fields("TOTAL") & _
" WHERE ID=" & BillsRs.Fields("TEAID")
cmd.Execute
BillsRs.MoveNext
Loop
rs.MoveNext
Loop
BillsRs.Close
rs.Close
DataEnv.TEA
DataEnv.rsTEA.Filter = "STATCOUNT > 0"
End SubPrivate Sub DataReport_Initialize()
DataEnv.TEA
End SubPrivate Sub DataReport_Terminate()
DataEnv.rsTEA.Close
End Subat form
==================================== rpt.StartTime = Stime
rpt.EndTime = Etime
rpt.ShowData
rpt.Show vbModal, MainForm这是我很久以前的代码了:)
Row As Long
Col As Long
End TypeDim ExcelSheet As Excel.Application
Dim ValuesArray() As StringPublic Function MakeExcelFile(MasterRs As ADODB.Recordset, FieldsArray() As String, _
ReportCaption As String, MasterForm As frmCreateReport)
Dim WS As Worksheet
Dim StCell As ExlCell
Screen.MousePointer = vbHourglass Set ExcelSheet = CreateObject("Excel.Application")
ExcelSheet.Workbooks.Add
ExcelSheet.Worksheets(1).Name = ReportCaption
Set WS = ExcelSheet.Worksheets(1)
StCell.Col = 1
StCell.Row = 3
Call CopyRecords(MasterRs, WS, StCell, FieldsArray, MasterForm)
Screen.MousePointer = vbDefault
ExcelSheet.Visible = True
ExcelSheet.Interactive = True
Set ExcelSheet = Nothing
End Function
Private Sub CopyRecords(RST As ADODB.Recordset, WS As Worksheet, StartingCell As ExlCell, _
FieldsArray() As String, MasterForm As frmCreateReport)
Dim SomeArray() As Variant
Dim Row As Long
Dim Col As Long
Dim Recs As Integer
Dim Counter As Integer
Dim i As Integer
If RST.EOF And RST.BOF Then Exit Sub
RST.MoveLast
ReDim SomeArray(RST.RecordCount + 1, UBound(FieldsArray))
Col = 0
For Col = 0 To UBound(FieldsArray)
SomeArray(0, Col) = FieldsArray(Col)
Next
RST.MoveFirst
Recs = RST.RecordCount
Counter = 0
For Row = 1 To RST.RecordCount
Counter = Counter + 1
If Counter <= Recs Then i = (Counter / Recs) * 100
MasterForm.UpdateProgress i
For Col = 0 To UBound(FieldsArray)
SomeArray(Row, Col) = RST.Fields(FieldsArray(Col)).Value
If IsNull(SomeArray(Row, Col)) Then _
SomeArray(Row, Col) = ""
Next
RST.MoveNext
Next WS.Range(WS.Cells(StartingCell.Row, StartingCell.Col), _
WS.Cells(StartingCell.Row + RST.RecordCount, _
StartingCell.Col + UBound(FieldsArray))).Value = SomeArray
WS.Range(WS.Cells(StartingCell.Row, StartingCell.Col), _
WS.Cells(StartingCell.Row + RST.RecordCount, _
StartingCell.Col + UBound(FieldsArray))).HorizontalAlignment = xlRight
WS.Range(WS.Cells(StartingCell.Row, StartingCell.Col), _
WS.Cells(StartingCell.Row + RST.RecordCount, _
StartingCell.Col + UBound(FieldsArray))).Borders.LineStyle = xlContinuous
WS.Range(WS.Cells(1, 1), WS.Cells(1, StartingCell.Col + UBound(FieldsArray))).Merge
WS.Range(WS.Cells(1, 1), WS.Cells(1, StartingCell.Col + UBound(FieldsArray))).Font.Size = 20
WS.Range(WS.Cells(1, 1), WS.Cells(1, StartingCell.Col + UBound(FieldsArray))).Font.Bold = True
WS.Range(WS.Cells(1, 1), WS.Cells(1, StartingCell.Col + UBound(FieldsArray))).Value = WS.Name
WS.Range(WS.Cells(1, 1), WS.Cells(1, StartingCell.Col + UBound(FieldsArray))).HorizontalAlignment = xlCenter
WS.Columns.AutoFit
MasterForm.UpdateProgress 100
End SubFieldsArray就是您想要显示的字段,可以在之前处理
我是这样使用的
Dim rs As New ADODB.Recordset
Dim i As Integer
If txtCaption = "" Then
MsgBox "必须输入报表标题!", vbExclamation, "错误"
txtCaption.SetFocus
Exit Sub
End If
If ListReportFields.ListCount = 0 Then
MsgBox "必须选择显示字段!", vbExclamation, "错误"
Exit Sub
End If
ReDim FieldsArray(ListReportFields.ListCount - 1)
For i = 0 To ListReportFields.ListCount - 1
FieldsArray(i) = ListReportFields.List(i)
Next
rs.Open "场地租用", SYScnn
rs.Filter = Condition
MakeExcelFile rs, FieldsArray(), txtCaption, Me
rs.Close
Unload Me