VBA: Sort And Format A Worksheet After New Row Added
Apr 29, 2009
From the sample file, I am using the data on (start) worksheet. (Sort and format sheet) . This one is way over my head. After new data is added to the sheet via another UserForm, I want to sort the list by name and have alternating backgrounds based on grouped unique names.
Is there a way to have a drop down or some sort of input cell that would change the look and format of the entire worksheet? Not sure how to pose the question?? For example.
What I'm working on is a departmental forecast sheet.
I want my department heads to be able to all look at the same excel file, then be able to input or select their department from a drop down. Once the department is selected that would call for excel to bring up the forecast for their specific department (**Each departments sheet is a little different).
I used the "record macro" to record a simple sorting (high to low) of columns A-F based on values (0-3) in column A. Everything works when I initially institute the macro. However, when I change anything or add a new item at the end of the list, the order reverses and sorting goes from lowest to highest.?
Here is what ended up in the macro:
Code: Sub SortColumnA() ' SortColumnA Macro ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
I noticed that it only includes a fixed value for the length of the list (row 90). Is there a way to have it increase when anything new is added?
As of now I plan on just making an arbitrary large index (~200 ish) to automatically grab anything new.
I have a worksheet on which users will enter data one row at a time, in columns A-K. When the user starts to enter data in a new row #, that is, when they make any column in the next, unused row have non-blank value, I'd like the sheet to update the borders of the row for columns A-K. I want the Range from A1 to K# to have full borders, so that the whole data set is outlined and easier to read.
For a bonus, I'd like the formulas from the previous H, I, and J cells copied down into H#, I#, and J#, adjusted appropriately for their reference changes.
Normally, I would work around the edges of such a VB problem by recording the actions manually and then modifying that code as I learned more. But I'm not sure if what I've done is the right way to start that process. I think that if I use the CurrentRegion property, and the Worksheet_Change event, I'll be well on my way.
Cell b6 has been formatted to a percentage with 2 decimal places. Using the formula: ="todays percentage is "&B6&", thank you.". The value returned is: todays percentage is 0.78125 thank you. My question is can the returned value from cell b6 be formatted to a percentage or at least be formatted to 2 decimal places? I hope i posted this correctly i am a first timer.
The code below is for a macro that allows the user to create a list of contacts. The column containing the names of these contacts are then referenced by a userform (code not present) by way of a Named Range. I want to update the named range whenever the user adds another contact so this new contact shows up in the user form.
I am currently referencing the range containing the names using R1C1 style, but I cannot get the variable aspect to work correctly.
I have a workbook that has a dynamic number of tabs. Every day the report is updated, it will create a tab for yesterday's date. I need to somehow create a summary page that will add the most current tab name (which is yesterday's date) to column B and several cells from row 7 to the appropriate row on the summary page each time I add a new tab. I have attached the spreadsheet in question. I have added manual references to the fields I need to use in the summary on the tab MTD (2) If I am able to get this to work it will replace MTD.
I have a workbook to track clients served. The first sheet has all of the data entered into it. The name, age, demographics, services. The second sheet is a template of the individual client's pages, summarizing their information and services received. I want to code the sheet so that once a new client is entered into the table on sheet 1, the template will automatically be copied to the end, renamed, and the basic data for the new client will be pasted into the new sheet.
I've been working on this project and done a ton of googling. And also am very new to VBA. I have found a solution that works:
VB: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Sheets(2).Copy After:=Sheets(Sheets.Count)
But I really don't want to do 50 "else" clauses for each line where there could be a new client. So I was thinking, if i could find a way to do a relative reference, such that it selects the cells to copy relative to the one that was changed within the range of that column, then I would only need one "if" statement. Is that possible? Is there some way to change the "B3" in target_address to "any cell in column B" and then range "A3" a few lines down would somehow be "1 cell left of the one changed" and the range "A3:K3" to copy would be "1 left:9 right" of the one changed. I know this may be impossible or just not how VBA language works, but I thought it'd be a lot easier than 50 repititions of if..then...else....
I have created a calendar to enter various locations. At present they are set up using VBA and are called from buttons on the calendar. What I want to do is add a button to the worksheet and then edit its text. I will call a subroutine to use the edited text as the name I want in the calendar. What I cannot figure out is how to return the index of the button have just added so i can alter the button text. I appreciate I could cycle through all the shapes on the sheet but as I do not know the number of the one I have just added I cannot work on the correct one. I suppose I could cycle through all of them and use a carrier to count how many there are then add one to get the latest but that seems very crude not mention time consuming as I allready have 504 text boxes on the claendar.
My company uses two excel workbooks to track campaigns, I'm looking to create a VBA script that can detect when a new worksheet is added to the other workbook when it is activated. To provide a more concrete example:
In workbook one there are worksheets : Apple, Orange, and Pear
In workbook two there are rows Titled: Apple, Orange, and Pear. Each row has formulas that pull from the specific worksheet.
Then a 4th worksheet, Grape, is added to workbook one. I'm aiming to make a script/button which when activated would notice that there is not a corresponding row named Grape and create one.
However, more simply, I could also make this work if I could just create a Script which when activated populated a column in workbook two with all the worksheet names from workbook one.
I was wondering if it is possible to update links from one worksheet to another that contains a running tally - even when another worksheet is added and needs to be linked to the running tally as well?
I have attached a sample workbook. What I have is a summary sheet ( Sum Hrs CMS) that has SUMIF calculations for a series of rows in the Estimate Sheet.
The problem that I have run into is - when you press the Add New Sheet button on the Estimate sheet, it copies hidden sheet and inserts it at the end of the workbook, however I then need the hours in the CMS portion to link to the summary sheet. What I was wondering is how do the links on the 'Sum Hrs CMS' sheet include this new sheet and the data that is entered on it?
I need VBA code to automatically send an email notification when data is added to worksheet. I am not very familiar with writing code and have been using other code from other posts. Ideally I would like it to send an email notification with the added information attached, in this case it would be Row # and Columns A thru O.
I want cell C2 data in Number format or (some options) not in date (Format cell) so that I can sorting perfectly bcoz I am having some problem in sorting. If I want data age less than 25 that is not sorting.
I have a spreadsheet that has tons of entries for revenues and expenses. Some cells on the rows with revenues have a different format than these same cells on the rows with expenses.
The problem is that, when I sort the rows to organize them by date, Excel seems to only organize the values in the cells, screwing up all the formats, mixing the revenues format with the expenses format.
Is there any way to organize the information maintaining each cell's formats?
I have one worksheet in, which I have to show the accumulated amount found in another worksheet within the same workbook where the value added will be accumulated only when the criteria is met. I have enclosed herewith a sample of what I am trying to do since it is long to explain in writing. As the chinese proverb says: "better see once than hearing/reading 1000 of words.
I need help with a macro for copying and pasting of cells. I believe this should not be a problem for the Excel VBA experts, but for someone who can only record macro, I'm really at a loss.
Attached is a sample file, where sheet 'Source' is an example of the sheet from which data are to be copied. The other sheet, sheet 'Final' is an example of the final format that I need. The reason I'm doing this is I'm planning to upload my data into Access and so I need to convert them into a list format.
List of target columns in sheet 'Final' and source cells in sheet 'Source':
Column A: Biz ID - not sure if I really need this, by right it should be listed automatically once I paste the data Column B: B2 of 'Source' Column C: B2 of 'Source' Column D: B1 of 'Source' Column E: row 6, relevant column column F: column K column G: row 5, relevant column column H: the specific amount
So basically I'm creating an entry for every amount in the table.
We have created a macro that basically looks for rows that contain an "H" and hides the row if it does.
Users can add new rows throughtout the year to this spreadsheet. and based on certain criteria, an H or U will be placed in a hidden column which the macro looks at and hides any row it finds an H.
The user has to click on the button that has the macro assigned to it once they have finished working on the spreadsheet.
The problem we're finding is that for users who insert/delete rows, once they click the button it takes up to 15 seconds to run through macro (which is ok). However, users who haven't added or deleted any rows and who click the button, they have to wait upto 5 minutes (which isn't ok) for the macro ro run.
We can't figure out why the macro takes longer to run when no changes have been made?
I have a worksheet in Excel which contains scores for a quiz I am organizing. The rows contain the team names, the columns the scores per round per team. I would like to have the worksheet automatically sort the columns in descending order (so that the winner will come out on top after the quiz has finished), everytime I change something (everytime a score is updated). I can't find anything in Excel which would allow me to do that, so I'm guessing it's only possible in VBA? Unfortunately, I don't know anything about VBA, so I'm stuck.
These are the ranges I would like to have sorted, in order of priority:
Row 1 is the row with the column titles (Round 1, Round 2,...). C2: C26 N2:N26 M2:M26 L2:L26 K2:K26 J2:J26 I2:I26 H2:H26 G2:G26 F2:F26 E2:E26 D2:D26
I found the following "sort worksheet tabs" code by searching through the threads.
Sub SortSheets() Dim lCount As Long, lCounted As Long Dim lShtLast As Long Dim lReply As Long
lReply = MsgBox("To sort Worksheets ascending, select 'Yes'. " _ & "To sort Worksheets descending select 'No'", vbYesNoCancel, "Ozgrid Sheet Sort") If lReply = vbCancel Then Exit Sub
lShtLast = Sheets.Count
This code works fine but I need to adjust it a little. I have over 70 worksheets that will need to be sorted. At the same time, there are about 6 worksheets that I dont want to sort and want to keep right infront all the time.
I basically need a macro to sort the sheet by V, U, T starting from row 3 and ending before the last vechicle. This is the problem though, the last vehicle ends everytime right before Car # in column A. So in other words in this example i would need it sorted by v u t, starting from 3 down to row 12. It ends at 12 because the next line includes car and a number.
Another sheet might have a longer list of vehicles and might end at row 100 before the next line has car number .
It always starts at 3, but the ending is dynamic where it should stop its selection before "car number ".
I would also like it to work on the current sheet im on, because i have up to 100 sheets like this and would not want it name dependant. Just want to click on a tab, and run a macro and have it sort from 3 down to the line before car in column A.............