翔羽 发表于 2005-8-21 15:52:00

[VBA]flexgrid控件问题

<P>我在vb中运行以下的程序好用,但是在vba中运行的时候总是提示我错误信息“对象不可用”</P>
<P>请斑竹和各位指教~~</P>
<P>程序主要用的是一个flexgrid控件,想实现在第一、二行中,单击左键,会出现一文字框<BR>而第三、四行,会出现选择类表单(ComboBox)输入完毕后按下Enter键,资料即可保留于MSFlexGrid中,而按下Esc键则取消输入<BR></P>
<P>Option Explicit</P>
<P>Private Sub Combo1_Change()</P>
<P>End Sub</P>
<P>Private Sub Combo1_Exit(ByVal Cancel As MSForms.ReturnBoolean)<BR>Combo1.Visible = False<BR>'MSFlexGrid1.SetFocus<BR>End Sub</P>
<P>Private Sub Combo1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)<BR>Dim i As Integer, bSame As Boolean<BR>If KeyAscii = vbKeyEscape Then<BR>&nbsp;&nbsp;&nbsp; Combo1.Visible = False<BR>&nbsp;&nbsp;&nbsp; MSFlexGrid1.SetFocus<BR>&nbsp;&nbsp;&nbsp; Exit Sub<BR>End If<BR>If KeyAscii = vbKeyReturn Then<BR>&nbsp;&nbsp;&nbsp; MSFlexGrid1.text = Combo1.text<BR>&nbsp;&nbsp;&nbsp; Combo1.Visible = False<BR>&nbsp;&nbsp;&nbsp; MSFlexGrid1.SetFocus<BR>&nbsp;&nbsp;&nbsp; With Combo1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bSame = False<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To .ListCount<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If .text = .List(i) Then bSame = True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not bSame Then .AddItem .text<BR>&nbsp;&nbsp;&nbsp; End With<BR>End If</P>
<P>End Sub</P>

<P>Private Sub MSFlexGrid1_Click()<BR>Dim c As Integer, r As Integer<BR>With MSFlexGrid1<BR>&nbsp;&nbsp;&nbsp; c = .Col: r = .Row<BR>&nbsp;&nbsp;&nbsp; If r &lt;= 2 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.Left = .Left + .ColPos(c)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.Top = .Top + .RowPos(r)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.width = .ColWidth(c)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.height = .RowHeight(r)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1 = .text<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.Visible = True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text1.SetFocus<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Combo1.Left = .Left + .ColPos(c)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Combo1.Top = .Top + .RowPos(r)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Combo1.width = .ColWidth(c)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Combo1.text = .text<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Combo1.Visible = True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Combo1.SetFocus<BR>&nbsp;&nbsp;&nbsp; End If<BR>End With</P>
<P><BR>End Sub</P>
<P>Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)<BR>If KeyAscii = vbKeyReturn Then<BR>&nbsp;&nbsp;&nbsp; Call MSFlexGrid1_Click<BR>End If<BR>End Sub</P>
<P>Private Sub Text1_Change()</P>
<P>End Sub</P>
<P>Private Sub Text1_Exit(ByVal Cancel As MSForms.ReturnBoolean)</P>
<P><BR>'MSFlexGrid1.SetFocus<BR>Text1.Visible = False</P>
<P>End Sub</P>
<P>Private Sub Text1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)<BR>If KeyAscii = vbKeyEscape Then<BR>&nbsp;&nbsp;&nbsp; Text1.Visible = False<BR>&nbsp;&nbsp;&nbsp; MSFlexGrid1.SetFocus<BR>&nbsp;&nbsp;&nbsp; Exit Sub<BR>End If<BR>If KeyAscii = vbKeyReturn Then<BR>&nbsp;&nbsp;&nbsp; MSFlexGrid1.text = Text1.text<BR>&nbsp;&nbsp;&nbsp; Text1.Visible = False<BR>&nbsp;&nbsp;&nbsp; MSFlexGrid1.SetFocus<BR>End If<BR>End Sub</P>
<P>Private Sub UserForm_Initialize()<BR>Dim i As Integer<BR>With MSFlexGrid1<BR>&nbsp;&nbsp;&nbsp; .Cols = 5<BR>&nbsp;&nbsp;&nbsp; .Rows = 5<BR>&nbsp;&nbsp;&nbsp; For i = 0 To 4<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RowHeight(i) = 300<BR>&nbsp;&nbsp;&nbsp; Next i<BR>End With<BR>For i = 1 To 10<BR>&nbsp;&nbsp;&nbsp; Combo1.AddItem i<BR>Next i<BR>Label1.Caption = "在第一、二行中,双击左键,会出现一文字框(TextBox)..." &amp; vbCr &amp; _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "而第三、四行,会出现选择类表单(ComboBox)..." &amp; vbCr &amp; _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "输入完毕后按下Enter键,资料即可保留于MSFlexGrid中," &amp; vbCr &amp; _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "而按下Esc键则取消输入..."<BR>'MSFlexGrid1.SetFocus<BR>Combo1.Visible = False<BR>Text1.Visible = False<BR>End Sub</P>

翔羽 发表于 2005-8-21 15:54:00

程序代码

翔羽 发表于 2005-8-21 19:48:00

怎么没有人回答阿~

ntchjie 发表于 2005-8-25 11:18:00

用用VSFLEXGRID控件看看,也许只要几行代码就可以搞定。

翔羽 发表于 2005-8-26 14:50:00

<P>to:<A name=53275><FONT color=#000066><B>ntchjie</B></FONT></A></P>
<P>&nbsp;请问在VBA中怎样用VSFLEXGRID控件怎么快速实现我要的功能?</P>
页: [1]
查看完整版本: [VBA]flexgrid控件问题