7

I am looking for a way to insert text into the background of a cell, so that I can still enter numbers on top of that text - similar to a watermark except for an individual cell. Any ways to do this, preferably without using a macro (but open to these solutions as well)?

braX
  • 11,506
  • 5
  • 20
  • 33
Scott Jones
  • 71
  • 1
  • 1
  • 2

4 Answers4

11

Similar to Andrews post, this is the VBA version which formats the shape correctly and also allows direct selecting of cells.

enter image description here

Code MODULE:

Sub watermarkShape()
Const watermark As String = "watermark"
Dim cll As Range
Dim rng As Range
Dim ws As Worksheet
Dim shp As Shape

    Set ws = Sheet1
    Set rng = ws.Range("A1:F10") 'Set range to fill with watermark

    Application.ScreenUpdating = False

    For Each shp In ws.Shapes
        shp.Delete
    Next shp

    For Each cll In rng

        Set shp = ws.Shapes.AddShape(msoShapeRectangle, 5, 5, 5, 5)

        With shp
            .Left = cll.Left
            .Top = cll.Top
            .Height = cll.Height
            .Width = cll.Width

            .Name = cll.address
            .TextFrame2.TextRange.Characters.Text = watermark
            .TextFrame2.TextRange.Font.Name = "Tahoma"
            .TextFrame2.TextRange.Font.Size = 8
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
            .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .TextFrame2.WordWrap = msoFalse
            .TextFrame.Characters.Font.ColorIndex = 15
            .TextFrame2.TextRange.Font.Fill.Transparency = 0.35

            .Line.Visible = msoFalse
