Solved

Transfer from Grid to excel

Posted on 2011-03-15
42
782 Views
Last Modified: 2012-06-21
Hello all,

I need your help for a code that will first, sort all these column:
Column 0,3,4,6,7,8,9,10

Once done, it will export to excel, starting at row 7, going down, but i need to have 2 empty row between does that have different value in this Column 0,3,4,6,7,8,9,10.

Ex:see picture 1 for the grid and see picture 2 for the result in excel.

Thanks again for your help.

really appreciate.
transfer-in-excel.JPG
Result-excel.JPG
0
Comment
Question by:Wilder1626
  • 23
  • 14
  • 4
42 Comments
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
Here you have some starting points to transfer the data to excel

How to transfer data from an ADO Recordset to Excel with automation
http://support.microsoft.com/default.aspx?scid=kb;en-us;246335&Product=vb6

Datagrid to excel
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21148107.html

When you export your datagrid, just add some empty rows between them, depending of your requirements

Just let me know if you still have some problems with parts of the code (this forum is not meant to write complete solutions).
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Hello all,

This is what i have for now but i can't put a 2 empty rows between the ones that are different.

Also the sorting is not perfect also. it does not combine all the same one together.

If Combo1.Text = "" Then
With Form29.MSHFlexGrid1
     .Col = 11
     .ColSel = 0
     .ColSel = 3
     .ColSel = 4
     .ColSel = 6
     .ColSel = 7
     .ColSel = 8
     .ColSel = 9
     .ColSel = 10
     .Sort = flexSortStringAscending
End With





     
    Set xlObject = New Excel.Application

    'This Adds a new woorkbook, you could open the workbook from file also
    Set xlWB = xlObject.Workbooks.Add
               
    Clipboard.Clear 'Clear the Clipboard
    With Form29.MSHFlexGrid1
        'Select Full Contents (You could also select partial content)
        .Col = 0               'From first column
        .Row = 0               'From first Row (header)
        .ColSel = .Cols - 1    'Select all columns
        .RowSel = .Rows - 1    'Select all rows
        Clipboard.SetText .Clip 'Send to Clipboard

    End With
           
    With xlObject.ActiveWorkbook.ActiveSheet
    
   xlObject.ActiveWorkbook.ActiveSheet.Range("a1") = Form29.Combo1.Text
    xlObject.ActiveWorkbook.ActiveSheet.Range("a1").Font.Bold = True
    xlObject.ActiveWorkbook.ActiveSheet.Range("a1").Font.Size = 17
    
    '205-197-191 = gris
    xlObject.ActiveWorkbook.ActiveSheet.Range("A6:p6").Interior.Color = RGB(205, 197, 191)
    
    xlObject.ActiveWorkbook.ActiveSheet.Range("a3") = "Date od this report:"
    xlObject.ActiveWorkbook.ActiveSheet.Range("a3").Font.Bold = True
    xlObject.ActiveWorkbook.ActiveSheet.Range("B3") = Format(Date, "mmm dd, yyyy")
    xlObject.ActiveWorkbook.ActiveSheet.Range("b3").Font.Bold = True

    
    
