TPE
![]() |
![]() |
![]() |
|
|
Tavvafi@gmail.com |
|||
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
Private wb As Excel.Workbook Private wkCurrentSht As Excel.Worksheet Private ExcelApp As Excel.Application Private ExcelOpened As Boolean ' string arrays Private arrCols() As String Dim arrData() As String
Private Sub CreateArrayFromExcel()
' Populates array arrData from selected Excel data
' Called by cmdFinish_Click() (click event handler for Finish button on form)
Dim strField As String
Dim x As Long
Dim y As Long
Dim Num As Long
Dim NumofColumn As Long
Dim NumRows As Long
Dim rng As Range
On Error GoTo err_handler
ExcelApp.DisplayAlerts = False
ExcelApp.ScreenUpdating = False
NumofColumn = 0
ReDim arrCols(0) ' initialize array to hold column names
' When user chose the XLS file and worksheet to use, we
' filled the listbox lstFields with the names of the columns (ie, fields)
' on the worksheet
' Add each selected column name as a new element in the arrray arrCols
For x = 0 To lstFields.ListCount - 1
' is the field selected in lstFields?
If lstFields.Selected(x) Then
' get its name
strField = Me.lstFields.Column(0, x)
' update our counter
NumofColumn = NumofColumn + 1
' add a new element to the array
ReDim Preserve arrCols(UBound(arrCols) + 1)
' and store the column name in the array
arrCols(UBound(arrCols)) = strField
End If
Next
If NumofColumn > 25 Then
MsgBox "Please select 25 columns or less", vbInformation
Exit Sub
End If
' get the requested number of rows of data (ie, records)
' and store it in the array arrData
' first, how many rows of data must we process?
' every row in the worksheet?
If optAll.Value Then
Set rng = wkCurrentSht.Range(txtRange.Text)
NumRows = rng.Rows.Count
Num = NumRows
Else ' a specifc number of rows
' make sure that there really are that many rows
' if not, use what rows there are
Set rng = wkCurrentSht.Range(txtRange.Text)
NumRows = IIf(rng.Rows.Count > VBA.Val(txtNoofRows.Text), VBA.Val(txtNoofRows.Text), rng.Rows.Count)
Num = NumRows
End If
' NumRows now contains the number of rows to process
' dimension the array arrData to the needed number of rows and columns
ReDim arrData(1 To NumRows, 1 To UBound(arrCols)) As String
' fill the data array with data from the worksheet
For x = 1 To NumRows
For y = 1 To UBound(arrCols)
' assumes data starts in second row after headers in first row
' so we offset by one
arrData(x, y) = wkCurrentSht.Cells(x + 1, y).Value
Next
Next
' close the XLS workbook, don't save any changes
wb.Close SaveChanges:=False
' release memory used by the workbook
Set wb = Nothing
ExcelApp.ScreenUpdating = True
' If we originally started Excel to do our bidding, close it
' If it was already open, leave it open
If ExcelOpened Then
If Not ExcelApp Is Nothing Then
ExcelApp.Quit
Set ExcelApp = Nothing
End If
End If
' Display the data we've pulled from Excel into the arry arrData
' You could do the same kind of thing with arrCols to display the field names
For x = 1 To UBound(arrData, 1)
For y = 1 To UBound(arrData, 2)
Debug.Print arrData(x, y)
Next
Next
Exit Sub
err_handler:
ExcelApp.ScreenUpdating = True
MsgBox ("Error in CreateArrayFromExcel :" & Err.Description), vbInformation
End Sub



































