Jim Lawrence
accessd at shaw.ca
Mon Dec 24 12:29:15 CST 2007
Hi Arthur: A couple of years ago I wrote a full excel spreadsheet application that allowed users to add and delete records for a company in Toronto. The whole code was written in VBA... Add or Update row: Private Function SaveResults(bolAddingRecord As Boolean) As Boolean If ValidateData() = True Then ' Will a new row need to be added? If bolAddingRecord = True Then 'Go to top row and loop until an empty space is found If Not IsEmpty(ActiveCell) = True Then Do 'Find first blank space ActiveCell.Offset(1, 0).Select Loop Until IsEmpty(ActiveCell) = True End If bolAddingRecord = False End If ' Write content from selected combo box and do all cell formatting here. On Error resume next ActiveCell.Value = cmbAccountCode.Value ... '......................................................................... Delete Row: ' Method 1: This is the simplest way to delete records but it deletes the entire row contents which may not be what you want. Public Function DeleteRecord() If MsgBox("Do you wish to DELETE the current Record?", vbExclamation + vbOKCancel, "Delete current Record") = vbOK Then If IsEmpty(ActiveCell) = False Then Selection.EntireRow.Delete If IsEmpty(ActiveCell) = True Then ' Variable that hold record count ' lngRecords = ThisWorkbook.Worksheets(1).UsedRange.Rows.Count - 1 If lngRecords > 1 Then lngPosition = lngPosition - 1 ActiveCell.Offset(-1, 0).Select End If End If End If End If End Function '......................................................................... ' Method 2: Deletes a range of columns by moving the contents from the rows below up one row. Public Function DeleteRecord() If MsgBox("Do you wish to DELETE the current Record?", vbExclamation + vbOKCancel, "Delete current Record") = vbOK Then If IsEmpty(ActiveCell) = False Then MoveRange lngRecords = lngRecords - 1 If IsEmpty(ActiveCell) = True Then If lngRecords > 1 Then lngPosition = lngPosition - 1 ActiveCell.Offset(-1, 0).Select End If End If End If frmEntry.lblRecordPosition.Caption = "Record " & lngPosition & " of " & lngRecords End If End Function Public Function MoveRange() Dim lngRowPosition As Long Dim lngRowCount As Long Dim strCell As String lngRowPosition = Application.ActiveCell.Row lngRowCount = 0 strCell = "a" & lngRowPosition Application.ScreenUpdating = False lngRowCount = GetRecordPosition() Range(strCell).Select Selection.CurrentRegion.Select Selection.Offset(lngRowPosition, 0).Resize(lngRowCount - lngRowPosition + 2).Select Selection.Copy Range(strCell).Select ActiveSheet.Paste Application.CutCopyMode = False Application.ScreenUpdating = True Range(strCell).Select End Function Public Function GetRecordPosition() As Integer Dim intCounter As Integer Range("a2").Select intCounter = 0 Do If IsEmpty(ActiveCell) = False Then intCounter = intCounter + 1 ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True Range("a2").Select GetRecordPosition = intCounter End Function This code was specifically written for a hard coded application so the offsets are not using variables but I hope this helps. Jim -----Original Message----- From: dba-tech-bounces at databaseadvisors.com [mailto:dba-tech-bounces at databaseadvisors.com] On Behalf Of Arthur Fuller Sent: Monday, December 24, 2007 7:00 AM To: Discussion of Hardware and Software issues Subject: [dba-Tech] A couple of Excel questions I have a workbook containing 3 tables side by side. The range of table 1 is A3:D15, of table 2 it's F3:F15, of table 3 it's K3:N15. What I need to do is lose Row 3 and then insert a new row at Row 15. But because the table has borders, what was row 15 orignally now has a bottom edge, and the new row 15 doesn't. I know how to do a selection and kill its formatting, and then do another selection and give it a bottom border, but that is so clumsy. First of all, what are commands to delete a row and to insert a row? Second, it happens that frequently some rows in the table have not been filled yet. In that case, I'd like to find the first blank row and do the row insert there, thus simplifying the the formatting code Third, how to you copy just the value from a cell to another cell, without copying the formatting too? Thanks and Happy Holidays to all. Arthur _______________________________________________ dba-Tech mailing list dba-Tech at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-tech Website: http://www.databaseadvisors.com