'.BorderAround Weight:=xlThin
    
    
       xlObject.ActiveWorkbook.ActiveSheet.Columns("A:A").ColumnWidth = 20
       xlObject.ActiveWorkbook.ActiveSheet.Columns("A:A").HorizontalAlignment = xlLeft
       xlObject.ActiveWorkbook.ActiveSheet.Columns("A:A").NumberFormat = "@"
       xlObject.ActiveWorkbook.ActiveSheet.Columns("B:B").ColumnWidth = 13
       xlObject.ActiveWorkbook.ActiveSheet.Columns("B:B").HorizontalAlignment = xlLeft
       xlObject.ActiveWorkbook.ActiveSheet.Columns("B:B").NumberFormat = "@"
       xlObject.ActiveWorkbook.ActiveSheet.Columns("C:C").ColumnWidth = 44
       
       xlObject.ActiveWorkbook.ActiveSheet.Columns("C:C").HorizontalAlignment = xlLeft
       xlObject.ActiveWorkbook.ActiveSheet.Columns("D:D").ColumnWidth = 13
       xlObject.ActiveWorkbook.ActiveSheet.Columns("D:D").HorizontalAlignment = xlLeft
       xlObject.ActiveWorkbook.ActiveSheet.Columns("B:B").HorizontalAlignment = xlLeft
       xlObject.ActiveWorkbook.ActiveSheet.Columns("C:C").ColumnWidth = 26
       xlObject.ActiveWorkbook.ActiveSheet.Columns("B:B").HorizontalAlignment = xlLeft
       xlObject.ActiveWorkbook.ActiveSheet.Columns("C:C").ColumnWidth = 44
       
        xlObject.ActiveWorkbook.ActiveSheet.Columns("E:E").ColumnWidth = 13
       xlObject.ActiveWorkbook.ActiveSheet.Columns("E:E").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("F:F").ColumnWidth = 10
       xlObject.ActiveWorkbook.ActiveSheet.Columns("F:F").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("G:G").ColumnWidth = 15
       xlObject.ActiveWorkbook.ActiveSheet.Columns("G:G").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("H:H").ColumnWidth = 13
       xlObject.ActiveWorkbook.ActiveSheet.Columns("H:H").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("I:I").ColumnWidth = 17
       xlObject.ActiveWorkbook.ActiveSheet.Columns("I:I").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("J:J").ColumnWidth = 10
       xlObject.ActiveWorkbook.ActiveSheet.Columns("J:J").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("K:K").ColumnWidth = 10
       xlObject.ActiveWorkbook.ActiveSheet.Columns("K:K").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("L:L").ColumnWidth = 22
       xlObject.ActiveWorkbook.ActiveSheet.Columns("L:L").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("M:M").ColumnWidth = 40
       xlObject.ActiveWorkbook.ActiveSheet.Columns("M:M").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("N:N").ColumnWidth = 20
       xlObject.ActiveWorkbook.ActiveSheet.Columns("N:N").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("O:O").ColumnWidth = 24
       xlObject.ActiveWorkbook.ActiveSheet.Columns("O:O").HorizontalAlignment = xlLeft
        xlObject.ActiveWorkbook.ActiveSheet.Columns("P:P").ColumnWidth = 0
       xlObject.ActiveWorkbook.ActiveSheet.Columns("P:P").HorizontalAlignment = xlLeft
       
       
       
       
       xlObject.ActiveWorkbook.ActiveSheet.Range("a3") = "Date od this report:"
    xlObject.ActiveWorkbook.ActiveSheet.Range("a3").Font.Bold = True
    xlObject.ActiveWorkbook.ActiveSheet.Range("B3") = Format(Date, "mmm dd, yyyy")
    xlObject.ActiveWorkbook.ActiveSheet.Range("b3").Font.Bold = True


       
        .Range("A6").Select 'Select Cell A1 (will paste from here, to different cells)
        .Paste   'Paste clipboard content


xlObject.ActiveWorkbook.ActiveSheet.Range("C7").Select


xlObject.ActiveWindow.FreezePanes = True

xlObject.ActiveWorkbook.ActiveSheet.Name = xlObject.ActiveWorkbook.ActiveSheet.Range("A1").Text & " " & xlObject.ActiveWorkbook.ActiveSheet.Range("b3").Text




xlObject.ActiveWorkbook.ActiveSheet.Range("A6").Select
  End With
       

     'MsgBox "Fichier Excel complété"
         ' This makes Excel visible
    xlObject.Visible = True
    
    
 End If
 Unload Me
 

Open in new window

0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
The MSFlexGrid is sorting data in multiple columns by sorting the columns from left to right and always in the same order (descending/ascending). So you could swap the columns "occurence" and "operation" to achieve your goal.

Or what you can also do is to perform the sorting on database, when you retrieve the data .
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
What do you mean by: swap the columns "occurence" and "operation"
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
Sorry, was a mistake. I mean with this just the columnnames, in your case you need to switch all the colums so that
0,3,4,6,7,8,9,10

will be 0,1,2,3,...
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
so you are saying that if i go for the grid sort column, it will sort all columns and not just a few of them?

Is that correct?
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
I'm also trying this now but i have an error on this part of the code when transferring to an excel sheet:

Error 3704
Operation is not allowed when the object is closed

  xlWs.Cells(2, 1).CopyFromRecordset rst

Open in new window



