Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default 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   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default VBA Question: going through rows in a sheet via vba

Dear readers,

Is any of you out there who can help me with the below ? I am
desperate, and in dire need of a solution.

Thanks in advance,
Mariam




(Mariam) wrote in message . com...
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

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
copy rows from one Data sheet to another sheet based on cell conte John McKeon Excel Discussion (Misc queries) 2 May 15th 10 06:49 AM
Search for rows in one sheet and copy into another sheet based on customer id [email protected] Excel Worksheet Functions 1 October 22nd 07 03:09 AM
move rows of data seperated in a sheet to a sheet with no separat Lynn Excel Worksheet Functions 5 December 22nd 06 03:18 AM
Cut filtered rows, paste into next empty row of new sheet, and delete cut rows Scott Excel Worksheet Functions 0 December 13th 06 01:25 AM
Excel: have add'l rows entered in sheet 1 always show up in sheet Sooz in Grants Pass Excel Worksheet Functions 0 September 18th 06 01:33 AM


All times are GMT +1. The time now is 01:25 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"