'            Debug.Print "'SelectCell (""" & ws.Name & """,""" & cll.address & """)'"
            .OnAction = "'SelectCell """ & ws.Name & """,""" & cll.address & """'"

            With .Fill
                .Visible = msoTrue
                .ForeColor.ObjectThemeColor = msoThemeColorBackground1
                .Transparency = 1
                .Solid
            End With

        End With


    Next cll

    Application.ScreenUpdating = True
End Sub

Sub SelectCell(ws, address)
    Worksheets(ws).Range(address).Select
End Sub

UPDATE:

the example below assigns a watermark of the cell address to odd rows and leaves the even rows as the constant watermark. This is an exaple based on my comment that any cell can be assigned any watermark text based on whatever conditons you want.

enter image description here

Option Explicit

Sub watermarkShape()
Const watermark As String = "watermark"
Dim cll As Range
Dim rng As Range
Dim ws As Worksheet
Dim shp As Shape

    Set ws = Sheet1
    Set rng = ws.Range("A1:F10") 'Set range to fill with watermark

    Application.ScreenUpdating = False

    For Each shp In ws.Shapes
        shp.Delete
    Next shp

    For Each cll In rng

        Set shp = ws.Shapes.AddShape(msoShapeRectangle, 5, 5, 5, 5)

        With shp
            .Left = cll.Left
            .Top = cll.Top
            .Height = cll.Height
            .Width = cll.Width

            .Name = cll.address
            If cll.Row Mod 2 = 1 Then
                .TextFrame2.TextRange.Characters.Text = cll.address
            Else
                .TextFrame2.TextRange.Characters.Text = watermark
            End If
            .TextFrame2.TextRange.Font.Name = "Tahoma"
            .TextFrame2.TextRange.Font.Size = 8
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
            .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .TextFrame2.WordWrap = msoFalse
            .TextFrame.Characters.Font.ColorIndex = 15
            .TextFrame2.TextRange.Font.Fill.Transparency = 0.35

            .Line.Visible = msoFalse
'            Debug.Print "'SelectCell (""" & ws.Name & """,""" & cll.address & """)'"
            .OnAction = "'SelectCell """ & ws.Name & """,""" & cll.address & """'"

            With .Fill
                .Visible = msoTrue
                .ForeColor.ObjectThemeColor = msoThemeColorBackground1
                .Transparency = 1
                .Solid
            End With

        End With


    Next cll

    Application.ScreenUpdating = True
End Sub

Sub SelectCell(ws, address)
    Worksheets(ws).Range(address).Select
End Sub
  • Is there a VBA for customizing the text entered into the background of each cell? The final product of this looks great, I just would want the ability to customize what the text says for each cell. – Scott Jones Aug 15 '13 at 18:46
  • The line `.TextFrame2.TextRange.Characters.Text = watermark` assigns constant `watermark` to all cells. Just change the line `.TextFrame2.TextRange.Characters.Text = "Some Text"` to whatever text you want based on the cell range/address –  Aug 15 '13 at 19:10
9

You can use a custom number format (select the cell(s), hit Ctrl+1, number formats, custom) to specify a light-grey text to display when the cell value is 0 - Color15 makes a nice watermark color:

[Black]000000;;[Color15]"(order number)";@

watermarked cells

No messy shapes, no VBA, and the watermark disappears when the value is actually filled up.

And if you absolutely need to do it in VBA, then you can easily write a function that builds the format string based on some parameters:

Public Function BuildWatermarkFormat(ByVal watermarkText As String, Optional ByVal positiveFormat As String = "General", Optional ByVal negativeFormat As String = "General", Optional ByVal textFormat As String = "General") As String
    BuildWatermarkFormat = positiveFormat & ";" & negativeFormat & ";[Color15]" & Chr(34) & watermarkText & Chr(34) & ";" & textFormat
End Function

And then you can do:

myCell.NumberFormat = BuildWatermarkFormat("Please enter a value")
myCell.Value = 0

And you can still supply custom formats for positive/negative values as per your needs; the only thing is that 0 is reserved for "no value" and triggers the watermark.

myCell.NumberFormat = BuildWatermarkFormat("Please enter a value", "[Blue]#,##0.00_)", "[Red](#,##0.00)")
myCell.Value = -25
Mathieu Guindon
  • 69,817
  • 8
  • 107
  • 235
  • Couldn't the same be achieved with a conditional formatting rule? You could then still be able to use custom number formats, achieve the same effects, and use a rule that looks for blank cells versus cells just having a value of 0. – Brandon Barney Jun 30 '17 at 19:35
  • 1
    Though, in practice, I am not sure if there is a good way of including text with a Conditional Formatting rule :). – Brandon Barney Jun 30 '17 at 19:36
  • 1
    I thought of that after the fact. You could combine the two to get an even better effect. One rule which applies the watermark when empty using numberformat, and another rule which applies a different rule when non-empty (for example, a "000000" format). – Brandon Barney Jun 30 '17 at 19:39
  • 1
    Just to clarify, about the code for the custom format, the name of the color, in this case `[Black]`, must be in the Excel language. For example, in my case, the word "Black" gave me an error. I needed to change it to `[Negro]` (Spanish) – Metafaniel Sep 30 '20 at 16:51
  • 1
    @Metafaniel makes sense, it's the Excel object model (not VBA) that understands how `Range.NumberFormat` works. – Mathieu Guindon Sep 30 '20 at 18:21
7
  • Select the Cell where you want to make the Background.
  • Click "Insert" and insert a rectangular Shape in that location.
  • Right click on the shape - select "Format Shape"
  • Goto "Fill" and select "Picture or texture fill"
  • Goto “Insert from File” option
  • Select the picture you want to make water-mark
  • Picture will appear at the place of rectangular shape
  • Now click on the picture “right click” and select Format Picture
  • Goto “Fill” and increase the transparency as required to look it like a “Water Mark” or light beckground
  • This will get printed also.

taken from here

Andrew
  • 7,619
  • 13
  • 63
  • 117
  • +1 I always wondered why someone would want to put a picture in the background of a cell. Clever. ...actually it's just a somewhat transparent shape on top of the cell right? Doesn't that make selecting the cell somewhat of a pain though? – Mathieu Guindon Aug 12 '13 at 21:54
  • This is great for images - is there a way to enter text as the background? – Scott Jones Aug 15 '13 at 18:07
-1

Type your text in a cell anywhere. Copy it and it will be saved on the clipboard. Insert a rectangular shape anywhere. Right click and choose "Send to back". This will make sure it will be at the background. Right click and "Format Shape". Do to tab "Fill" and click on "picture or texture fill". At the "insert from" choose "clipboard". Now whatever text you have copied onto your clipboard will be in the rectangular shape. Resize the shape to fit the cell(s) you desired. Adjust however you like for example remove the rectangular lines, add shadow, change font, remove background etc.

Lee
  • 1