Full code


 Dim cnt As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    
    Dim xlApp As Object
    Dim xlWb As Object
    Dim xlWs As Object

    
    Dim recArray As Variant
    
    Dim strDB As String
    Dim fldCount As Integer
    Dim recCount As Long
    Dim iCol As Integer
    Dim iRow As Integer
    
    ' Set the string to the path of your Northwind database
    strDB = "C:\Documents and Settings\daniel\Desktop\Text Xdock.xlsx"
  
       
    ' Create an instance of Excel and add a workbook
    Set xlApp = CreateObject("Excel.Application")
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets("Feuil1")
  
    ' Display Excel and give user control of Excel's lifetime
    xlApp.Visible = True
    xlApp.UserControl = True
    
    ' Copy field names to the first row of the worksheet
    fldCount = rst.Fields.Count
    For iCol = 1 To fldCount
        xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
    Next
        
    ' Check version of Excel
    If val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then
        'EXCEL 2000,2002,2003, or 2007: Use CopyFromRecordset
         
        ' Copy the recordset to the worksheet, starting in cell A2
        
        xlWs.Cells(2, 1).CopyFromRecordset rst
        'Note: CopyFromRecordset will fail if the recordset
        'contains an OLE object field or array data such
        'as hierarchical recordsets
        
    Else
        'EXCEL 97 or earlier: Use GetRows then copy array to Excel
    
        ' Copy recordset to an array
        recArray = rst.GetRows
        'Note: GetRows returns a 0-based array where the first
        'dimension contains fields and the second dimension
        'contains records. We will transpose this array so that
        'the first dimension contains records, allowing the
        'data to appears properly when copied to Excel
        
        ' Determine number of records

        recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array
        

        ' Check the array for contents that are not valid when
        ' copying the array to an Excel worksheet
        For iCol = 0 To fldCount - 1
            For iRow = 0 To recCount - 1
                ' Take care of Date fields
                If IsDate(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = Format(recArray(iCol, iRow))
                ' Take care of OLE object fields or array fields
                ElseIf IsArray(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = "Array Field"
                End If
            Next iRow 'next record
        Next iCol 'next field
            
        ' Transpose and Copy the array to the worksheet,
        ' starting in cell A2
        xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _
            TransposeDim(recArray)
    End If

    ' Auto-fit the column widths and row heights
    xlApp.Selection.CurrentRegion.Columns.AutoFit
    xlApp.Selection.CurrentRegion.Rows.AutoFit

    ' Close ADO objects
    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing
    
    ' Release Excel references
    Set xlWs = Nothing
    Set xlWb = Nothing

    Set xlApp = Nothing

Open in new window

0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
But I'm afraid that you can't use the CopyFromRecordset  if you want to add empty spaces in your excel.

You'll need to loop over your mshflexgrid

Something like

dim rowNumber as integer
rowNumber = 7

   With MSHFlexGrid1
      For DataIdx = 1 To MSHFlexGrid1.Rows - 1
          ' move data from column to excel
         rownumber = rownumber + 1
          xlWs.Cells(rownumber , 1).Text = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rownumber , 2).Text = .TextMatrix(DataIdx, 1)

        ' if the key is different, add 1 to the rownumber to add an empty row
        if .... then rownumber = rownumber + 1 end if
      Next
   End With
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Ok, i have try this now but i have an error 424
An object is required.

 With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1).Text = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2).Text = .TextMatrix(DataIdx, 1)

       
      Next
   End With


I'm sort of lost in this process.





Full code

 Dim cnt As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    
    Dim xlApp As Object
    Dim xlWb As Object
    Dim xlWs As Object

    
    Dim recArray As Variant
    
    Dim strDB As String
    Dim fldCount As Integer
    Dim recCount As Long
    Dim iCol As Integer
    Dim iRow As Integer
    
    ' Set the string to the path of your Northwind database
    strDB = "C:\Documents and Settings\jpoitra\Desktop\Text Xdock.xlsx"
  
       
    ' Create an instance of Excel and add a workbook
    Set xlApp = CreateObject("Excel.Application")
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets("Feuil1")
  
    ' Display Excel and give user control of Excel's lifetime
    xlApp.Visible = True
    xlApp.UserControl = True
    
    ' Copy field names to the first row of the worksheet
    fldCount = rst.Fields.Count
    For iCol = 1 To fldCount
        xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
    Next
        
    ' Check version of Excel
    If val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then
        'EXCEL 2000,2002,2003, or 2007: Use CopyFromRecordset
         
        ' Copy the recordset to the worksheet, starting in cell A2
        Dim rowNumber As Integer
        Dim DataIdx As Integer
rowNumber = 7

   With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1).Text = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2).Text = .TextMatrix(DataIdx, 1)

        
      Next
   End With
        'Note: CopyFromRecordset will fail if the recordset
        'contains an OLE object field or array data such
        'as hierarchical recordsets
        
    Else
        'EXCEL 97 or earlier: Use GetRows then copy array to Excel
    
        ' Copy recordset to an array
        recArray = rst.GetRows
        'Note: GetRows returns a 0-based array where the first
        'dimension contains fields and the second dimension
        'contains records. We will transpose this array so that
        'the first dimension contains records, allowing the
        'data to appears properly when copied to Excel
        
        ' Determine number of records

        recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array
        

        ' Check the array for contents that are not valid when
        ' copying the array to an Excel worksheet
        For iCol = 0 To fldCount - 1
            For iRow = 0 To recCount - 1
                ' Take care of Date fields
                If IsDate(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = Format(recArray(iCol, iRow))
                ' Take care of OLE object fields or array fields
                ElseIf IsArray(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = "Array Field"
                End If
            Next iRow 'next record
        Next iCol 'next field
            
        ' Transpose and Copy the array to the worksheet,
        ' starting in cell A2
        xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _
            TransposeDim(recArray)
    End If

    ' Auto-fit the column widths and row heights
    xlApp.Selection.CurrentRegion.Columns.AutoFit
    xlApp.Selection.CurrentRegion.Rows.AutoFit

    ' Close ADO objects
    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing
    
    ' Release Excel references
    Set xlWs = Nothing
    Set xlWb = Nothing

    Set xlApp = Nothing

Open in new window


0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Now i also have error 1004

Impossible to define Text in the class range.On the same line code
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
Try this

With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1)= .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2)= .TextMatrix(DataIdx, 1)

       
      Next
   End With

