dgp000 发表于 2005-11-8 22:20:00

请mccad进来一下,急盼指导?

<P>在一个窗体中我引入了mshflexgrid控件,由于mshflexgrid控件不能修改单元格中的内容,于是在窗体中加入textbox,将textbox中的值放到mshflexgrid中,程序如下:</P>
<P>Private Sub MSHFlexGrid1_KeyPress(KeyAscii As Integer)<BR><BR>&nbsp;&nbsp;&nbsp; If MSHFlexGrid1.Row &lt;&gt; MSHFlexGrid1.Rows - 1 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 移动文本框至当前单元格<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.top = MSHFlexGrid1.CellTop + MSHFlexGrid1.top<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.Left = MSHFlexGrid1.CellLeft + MSHFlexGrid1.Left<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 保存当前单元格行和列的位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gRow = MSHFlexGrid1.Row<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gCol = MSHFlexGrid1.Col<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 设置文本框与当前单元格相同大小<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.Width = MSHFlexGrid1.CellWidth<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.Height = MSHFlexGrid1.CellHeight<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '最后一列不能填如数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If MSHFlexGrid1.Row &lt;&gt; MSHFlexGrid1.Rows - 1 Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.Text = MSHFlexGrid1.Text<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 显示文本框<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.Visible = True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.ZOrder 0 ' 把 Text1 放到最前面!<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox1.SetFocus<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '重新定位事件至文本框<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyAscii &lt;&gt; ASC_ENTER And KeyAscii &lt;&gt; ASC_ESC Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendKeys Chr$(KeyAscii)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; End If<BR>End Sub</P>
<P>Private Sub TextBox1_Change()<BR>&nbsp;&nbsp;&nbsp; MSHFlexGrid1.Text = TextBox1.Text<BR>End Sub<BR>Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)<BR>&nbsp;&nbsp;&nbsp; If KeyAscii = ASC_ENTER Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSHFlexGrid1.SetFocus ' Set focus back to grid, see Text_LostFocus.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeyAscii = 0 ' Ignore this KeyPress.<BR>&nbsp;&nbsp;&nbsp; End If<BR>End Sub<BR>Private Sub TextBox1_LostFocus()<BR>&nbsp;&nbsp;&nbsp; Dim tmpRow As Integer<BR>&nbsp;&nbsp;&nbsp; Dim tmpCol As Integer<BR>&nbsp;&nbsp;&nbsp; ' Save current settings of Grid Row and col. This is needed only if<BR>&nbsp;&nbsp;&nbsp; ' the focus is set somewhere else in the Grid.<BR>&nbsp;&nbsp;&nbsp; tmpRow = Grid1.Row<BR>&nbsp;&nbsp;&nbsp; tmpCol = Grid1.Col<BR>&nbsp;&nbsp;&nbsp; ' Set Row and Col back to what they were before Text1_LostFocus:<BR>&nbsp;&nbsp;&nbsp; Grid1.Row = gRow<BR>&nbsp;&nbsp;&nbsp; Grid1.Col = gCol<BR>&nbsp;&nbsp;&nbsp; Grid1.Text = TextBox1.Text ' Transfer text back to grid.<BR>&nbsp;&nbsp;&nbsp; TextBox1.SelStart = 0 ' Return caret to beginning.<BR>&nbsp;&nbsp;&nbsp; TextBox1.Visible = False ' Disable text box.<BR>&nbsp;&nbsp;&nbsp; ' Return row and Col contents:<BR>&nbsp;&nbsp;&nbsp; Grid1.Row = tmpRow<BR>&nbsp;&nbsp;&nbsp; Grid1.Col = tmpCol<BR>End Sub</P>
<P>用这种方法基本实现了我要的功能要求,但现在的问题是,mshflexgrid无法聚焦,点击mshflexgrid中的单元格,无法看到光标所在的位置,也就是TextBox1_LostFocus()无效,我该怎么样才能使mshflexgrid聚焦?还有没有别的办法?请赐教,谢谢!</P>

雪山飞狐_lzh 发表于 2005-11-8 23:03:00

<P>在VBA还是VB里?</P>
<P>VB里有现成的代码,</P>
<P>VBA里不好实现,最好在VB里做一个用户控件,在VBA里调用,或者使用第三方控件</P>

dgp000 发表于 2005-11-9 08:08:00

<P>1、是在VBA里做的程序;</P>
<P>2、VBA里不好实现,最好在VB里做一个用户控件,在VBA里调用,或者使用第三方控件?能否说得详细点啊?</P>

木子歌 发表于 2005-11-9 17:12:00

我也正学,所有得表格控件都不能修改单元格里的内容吗?只能靠文本框来修改,难道表格只有显示数据的作用?盼着赶紧回答啊!

dgp000 发表于 2005-11-10 22:55:00

晕,怎么没有人理了咯?

木子歌 发表于 2005-11-14 19:20:00

<P>各位啊,在哪啊?</P>
<P>VBA里用哪个表格控件比较好啊?我想实现数据修改的功能和与数据库里的数据连接的功能。</P>
<P>斑竹啊!</P>

awei 发表于 2005-11-20 15:43:00

我就是自己做了个控件,在vba里调用,没有办法。

dgp000 发表于 2005-11-21 09:19:00

能否拿出来共享一下呢?

小美菜 发表于 2005-11-21 22:33:00

也就是用VB做成DLL、OCX等,在VBA里面调用
页: [1]
查看完整版本: 请mccad进来一下,急盼指导?