Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
VBA Question: going through rows in a sheet via vba
Dear all,
The following is the situation. I import a file into an excel sheet. This file contains order information. What I want my code to do, is to identify what kind of product(s) is/are ordered per order (and write this down in a cell at the end of the row), and also to identify the unique orders (an order can consists of more then just 1 orderline). Then I want to copy only the lines marked as unique order to a second sheet. My code does this, except that it forgets to check the last row. My file looks like this : Intro(Sheet 1): contains the button that a person needs to press, this will activate a dialogue window that instructs the user to browse the folder to locate the file that needs to be imported. Master sheet (sheet 2): in this sheet all information that is being imported is placed here first, then 2 additional columns are added to specify what kind of product(s) is in the order, and wether it is unique order. Unique orders (Sheet 3): All unique orders from Master sheet are copied to this sheet (not all columns). The problem is that the last row in Mastersheet is skipped by the code, and thus not copied to the 3rd sheet either. Can any of you help me, I have enclosed the code. Gr, Mariam Option Explicit Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdOK_Click() Dim strFilePath As String Dim strFileName As String Dim strTATFile As String ' Variables for sorting out the correct orderlines Dim lngRow As Long Dim lngFirstRow As Long Dim lngLastRow As Long Dim lngFinalRow As Long ' End of data Dim strOrderNumber As String Dim strPreviousOrderNumber As String Dim strProduct(1 To 5) As String Dim intProduct(1 To 5) As Integer Dim x As Integer Dim strOmschrijving As String On Error GoTo Foutje strProduct(1) = "C8AV" 'Desktop strProduct(2) = "C7AV" 'Desktop strProduct(3) = "E6AV" 'Laptop strProduct(4) = "94A" 'Monitor strProduct(5) = "A2AV" 'Laptop strTATFile = ActiveWorkbook.Name strFilePath = txtPath.Text Workbooks.Open strFilePath strFileName = ActiveWorkbook.Name Workbooks(strFileName).Sheets(1).Select Cells.Select Selection.Copy Windows(strTATFile).Activate Workbooks(strTATFile).Sheets("Master Sheet").Select Cells.Select ActiveSheet.Paste Application.DisplayAlerts = False Windows(strFileName).Close Application.DisplayAlerts = True Range("A1").Activate Selection.Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=True, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal lngRow = 2 lngFirstRow = 2 Do Until Cells(lngRow, 7).Value = "" strOrderNumber = Cells(lngRow, 7).Value If strOrderNumber = strPreviousOrderNumber Then ' Same order, more then 1 orderline ' RAise ProductCounter - ProductTeller ophogen For x = 1 To 5 If Cells(lngRow, 8).Value = strProduct(x) Then intProduct(x) = intProduct(x) + 1 End If Next x Else ' New Order - Nieuwe order lngFirstRow = lngLastRow + 1 lngLastRow = lngRow - 1 If lngFirstRow 1 Then Cells(lngFirstRow, 31).Value = "*" End If If intProduct(1) + intProduct(2) + intProduct(3) + intProduct(5) = 0 Then 'Remove - Verwijderen For x = lngFirstRow To lngLastRow 'Cells(x, 7).Interior.Color = vbRed 'coloured columns are marked for deletion - test purposes If x 1 Then Cells(x, 7).EntireRow.Clear End If Next x Else 'Writing wether this is about a desktop, laptop, or a combination of laptop/desktop. If intProduct(1) + intProduct(2) 0 Then strOmschrijving = "desktop" If intProduct(3) + intProduct(5) 0 Then strOmschrijving = "Desktop-Laptop" End If Else If intProduct(3) + intProduct(5) 0 Then strOmschrijving = "laptop" End If End If For x = lngFirstRow To lngLastRow If x 1 Then Cells(x, 30).Value = strOmschrijving End If Next x End If 'Empty ProductCounter - Leeggooien van Teller (van de producten) For x = 1 To 5 intProduct(x) = 0 Next x 'Filling up Product Counter - En daarna vullen van Teller met deze regel For x = 1 To 5 If Cells(lngRow, 8).Value = strProduct(x) Then intProduct(x) = intProduct(x) + 1 End If Next x End If strPreviousOrderNumber = strOrderNumber lngRow = lngRow + 1 Loop 'lngFinalRow = lngRow - 1 lngFinalRow = lngRow For x = lngFinalRow To 2 Step -1 If Cells(x, 7) = "" Then Cells(x, 7).EntireRow.Delete Shift:=xlUp End If Next x Cells(1, 30).Value = "Product" WriteUniqueOrders lngFinalRow Unload Me 'CreatePivotTable Exit Sub Foutje: MsgBox "File could not be opened" End Sub Sub WriteUniqueOrders(lngFinalRow As Long) Dim x As Integer Sheets("Master Sheet").Select Cells.Select Selection.Copy Sheets("Unique Orders").Select Cells.Select ActiveSheet.Paste Cells(1, 1).Select For x = lngFinalRow To 2 Step -1 If Cells(x, 31) = "" Then '30 veranderd naar 31 Cells(x, 31).EntireRow.Delete End If Next x Columns("H:I").Delete Shift:=xlToLeft Columns("AB:AB").Delete Shift:=xlToLeft CreateNames Sheets("Master sheet").Select Cells(1, 1).Select End Sub Sub CreateNames() Dim lngNumberOfRows As Long 'Label naam moet gedelete worden, foutmelding wordt gegenereerd indien er geen 'label bestaat om te deleten. met deze error handling wordt deze situatie opgevangen. 'De reden waarom het gedelete moet worden, is voor het geval deze bestaat. On Error Resume Next 'Bij foutdoorgaan met volgende regel. ActiveWorkbook.Names("UniqueOrders").Delete On Error GoTo 0 'Vanaf hier wel weer foutmeldingen lngNumberOfRows = Sheets("Unique Orders").Range("A1").CurrentRegion.Rows.Count ActiveWorkbook.Names.Add Name:="UniqueOrders", RefersToR1C1:= _ "='Unique Orders'!R1C1:R" & lngNumberOfRows & "C27" End Sub Private Function GetFileToOpenName() As String Dim BestandsNaam As String Dim File_Dialoog As FileDialog Dim Result As Long Set File_Dialoog = Application.FileDialog(msoFileDialogOpen) File_Dialoog.Filters.Clear File_Dialoog.Filters.Add "Excelworksheet (*.xls)", "*.xls", 1 Result = File_Dialoog.Show() If Result = -1 Then GetFileToOpenName = File_Dialoog.SelectedItems.Item(1) Else GetFileToOpenName = "" End If End Function Private Sub cmdOpen_Click() txtPath.Text = GetFileToOpenName End Sub |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
VBA Question: going through rows in a sheet via vba
|
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
copy rows from one Data sheet to another sheet based on cell conte | Excel Discussion (Misc queries) | |||
Search for rows in one sheet and copy into another sheet based on customer id | Excel Worksheet Functions | |||
move rows of data seperated in a sheet to a sheet with no separat | Excel Worksheet Functions | |||
Cut filtered rows, paste into next empty row of new sheet, and delete cut rows | Excel Worksheet Functions | |||
Excel: have add'l rows entered in sheet 1 always show up in sheet | Excel Worksheet Functions |