Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Not Intersect(Target, Range("AA:AE")) Is Nothing Then rowsel = Target.Row Range("AC1").Value = Range("P" & rowsel).Value End IfEnd Sub
When a cell in a particular column is selected, the cell at the top of that column displays the content from a different column which resides in the same row as the selected cell.
For example, in the following screenshot, cell D7 is selected so cell D1 displays the content from cell B7 (ie from the same row as the active cell):
And then when a different cell in column D is selected — whether by use of the Up/Down arrows or by a mouse-click — the heading in cell D1 automatically changes to display the content in column B of the new active row. In other words, the spreadsheet does not have to recalculate for the heading to change. It simply occurs by changing which cell is active (eg D11 in this screenshot):
Here is a screenshot of how the code appears in the older workbook:
I know I need to save the workbook as a macro-enabled (.xlsm) file but which Insert option should be used and where should each part of the code be pasted?
Also, which parts of the code needs to be modified if I want to change the selected cell, heading, and/or content column(s)?
Can you explain their purpose? Oh, I just saw your comment. What does, "the code will exit" mean? If I select multiple cells, I'd like to still have the row one display show the top of the range I have selected.
Subodh Tiwari (Neeraj)
The code will Exit means, it won't perform any action defined in the code because not one cell is selected only but more than one cells so in that case you won't like the code to perform any predefined actions after making the selection on the sheet.
You used the variable rowsel to hold the selected cell's row but didn't declare that variable. It's always a good practice to declare all the variables along with their data types used in the code. So it's always better to have "Option Explicit" on top of the Module so that the compiler will let you know if you are using a variable in the code and didn't declare it or misspelled it.
WeThotUWasAToad
ASKER
Your code seems to work great Subodh* and thanks for the explanation.
The code will Exit means, it won't perform any action defined in the code because not one cell is selected only but more than one cells so in that case you won't like the code to perform any predefined actions after making the selection on the sheet.
Could I rewrite your first paragraph as follows?
"The code will exit" means it won't perform any of its defined actions if you happen to select more than a single cell.
That's how I understand it but please let me know if I'm wrong.
Incidentally, out of curiosity and with your earlier explanation and the screenshot included in my OP, I was able to obtain the desired functionality from the previous form of the code by:
Right-click > ThisWorkbook > View Code > paste:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Not Intersect(Target, Range("C:E")) Is Nothing Then rowsel = Target.Row Range("D1").Value = Range("B" & rowsel).Value End IfEnd Sub
After doing that, the only difference I noticed is that your code becomes functional as soon as it is inserted (ie even before saving the workbook, let alone saving it as an .xlsm file).
Also, I did not notice a problem with either code when extending the selection beyond a single cell.
Thanks again,
Steve
*Sorry I don't know this but should I refer to you as Subodh or Neeraj?
I noticed two lines in your code which I don't see in the original:
Open in new window
Can you explain their purpose? Oh, I just saw your comment. What does, "the code will exit" mean? If I select multiple cells, I'd like to still have the row one display show the top of the range I have selected.