Чтобы экспортировать диапазон, как изображение, вы могли бы создайте изображение в UserForm вместо Listbox. Тогда этого должно быть достаточно, чтобы вы начали.
Как вы можете видеть из этого экрана, изображение не всегда может выйти очень четко. Кроме того, если вы работаете с большим диапазоном ячеек, изображение может не поместиться на UserForm и т.д. Я оставлю выясняя эту часть к вам :)
Private Sub UserForm_Activate()
Dim tbl As Range
Dim imgPath As String
Set tbl = Range("B2:E7") '## Change this to capture the rang you need '
imgPath = Export_Range_Images(tbl)
Caption = "Displaying data from " & _
ActiveSheet.Name & "!" & tbl.Address
With Image1
If Not imgPath = vbNullString Then
.Picture = LoadPicture(imgPath)
.PictureSizeMode = fmPictureSizeModeClip
.PictureAlignment = 2 'Center
.PictureTiling = False
.SpecialEffect = 2 'Sunken
End If
End With
End Sub
Function Export_Range_Images(rng As Range) As String
'## Modified by David Zemens with
' credit to: _
' http://vbadud.blogspot.com/2010/06/how-to-save-excel-range-as-image-using.html ##'
Dim ocht As Object
Dim srs As Series
rng.CopyPicture xlScreen, xlPicture
ActiveSheet.Paste
Set ocht = ActiveSheet.Shapes.AddChart
For Each srs In ocht.Chart.SeriesCollection
srs.Delete
Next
'## Modify this line as needed ##'
fname = "C:\users\david_zemens\desktop\picture.jpg"
On Error Resume Next
Kill fname
On Error GoTo 0
ocht.Width = rng.Width
ocht.Height = rng.Height
ocht.Chart.Paste
ocht.Chart.Export Filename:=fname, FilterName:="JPG"
Application.DisplayAlerts = False
ocht.Delete
Application.DisplayAlerts = True
Set ocht = Nothing
Export_Range_Images = fname
End Function
Вы должны поместить данные в новый пустой лист или вы хотите скрыть все, кроме данных в существующем листе? –
Я понимаю, что это было сомнительно - я хочу скрыть все остальное. – ftkg
Если возможно, покажите его в виде всплывающего окна - msgbox не режет его. – ftkg