VBA to jump to certain cell after changing contents of one - vba

I am creating a spreadsheet that I want to force people to input certain information. Is there anyway of forcing people when changing the contents of a cell that once return or tab is entered that it jumps to another cell.
For Instance:
CELL C2 (Date) 01/01/2001
CELL C4 (EMPTY) JUMP HERE
So above I want someone to enter a date in C1 and when they change this is jumps to C3.
Kris

The selection of a specific cell in the first sheet:
ThisWorkbook.Sheets(1).Range("A2").Select
You can use name of the sheet as a string instead of 1 in sheets(1)

Related

Copy from cell range on 'sheet1' to same range on 'sheetB3'

I had a hard time formulating the title, but I'll explain better here.
What I want to do is use a VBA-macro that I'm activating from a button click to copy the data found in the range B13:E52 on sheet1 to the same range on sheet"B3", where B3 is found on sheet1 containing the sheet name I want to copy to. This dynamically updates depending on what item is chosen in a list.
I know how to create my button, copy between sheet etc but I'm having a hard time figuring out how to reference the target sheet name that's contained in B3 for the target in VBA.
with sheet1
.range("b13:e52").copy sheets(.range("b3").value).range("b13")
end with
If you are looking to copy only the vlaues (without the formats or formulas), then you can use :
With Worksheets("Sheet1")
Worksheets(.Range("B3").Value).Range("B13:E52").Value = .Range("B13:E52").Value
End With

vlookup not finding vba cells

I have a table that uses a bit of vba to populate column b with id numbers.
I then have column c as a vlookup that gets a name based off the id, from another sheet. The vlookup in the first cell works fine and returns the correct name, John Doe.
When I drag down, the rest of the cells in column c return the same name as the first, John Doe. The vlookup in the other cells is exactly the same, except the reference cell does change, as expected....so, c2 = vlookup(b2, $range, col, false), c3= vlookup(b3..), c4=vlookup(b4,..), etc.
The catch is, when I look at the vlookup in c3 and click on b3, the cell changes to find the correct name (no longer John Doe). So it works fine. And I have to do that for every cell in column c.
It's like vlookup isn't aware that column b changed? Is that something that happens with vba? Is there a refresh command or some other way for vlookup to register that column b has changed without having to click on each individual vlookup function?
If you've entered a formula in a cell, then copied the formula to another cell and Excel hasn't updated your results, that means that Calculation Mode is Manual.
To fix it (depending on version, this is for Excel 2010)
Click on Formulas in the Ribbon
Click on Calculation Options
Click on Automatic
If you need to have it calculate manually (valuable for making many formula changes in a large worksheet):
Click on Formulas in the Ribbon
Click on Calculate Now to calculate the entire workbook, or
Click on Calculate Sheet to calculate the current worksheet
You can skip all the clicking by pressing F9 to Calculate Now or Shift-F9 to Calculate Sheet.

Working with merge and center cells in Excel using VBA

If I take a range over merge and centered cells in excel, are each of them addressed as single cells or the group of cells constituting them? For example, if the cells A1 to A10 are merged and I do a
Worksheets(1).Range("A5")
Would this return the range of a single cell among those constituting the merged cell or a range consisting the merged cell itself? And what value would it contain if I get its value?
In other words, how would you represent range over merged cells in excel VBA?
Also, how can I get the range of the non merged cells adjacent to the length of this merged cell?
In other words, how would you represent range over merged cells in excel VBA?
By addressing it with the top left cell. Ex: "A1" in this case.
When in doubt, check it yourself first. If still in doubt, search google or whatever search engine you use. Still if something is unclear, ask :)
Would this return the range of a single cell among those constituting the merged cell or a range consisting the merged cell itself? And what value would it contain if I get its value?
It would return a single cell A5 which doesn't have anything in it because when you merge cells the data from the top left cell is kept and rest discarded. The reason why I say discarded is that if you now unmerge the cells, you will not get your values back.
Best way to check:
Let's say A1 to A10 had 1,2,3..10. Merge them. The cell will now have only 1
Try this in Immediate window
?Range("A5").Value
You will get nothing. Similarly if you want to write to it, you cannot use Range("A5").Value = "Blah". You have to address it with the top left cell. For example
Range("A1").Value = "Blah"

Get data from sheet depending on cell value

I have a spread sheet that has multiple sheets, the first being "Main Sheet". The subsequent sheet names are the same as the values in column A of "Main Sheet".
Eg:
Main Sheet
Column A5 = 12345
Column A6 = 23456
I want to get the value of cell "Main Sheet"(B5) from sheet "12345"(B10) (the value in "Main Sheet"(A5)) and the value of cell "Main Sheet"(B6) from sheet "23456"(B10).
As the "Main Sheet" is continuously growing, I need to do this by a formula.
Any suggestions?
Your notation makes it seem like you're not using MS Excel, but if you ARE, this should solve your problem.
You will want to use the INDIRECT function. It will turn a string into a reference to a cell.
This means that you can do something like the following (in B1 of Main Sheet):
=INDIRECT(CONCATENATE("'", 'Main Sheet'!A1, "'!B10"))
Assuming that:
'Main Sheet'!A1 == abc123
The formula will give you the contents of:
'abc123'!B10

How do I increment cell in Excel VBA script?

I have a data in excel which I want to make a VBA script to copy it into a new worksheet but in a different way.
For example, I have this in sheet1 in A1~A3 cells.
Adam(A1)
Sam(A2)
Smith(A3)
I want to use these cells and create the following in another worksheet using refedit control.
Adam(A1)
Adam(A2)
Adam(A3)
Adam(A4)
Sam(A5)
Sam(A6)
Sam(A7)
Sam(A8)
Smith(A9)
Smith(A10)
Smith(A11)
Smith(A12)
I have refedit control in place in VBA script, but I'm not sure how to increment cell numbers to make it copy and paste into a new worksheet. I would like to use refedit control so that I can assign any cells and make it copy and repeat itself. How do I do this in VBA script?
Check out the Range Rows, Cells, and Address properties. This should help. Your question is too vague for a direct answer.
(This will get you started.)
Range.Row Property
http://msdn.microsoft.com/en-us/library/bb221550(office.12).aspx
Returns the number of the first row of the first area in the range. Read-only Long.
Example
For Each rw In Worksheets("Sheet1").Rows
If rw.Row Mod 2 = 0 Then
rw.RowHeight = 4
End If
Next rw
To increment cells in Excel VBA, you can use the Offset-property of the Range-object, e.g.
ActiveCell.Offset(1, 1).Select
will select the cell one row down and one column to the right of the active cell.
To add to Geoffrey's answer about active cell - it would also require that you activate the sheet you are looking to input your values if it is a different sheet from the one that is currently active. Additionally you would have to activate a cell to use activecell and the activecell offset property.
For example
'Activates the name of the sheet you would like to activate
Sheets("Sheet2").Activate
'Activates cell A1
Range("A1").Activate
'Activates cell one row down, one column right
ActiveCell.Offset(1,1).Select
'if current sheet is not activate you just do Sheets("Sheet2").Range("A1").Activate
The offset property of ActiveCell refers to other cells based off of the current active cell.
For example-
Offset(row,column) -
First Argument -Positive values as the first argument refer you to rows below the current active cell and Negative values refer you to rows above the current active cell
Second Argument-Positive values as the second argument refer you to columns right of the current active cell and Negative values refer you to columns left the current active cell