Solved

VBA Access: Repeated Formatting - How do I create a public function for this?

Posted on 2014-10-10
5
180 Views
Last Modified: 2014-10-10
Hi there!
I have some VBA code that involves a lot of formatting. My code is super long because of this, which is...distracting.

I would like to put the formatting part of the code into a public function so that I can just call the formatting with one word, but I am not sure who to do this with formatting. It isn't really a function (no "sub" at the front and no "end sub" at the end). It is just a chunk of code that formats. And I use it repeatedly, so it just be so great if I could make this work.

Any ideas?
0
Comment
Question by:Megin
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 48

Expert Comment

by:Dale Fye (Access MVP)
ID: 40373628
Can you give more details about what it is formatting?

Generally, you would simply cut the code that you want to create a procedure from and paste it into a new code module.  But depending on what you are formatting, you might also have to pass some objects.  I do this with Excel all of the time, one subroutine that accepts objects for XL (Excel application), WBK (workbook), and SHT (worksheet).  It then loops through the header row looking at the column names and formats the columns according to a predefined parameters.

Then you simply call that subroutine from your original code, making sure you pass in all of the objects that are needed to perform whatever formatting you are doing.
0
 

Author Comment

by:Megin
ID: 40373675
This is the type of chunk that I would like to shorten:
With C
    .Font.Name = "Arial"
    .Font.Bold = True
    .Font.Size = 12
    .Interior.ColorIndex = 15
    .Borders(xlEdgeTop).LineStyle = xlContinuous
    .Borders(xlEdgeTop).Weight = xlThin
    .Borders(xlEdgeTop).ColorIndex = xlAutomatic
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeBottom).Weight = xlThin
    .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    .Borders(xlEdgeRight).LineStyle = xlContinuous
    .Borders(xlEdgeRight).Weight = xlThin
    .Borders(xlEdgeRight).ColorIndex = xlAutomatic
    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Borders(xlEdgeLeft).Weight = xlThin
    .Borders(xlEdgeLeft).ColorIndex = xlAutomatic
    .Borders(xlInsideVertical).LineStyle = xlContinuous
    .Borders(xlInsideVertical).Weight = xlThin
    .Borders(xlInsideVertical).ColorIndex = xlAutomatic
    .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    .Borders(xlInsideHorizontal).Weight = xlThin
    .Borders(xlInsideHorizontal).ColorIndex = xlAutomatic
    .WrapText = True
    .RowHeight = 54.75
End With

Open in new window


I have this all over my code.

It is formatting an Excel spreadsheet.
0
 
LVL 11

Accepted Solution

by:
Dany Balian earned 500 total points
ID: 40373736
if all the linestyles are the same, and all colorindexes are the same within the same block, you can use something like this:

public sub formatItem(byref obj, byval fontName as string, byval fontbold as boolean, byval fontsize as integer, byval interiorcolorindex as integer, byval colorindex as integer, byval linestyle as integer, byval weight as integer, byval wraptext as boolean, byval rowheight as double)
With obj
    .Font.Name = fontname
    .Font.Bold = fontbold
    .Font.Size = fontsize
    .Interior.ColorIndex = interiorcolorindex
    .Borders(xlEdgeTop).LineStyle = linestyle
    .Borders(xlEdgeTop).Weight = weight
    .Borders(xlEdgeTop).ColorIndex = colorindex
    .Borders(xlEdgeBottom).LineStyle = linestyle
    .Borders(xlEdgeBottom).Weight = weight
    .Borders(xlEdgeBottom).ColorIndex = colorindex
    .Borders(xlEdgeRight).LineStyle = linestyle
    .Borders(xlEdgeRight).Weight = weight
    .Borders(xlEdgeRight).ColorIndex = colorindex
    .Borders(xlEdgeLeft).LineStyle = linestyle
    .Borders(xlEdgeLeft).Weight = weight
    .Borders(xlEdgeLeft).ColorIndex = colorindex
    .Borders(xlInsideVertical).LineStyle = linestyle
    .Borders(xlInsideVertical).Weight = weight
    .Borders(xlInsideVertical).ColorIndex = colorindex
    .Borders(xlInsideHorizontal).LineStyle = linestyle
    .Borders(xlInsideHorizontal).Weight = weight
    .Borders(xlInsideHorizontal).ColorIndex = colorindex
    .WrapText = wraptext
    .RowHeight = rowheight
End With

Open in new window


and you call it using:
call formatitem(c, "Arial", True, 12, 15, xlAutomatic, xlContinuous, xlThin, True, 54.75)

Open in new window

0
 

Author Closing Comment

by:Megin
ID: 40373791
That was exactly what I was looking for.

Thank you!
0
 
LVL 11

Expert Comment

by:Dany Balian
ID: 40373850
Glad i could help :)
0

Featured Post

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
In earlier versions of Windows (XP and before), you could drag a database to the taskbar, where it would appear as a taskbar icon to open that database.  This article shows how to recreate this functionality in Windows 7 through 10.
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

695 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question