Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 719
  • Last Modified:

VBA to determine column letter of currently selected cell

Dear Experts:

this nice macro, courtesy by rorya from EE, inserts graphics into Column D, linking them. The network paths for all these graphics (hyperlinks) are all located in Column C.

This great macro works just fine.

Could somebody help me tweak this code with the following requirements:

Line 15: The column letter should not be hard coded (that was my initial requirement) but dynamic, i.e. line 15 should be based on the column of the currently selected cell, ie. the column letter is to be dynamic.

Help is much appreciated. Thank you very much in advance.

Regards, Andreas

Sub InsertPictures_Linked_To_File()

' by rorya from EE

   Dim C                           As Range
   Dim Image                       As Picture
 If MsgBox("Would you like to add pictures to the active worksheet, linking them?" & vbCrLf & vbCrLf & _
 "There must be network paths as hyperlinks to draw the picture from!", vbQuestion + vbYesNo, "Insert Pictures into Column D") = vbNo Then
        Exit Sub
        End If

  On Error Resume Next
   For Each C In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp))
      C.Offset(0, 1).Activate
            Set Image = ActiveSheet.Pictures.Insert(C.Value2) 'linktofile:=msoFalse
      With Image
         If .Height > Application.CentimetersToPoints(4) Then _
                  .ShapeRange.ScaleHeight Application.CentimetersToPoints(4) / .Height, msoCTrue
                  .TopLeftCell.RowHeight = Image.Height + 10

         If .Height > .Width Then
            With .ShapeRange
               .Rotation = 90
               .IncrementLeft .Height / 2 - .Width / 2
               .IncrementTop .Width / 2 - .Height / 2 + 5
            End With
        .TopLeftCell.RowHeight = Image.Width + 10
        Else: .ShapeRange.IncrementTop (5)
         End If
      End With
End Sub

Open in new window

1 Solution
zorvek (Kevin Jones)ConsultantCommented:

   For Each C In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp))


   For Each C In Range(ActiveCell.EntireColumn.Rows(2), ActiveCell.EntireColumn.Rows(Rows.Count).End(xlUp))

AndreasHermleAuthor Commented:
Hi Kevin,

thank you very much for your quick help. I will give it a try and let you know.

Regards, andreas
Rory ArchibaldCommented:
Purely for information (no points, please) you can also use Cells:

For Each C In Range(Cells(2, Activecell.Column), Cells(Rows.Count, Activecell.Column).End(xlUp))

Open in new window

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

You can use named range for this.

for ex:- Create a named range for "C2" as MyCell

to get
value - ThisWorkbook.Names("MyCell").RefersToRange.Value
column - ThisWorkbook.Names("MyCell").RefersToRange.Column
row - ThisWorkbook.Names("MyCell").RefersToRange.Row

to get value
num = SheetName.Cells(i, Nms("MyCell").RefersToRange.Column).Value

to assign value
SheetName.Cells(i, Nms("MyCell").RefersToRange.Column).Value = 10
AndreasHermleAuthor Commented:
Works great, exactly what I was looking for. Thank you very much.

Rory, thank you to you as well, I really appreciate it.

Regards, Andreas
AndreasHermleAuthor Commented:
To: senthilkumarsb

Hi, thank you very much for your great support. I will give it a try and then let you know.

Regards, Andreas

Featured Post

[Webinar On Demand] Database Backup and Recovery

Does your company store data on premises, off site, in the cloud, or a combination of these? If you answered “yes”, you need a data backup recovery plan that fits each and every platform. Watch now as as Percona teaches us how to build agile data backup recovery plan.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now