0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Perfect

The transfer part work know. see attachment.

I just need to be able to put sort the data and then add spaces in between.



 Dim cnt As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    
    Dim xlApp As Object
    Dim xlWb As Object
    Dim xlWs As Object

    
    Dim recArray As Variant
    
    Dim strDB As String
    Dim fldCount As Integer
    Dim recCount As Long
    Dim iCol As Integer
    Dim iRow As Integer
    
    ' Set the string to the path of your Northwind database
    strDB = "C:\Documents and Settings\jpoitra\Desktop\Text Xdock.xlsx"
  
       
    ' Create an instance of Excel and add a workbook
    Set xlApp = CreateObject("Excel.Application")
    Set xlWb = xlApp.Workbooks.Add
    Set xlWs = xlWb.Worksheets("Feuil1")
  
    ' Display Excel and give user control of Excel's lifetime
    xlApp.Visible = True
    xlApp.UserControl = True
    
    ' Copy field names to the first row of the worksheet
    fldCount = rst.Fields.Count
    For iCol = 1 To fldCount
        xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
    Next
        
    ' Check version of Excel
    If val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then
        'EXCEL 2000,2002,2003, or 2007: Use CopyFromRecordset
         
        ' Copy the recordset to the worksheet, starting in cell A2
        Dim rowNumber As Integer
        Dim DataIdx As Integer
rowNumber = 7

   With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2) = .TextMatrix(DataIdx, 1)
          xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 2)
           xlWs.Cells(rowNumber, 4) = .TextMatrix(DataIdx, 3)
            xlWs.Cells(rowNumber, 5) = .TextMatrix(DataIdx, 4)
             'xlWs.Cells(rowNumber, 6) = .TextMatrix(DataIdx, 5)
              xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 6)
               xlWs.Cells(rowNumber, 8) = .TextMatrix(DataIdx, 7)
                xlWs.Cells(rowNumber, 9) = .TextMatrix(DataIdx, 8)
                 xlWs.Cells(rowNumber, 10) = .TextMatrix(DataIdx, 9)
                  xlWs.Cells(rowNumber, 11) = .TextMatrix(DataIdx, 10)
                   xlWs.Cells(rowNumber, 12) = .TextMatrix(DataIdx, 11)
                    xlWs.Cells(rowNumber, 13) = .TextMatrix(DataIdx, 12)
                     xlWs.Cells(rowNumber, 14) = .TextMatrix(DataIdx, 13)
                      xlWs.Cells(rowNumber, 15) = .TextMatrix(DataIdx, 14)

        
      Next
   End With
        'Note: CopyFromRecordset will fail if the recordset
        'contains an OLE object field or array data such
        'as hierarchical recordsets
        
    Else
        'EXCEL 97 or earlier: Use GetRows then copy array to Excel
    
        ' Copy recordset to an array
        recArray = rst.GetRows
        'Note: GetRows returns a 0-based array where the first
        'dimension contains fields and the second dimension
        'contains records. We will transpose this array so that
        'the first dimension contains records, allowing the
        'data to appears properly when copied to Excel
        
        ' Determine number of records

        recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array
        

        ' Check the array for contents that are not valid when
        ' copying the array to an Excel worksheet
        For iCol = 0 To fldCount - 1
            For iRow = 0 To recCount - 1
                ' Take care of Date fields
                If IsDate(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = Format(recArray(iCol, iRow))
                ' Take care of OLE object fields or array fields
                ElseIf IsArray(recArray(iCol, iRow)) Then
                    recArray(iCol, iRow) = "Array Field"
                End If
            Next iRow 'next record
        Next iCol 'next field
            
        ' Transpose and Copy the array to the worksheet,
        ' starting in cell A2
        xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _
            TransposeDim(recArray)
    End If

    ' Auto-fit the column widths and row heights
    xlApp.Selection.CurrentRegion.Columns.AutoFit
    xlApp.Selection.CurrentRegion.Rows.AutoFit

    ' Close ADO objects
    
    On Error Resume Next
    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing
    
    ' Release Excel references
    Set xlWs = Nothing
    Set xlWb = Nothing

    Set xlApp = Nothing

Open in new window

Export-result.xlsx
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
You can do the spacing with something like this: (I just used only 2 key-columns)

  dim sKey as string
  sKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) +
