This is how I solved it.
/// <summary>
/// Purpose: Determine map scale once you are zoomed into the desired extent.
/// Cannot use m_pMap.MapScale because it cannot be used outside of ArcMap.
/// pMapFrame.MapBounds.Height is height of the DataFrame in feet and 7.8 is
/// the height of the DataFrame in inches. Before we calculate map scale, ground
/// distance needs to be in like units (inches), hence, pMapFrame.MapBounds.Height * 12.
/// </summary>
/// <returns>Int32</returns>
private static Int32 GetMapScale()
{
IMapFrame pMapFrame = new MapFrameClass();
IGraphicsContainer pGraphicsContainer = null;
try
{
pGraphicsContainer = m_pPageLayout as IGraphicsContainer;
pMapFrame = pGraphicsContainer.FindFrame(m_pMap) as IMapFrame;
double groundDistanceInInches = pMapFrame.MapBounds.Height * 12;
Int32 mapScale = Convert.ToInt32(groundDistanceInInches / 7.8);
return mapScale;
}
catch (Exception ex)
{
Queries.LogError(ex.StackTrace, ex.Message, "GetMapScale", "ensRegulatoryApplicationTools");
return 0;
}
finally
{
if (pMapFrame != null) { Marshal.ReleaseComObject(pMapFrame); pMapFrame = null; }
}
}