用VB编写类试EXCEL的表格类软件,要求单元格可以被方便的修改,请问用什么控件比较好,用datagrid合适吗?可以方便的编辑单元格吗?对VB不太熟,请各位帮忙?

解决方案 »

  1.   

    恐怕要用VC来做,光是合并单元格DataGrid就实现不了。
      

  2.   

    shierren(丁丁) 
    谢谢,那DataGrid支持编辑单元格的内容吗?还是只能显示?
      

  3.   

    这个不错
    http://www.grid2000.com/cn/
      

  4.   

    使用Msflexgrid控件将就吧。或者你直接嵌入Excel不就得了。何必那么麻烦?
      

  5.   

    例子一个:
    新建工程   添加 MDIForm1   放上Picture1
    Option ExplicitPrivate Const GWL_STYLE = (-16)
    Private Const WS_DLGFRAME = &H400000
    Private Const WS_CHILD = &H40000000
    Private Const WS_CHILDWINDOW = (WS_CHILD)
    Private Const WS_VSCROLL = &H200000
    Private Const WS_CAPTION = &HC00000
    Private Const WS_BORDER = &H800000
    Private Const WS_THICKFRAME = &H40000
    Private Const WS_SIZEBOX = WS_THICKFRAMEPrivate Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" _
        (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
        
    Private Declare Function GetParent Lib "user32" _
        (ByVal hwnd As Long) As Long
        
    Private Declare Function SetParent Lib "user32" _
        (ByVal hWndChild As Long, _
        ByVal hWndNewParent As Long) As Long
        
    Private Declare Function SetForegroundWindow Lib "user32" _
        (ByVal hwnd As Long) As Long
        
    Private Declare Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
        
    Private Declare Function MoveWindow Lib "user32" _
        (ByVal hwnd As Long, _
        ByVal x As Long, _
        ByVal y As Long, _
        ByVal nWidth As Long, _
        ByVal nHeight As Long, _
        ByVal bRepaint As Long) As Long
        
    Private Declare Function SetWindowPos Lib "user32" _
        (ByVal hwnd As Long, _
        ByVal hWndInsertAfter As Long, _
        ByVal x As Long, ByVal y As Long, _
        ByVal cx As Long, _
        ByVal cy As Long, _
        ByVal wFlags As Long) As Long
        
    Private Declare Function FindWindowEx Lib "user32" _
        Alias "FindWindowExA" _
        (ByVal hWnd1 As Long, _
        ByVal hWnd2 As Long, _
        ByVal lpsz1 As String, _
        ByVal lpsz2 As String) As LongPrivate WithEvents mobjXL As Excel.Application
    Private mlngXLHwnd As Long
    Dim c As ObjectPrivate Sub MDIForm_Load()
        Dim lngStyle As Long
        
        Dim lngStatusBar As Long    Set mobjXL = New Excel.Application
        
        mobjXL.Caption = "10001"
        
        mobjXL.Visible = True    For Each c In mobjXL.CommandBars
            c.Enabled = False
        Next    mlngXLHwnd = FindWindow("XLMAIN", "10001")
        SetParent mlngXLHwnd, Me.hwnd
        
        lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
        
        lngStyle = lngStyle Xor WS_CAPTION
        lngStyle = lngStyle Xor WS_SIZEBOX
        
        SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle
                
        MoveWindow mlngXLHwnd, 0, (Picture1.Height / Screen.TwipsPerPixelY), _
            (Me.ScaleWidth / Screen.TwipsPerPixelX), _
            (Me.ScaleHeight / Screen.TwipsPerPixelY), 1
        
        mobjXL.Workbooks.Add
        
    End SubPrivate Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    For Each c In mobjXL.CommandBars '恢复
            c.Enabled = True
        Next
            
        SetParent mlngXLHwnd, 0
        DoEvents
        mobjXL.DisplayAlerts = False
        mobjXL.Quit
        
        Set mobjXL = Nothing
    End SubPrivate Sub MDIForm_Resize()
        If Not Me.WindowState = vbMinimized Then
            MoveWindow mlngXLHwnd, 0, _
                (Picture1.Height / Screen.TwipsPerPixelY), _
                (Me.ScaleWidth / Screen.TwipsPerPixelX), _
                (Me.ScaleHeight / Screen.TwipsPerPixelY), 1
        End If
    End SubPrivate Sub mobjXL_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
        MoveWindow mlngXLHwnd, 0, _
            (Picture1.Height / Screen.TwipsPerPixelY), _
            (Me.ScaleWidth / Screen.TwipsPerPixelX), _
            (Me.ScaleHeight / Screen.TwipsPerPixelY), 1
    End Sub
      

  6.   

    兄弟,现实一点吧。
    如果真要实现的话就用Cell控件吧,用Msflexgrid实现基本功能
    倒不难,但EXECL的有些功能是很难写的,你细细去想想有的功能连思路都没有。