"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)

  With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
         dim newKey as string
         newKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)
         if newKey <> sKey then
            rowNumber = rowNumber + 2
            newKey = sKey
         end if
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)
          ...
       
       

      Next
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
So if i understand right, i should put that code:
  dim sKey as string
  sKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) +
"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)

  With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
         dim newKey as string
         newKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)
         if newKey <> sKey then
            rowNumber = rowNumber + 2
            newKey = sKey
         end if
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)

      Next

Open in new window


Just before:
 With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2) = .TextMatrix(DataIdx, 1)
          xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 2)
           xlWs.Cells(rowNumber, 4) = .TextMatrix(DataIdx, 3)
            xlWs.Cells(rowNumber, 5) = .TextMatrix(DataIdx, 4)
             'xlWs.Cells(rowNumber, 6) = .TextMatrix(DataIdx, 5)
              xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 6)
               xlWs.Cells(rowNumber, 8) = .TextMatrix(DataIdx, 7)
                xlWs.Cells(rowNumber, 9) = .TextMatrix(DataIdx, 8)
                 xlWs.Cells(rowNumber, 10) = .TextMatrix(DataIdx, 9)
                  xlWs.Cells(rowNumber, 11) = .TextMatrix(DataIdx, 10)
                   xlWs.Cells(rowNumber, 12) = .TextMatrix(DataIdx, 11)
                    xlWs.Cells(rowNumber, 13) = .TextMatrix(DataIdx, 12)
                     xlWs.Cells(rowNumber, 14) = .TextMatrix(DataIdx, 13)
                      xlWs.Cells(rowNumber, 15) = .TextMatrix(DataIdx, 14)

        
      Next
   End With

Open in new window

0
 
LVL 14

Expert Comment

by:VBClassicGuy
Comment Utility
Once you get the FlexGrid looking and formatted the way you want, refer back to my previous help to you on geting a FlexGrid to Excel:

http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_26269799.html
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
I just removed some columns to show what you can do ...
dim sKey as string
  sKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) +
"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)

  With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
         dim newKey as string
         newKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)
         if newKey <> sKey then
            rowNumber = rowNumber + 2
            newKey = sKey
         end if
          ' move data from column to excel
         rowNumber = rowNumber + 1

          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2) = .TextMatrix(DataIdx, 1)
          xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 2)
           xlWs.Cells(rowNumber, 4) = .TextMatrix(DataIdx, 3)
            xlWs.Cells(rowNumber, 5) = .TextMatrix(DataIdx, 4)
             'xlWs.Cells(rowNumber, 6) = .TextMatrix(DataIdx, 5)
              xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 6)
               xlWs.Cells(rowNumber, 8) = .TextMatrix(DataIdx, 7)
                xlWs.Cells(rowNumber, 9) = .TextMatrix(DataIdx, 8)
                 xlWs.Cells(rowNumber, 10) = .TextMatrix(DataIdx, 9)
                  xlWs.Cells(rowNumber, 11) = .TextMatrix(DataIdx, 10)
                   xlWs.Cells(rowNumber, 12) = .TextMatrix(DataIdx, 11)
                    xlWs.Cells(rowNumber, 13) = .TextMatrix(DataIdx, 12)
                     xlWs.Cells(rowNumber, 14) = .TextMatrix(DataIdx, 13

      Next

Open in new window

0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Hello Dhaest

I was able to make the code work but now, it does not respect the sort criteria

Now it put 2 empty lane between every row with data.

It does not look like the excel sheet that i sent has an example in my first post.
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
I also see that it does not sort it properly on these columns
    .Col = 11
     .ColSel = 0
     .ColSel = 3
     .ColSel = 4
     .ColSel = 6
     .ColSel = 7
     .ColSel = 8
     .ColSel = 9
     .ColSel = 10
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
For the sorting I  see 2 possibilities:

1. From where do you retrieve your data ? Is it coming from a database ? If so, add the sorting there.

2. The MSFlexGrid is sorting data in multiple columns by sorting the columns from left to right and always in the same order (descending/ascending). So try to put the columns in the order that you want them to be sorted.
0
 
LVL 14

Expert Comment

by:VBClassicGuy
Comment Utility
Sorting on a FlexGrid in VB6 is frustrating, because of the language/FlexGrid's limitations. Microsoft COULD have made sorting work properly, but they didn't. Here are the two factors that make sorting difficult:

1. If sorting multiple columns, they must be contiguous (no gaps). You can set the .Col and .ColSel properties to select a range of columns to sort, then use the .Sort method. Sorting always occurs from left to right, even if .ColSel < .Col.

2. You might think, "Hey, I need to sort by column 0, 4, and 6 (in that order). Since multi-column sorts must have the columns contiguous, I'll just do three single sorts. I'll sort on column 0 first, then sort again on column 4, then lastly on column 6". Forget it. If you try this, you'll find out very quickly that subsequent sorts destroy the results of the previous sort. In this example, after you sort on column 0, the sort on column 4 will sort ONLY by what's in column 4 and disregard anything in column 0, including the previous sort.
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
ok, so i think the best why is to sort it from the excel sheet directly.

That's ok for me.

So the only thing that i need now is to be able to transfer from the master excel sheet to a new excel sheet in a specific format where it will put 2 empty lines after each different value from excel column in picture bellow.

First column being column A.

Do i keep the same code?

dim sKey as string
  sKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) +
"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)

  With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
         dim newKey as string
         newKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3)
         if newKey <> sKey then
            rowNumber = rowNumber + 2
            newKey = sKey
         end if
          ' move data from column to excel
         rowNumber = rowNumber + 1

          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2) = .TextMatrix(DataIdx, 1)
          xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 2)
           xlWs.Cells(rowNumber, 4) = .TextMatrix(DataIdx, 3)
            xlWs.Cells(rowNumber, 5) = .TextMatrix(DataIdx, 4)
             'xlWs.Cells(rowNumber, 6) = .TextMatrix(DataIdx, 5)
              xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 6)
               xlWs.Cells(rowNumber, 8) = .TextMatrix(DataIdx, 7)
                xlWs.Cells(rowNumber, 9) = .TextMatrix(DataIdx, 8)
                 xlWs.Cells(rowNumber, 10) = .TextMatrix(DataIdx, 9)
                  xlWs.Cells(rowNumber, 11) = .TextMatrix(DataIdx, 10)
                   xlWs.Cells(rowNumber, 12) = .TextMatrix(DataIdx, 11)
                    xlWs.Cells(rowNumber, 13) = .TextMatrix(DataIdx, 12)
                     xlWs.Cells(rowNumber, 14) = .TextMatrix(DataIdx, 13

Open in new window

0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
oups, here is the picture


sorting-column.JPG
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
For the ordering: Can you first tell where exactly you get the data the first time (when you load everything into the mshflexgrid) !
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
it come's from a master excel spreadsheet on the network.

Do you need the code i'm using for importing it in the grid?
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
Yes please. Because when you are retrieving it through a query or so, perhaps we can perform the sorting at that moment
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
ok,

This is the code i use:
Dim xlObject     As Excel.Application
Dim xlWb         As Excel.Workbook
Dim NoOfRows     As Long
Dim NoOfColumns  As Long
Dim i            As Single
Dim j            As Single
Dim Frmula       As String
Dim C1           As String
Dim C2           As String
Dim C3           As String
Dim C4           As String

    On Error GoTo MyErrHandler
   
    With CommonDialog1
        .CancelError = True
        .Filter = "Microsoft Excel files (xlam, xlsx, xltm, xlt, xlsm, xltx, xls, txt, csv)"
        .InitDir = "C:\Documents and Settings\all users\Desktop"
        .ShowOpen
        
        If Not .FileName = "" Then
            Set xlObject = New Excel.Application
            Set xlWb = xlObject.Workbooks.Open(.FileName)
            FetchNoRowCol xlObject.ActiveWorkbook.ActiveSheet, NoOfRows, NoOfColumns
            C1 = 7 - (NoOfColumns + 1)
            C2 = 6 - (NoOfColumns + 1)
            C3 = 4 - (NoOfColumns + 1)
            C4 = 0 - (NoOfColumns + 1)
            
            Frmula = "=IF(RC[" & C1 & "]=R[-1]C[" & C1 & "],IF(RC[" & C2 & "]=R[-1]C[" & C2 & "],IF(RC[" & C3 & "]=R[-1]C[" & C3 & "],IF(RC[" & C4 & "]=R[-1]C[" & C4 & "],1,0),0),0),0)"
            
            For i = 2 To NoOfRows
               xlWb.Worksheets(1).Cells(i, NoOfColumns + 1).FormulaR1C1 = Frmula
            Next i
            
            Clipboard.Clear
            xlObject.Cells.Copy     ' Copy all cells in active worksheet.
            
            With MSHFlexGrid1
               .Redraw = False     'Dont draw until the end, so we avoid that flash
               .Rows = NoOfRows
               .Cols = NoOfColumns + 1
               .Row = 0            'Paste from first cell
               .Col = 0
               .RowSel = .Rows - 1 'Select maximum allowed (your selection shouldnt be greater than this)
               .ColSel = .Cols - 1
               .Clip = Replace(Clipboard.GetText, vbNewLine, vbCr) 'Replace carriage return with the correct one
               .Col = 1            'Just to remove that blue selection from Flexgrid
               .Col = NoOfColumns
               .ColWidth(NoOfColumns) = 0
               For i = 2 To NoOfRows - 1
                  .Col = NoOfColumns
                  .Row = i
                  If .Text = 1 Then
                     For j = 1 To NoOfColumns
                        .Col = j
                        .Row = i
                        .CellBackColor = vb3DLight
                     Next
                  End If
               Next
               .Redraw = True      'Now draw
            End With
            
            xlObject.DisplayAlerts = False 'To avoid "Save woorkbook" messagebox
            xlWb.Close
            xlObject.Application.Quit
            Set xlWb = Nothing
            Set xlObject = Nothing
            
        End If
    End With
    
    'Auto column fit
    Dim r As Long
Dim C As Long
Dim cell_wid As Single
Dim col_wid As Single

    For C = 0 To MSHFlexGrid1.Cols - 1
        col_wid = 0
        For r = 0 To MSHFlexGrid1.Rows - 1
            cell_wid = TextWidth(MSHFlexGrid1.TextMatrix(r, C))
            If col_wid < cell_wid Then col_wid = cell_wid
        Next r
        MSHFlexGrid1.ColWidth(C) = col_wid + 120
    Next C
    
    
   'MSHFlexGrid1.ColAlignment(2) = flexAlignLeftCenter
    
    
    
    Dim z As Long, txt As String, total As Long
For z = 1 To MSHFlexGrid1.Rows - 1
  If Len(MSHFlexGrid1.TextMatrix(z, 3)) Then total = total + 1
  
  


Next z
lblTotalrecord = CStr(total)

'Command3.Enabled = False
If lblTotalrecord > "" Then
Command3.Enabled = True
Else
Command3.Enabled = False
End If


'Command1.Enabled = False
If lblTotalrecord > "" And lblTotalrecord1 > "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If

MSHFlexGrid1.CellAlignment = 0


Dim k As Long

For k = 1 To MSHFlexGrid1.Rows - 1

If MSHFlexGrid1.TextMatrix(k, 1) <> "" Then
   MSHFlexGrid1.TextMatrix(k, 5) = MSHFlexGrid1.TextMatrix(k, 0) & MSHFlexGrid1.TextMatrix(k, 1) & MSHFlexGrid1.TextMatrix(k, 6)

  End If

Next k




   
    Exit Sub

MyErrHandler:
    Err.Clear

Open in new window

0
 
LVL 14

Expert Comment

by:VBClassicGuy
Comment Utility
I think Dhaest is on the right track. If you can get the FlexGrid looking just like the Excel sheet should (hopefully even including the two blank rows between sorts), then transferring from the grid to the sheet will be a snap.
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
ok so i really need to do all the manual change in the original file first. Is that right?

Sort them first and then put an empty space between them.

The problem is that some time, i may have like 14 000 rows. I wanted to find an easy why of doing it.
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
I was doing some test and i think that i'm almost there.

I have manually sorted the excel sheet the way i wanted.

Now, i have a code added to the first one:

Sub AddTotal1(sh As Worksheet)
Dim Time As String
Dim Amt As Double
Dim Amt1 As Double
Dim Amt2 As Double
Dim Amt3 As Double
Dim Amt4 As Double
Dim Amt5 As Double
Dim Amt6 As Double
Dim Amt7 As Double
Dim Amt8 As Double
Dim Counter As String
On Error Resume Next
Counter = 7

With sh
sh.Activate
Do

    Time = .Cells(Counter, 10).Value
    Do
        Amt = Amt + .Cells(Counter, 1)
        Amt1 = Amt1 + .Cells(Counter, 4)
        Amt2 = Amt1 + .Cells(Counter, 5)
        Amt3 = Amt1 + .Cells(Counter, 6)
        Amt4 = Amt1 + .Cells(Counter, 7)
        Amt5 = Amt1 + .Cells(Counter, 8)
        Amt6 = Amt1 + .Cells(Counter, 9)
        Amt7 = Amt1 + .Cells(Counter, 10)
        Amt8 = Amt1 + .Cells(Counter, 11)
        Counter = Counter + 1

        
    Loop Until Time <> .Cells(Counter, 10)
    
    'Insert Total
    .Cells(Counter, 1).EntireRow.Insert
    .Cells(Counter, 2) = "Total"
    .Cells(Counter, 2).Font.Bold = True
    .Cells(Counter, 3) = Amt
    .Cells(Counter, 3).Font.Bold = True
    .Cells(RowNum, 4) = Amt1
    .Cells(Counter, 4).Font.Bold = True
    .Cells(Counter + 1, 1).EntireRow.Insert
    
    Counter = Counter + 2
    Amt = 0
    Amt1 = 0
    Amt2 = 0
    Amt3 = 0
    Amt4 = 0
    Amt5 = 0
    Amt6 = 0
    Amt7 = 0
    Amt8 = 0
    
           
Loop Until .Cells(Counter, 10) = ""
End With
End Sub

Open in new window



I'm adding this code the my other code:

AddTotal1 xlObject.ActiveWorkbook.ActiveSheet

Open in new window



Now it kind of separate with a 2 row in between but not at 100% what i need.

It really have to conceder all these column:
1-4-5-6-7-8-9-10-11.


can you help me with it please?

Thanks again
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Would it be concatenated column 1-4-5-6-7-8-9-10-11 and then the value in the grid in cell 15 and then, be able to sort it by value in cell 15?
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
>> Would it be concatenated column 1-4-5-6-7-8-9-10-11 and then the value in the grid in cell 15 and then, be able to sort it by value in cell 15?

You can do that and use that as key or make the complete key correctly (all the fields you need)

newKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 0) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 1) + "|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 2) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 3) +"|" + Form29.MSHFlexGrid1.TextMatrix(DataIdx, 4) + ...

0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Perfect

That that this is done, how can i transfer it the excel with 2 empty row between all different value in cell 15 where i now have the concatenation?
0
 
LVL 53

Accepted Solution

by:
Dhaest earned 500 total points
Comment Utility
You can work with the key-principle I've already posted once before
dim sKey as string
  sKey = Form29.MSHFlexGrid1.TextMatrix(DataIdx, 13)

  With Form29.MSHFlexGrid1
      For DataIdx = 1 To Form29.MSHFlexGrid1.Rows - 1
         dim newKey as string
         newKey = TextMatrix(DataIdx, 13)
         if newKey <> sKey then
            rowNumber = rowNumber + 2
            newKey = sKey
         end if
          ' move data from column to excel
         rowNumber = rowNumber + 1

          ' move data from column to excel
         rowNumber = rowNumber + 1
          xlWs.Cells(rowNumber, 1) = .TextMatrix(DataIdx, 0)
          xlWs.Cells(rowNumber, 2) = .TextMatrix(DataIdx, 1)
          xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 2)
           xlWs.Cells(rowNumber, 4) = .TextMatrix(DataIdx, 3)
            xlWs.Cells(rowNumber, 5) = .TextMatrix(DataIdx, 4)
             'xlWs.Cells(rowNumber, 6) = .TextMatrix(DataIdx, 5)
              xlWs.Cells(rowNumber, 3) = .TextMatrix(DataIdx, 6)
               xlWs.Cells(rowNumber, 8) = .TextMatrix(DataIdx, 7)
                xlWs.Cells(rowNumber, 9) = .TextMatrix(DataIdx, 8)
                 xlWs.Cells(rowNumber, 10) = .TextMatrix(DataIdx, 9)
                  xlWs.Cells(rowNumber, 11) = .TextMatrix(DataIdx, 10)
                   xlWs.Cells(rowNumber, 12) = .TextMatrix(DataIdx, 11)
                    xlWs.Cells(rowNumber, 13) = .TextMatrix(DataIdx, 12)
                     xlWs.Cells(rowNumber, 14) = .TextMatrix(DataIdx, 13)

Open in new window

0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
yes but it don't add empty row between  different value in column O in the excel sheet right?

That's the only things left to do now.

After that, i will be able to manage all other things.

Now the question is, to separate them, will i have to do it manually or it can be done with VB6?
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
Can you post an example of all the values in your msflexgrid (including the new column with the key) and also a better overview of when exactly you need an empty row ...
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
ok, let me do this and i will come back with 2 examples.

Thanks again for your time and help
0
 
LVL 14

Expert Comment

by:VBClassicGuy
Comment Utility
As DHaest has said before, with a highly-populated Excel sheet, it might take a while, but it can be done in VB6 if need be. Just maintain a variable in the local routine that transfers records from Excel to the grid, and set it to what's in column 0 with each pull from Excel. When the newly-pulled record doesn't equal the variable, add your empty rows to the grid, and change the variable to the new value.
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
OK, this excel file has 2 sheet.

The before and after result.

Please let me know if this could be done by VB6.

Thanks again.
Copie-de-Text-Xdock.xlsx
0
 
LVL 53

Expert Comment

by:Dhaest
Comment Utility
I think that I gave enough code-tips & trics to get to the final solution. See comment #35146518 and #35155638
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Please do not cancel
0
 
LVL 11

Author Closing Comment

by:Wilder1626
Comment Utility
Hello

Thanks. I will work with that answer.

Thanks again and sorry for the delay
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now