2013-05-03 7 views
0

Я хочу показать пользователю определенную информацию, которая существует на отдельном листе, всякий раз, когда он нажимает кнопку.Отображение только определенного диапазона данных

Я могу настроить Excel на «идти» на этот рабочий лист в стартовой строке диапазона, но я не мог найти способ скрыть все остальное.

Есть ли какой-то метод для этого, или мне нужно скрыть все строки и столбцы?

+0

Вы должны поместить данные в новый пустой лист или вы хотите скрыть все, кроме данных в существующем листе? –

+0

Я понимаю, что это было сомнительно - я хочу скрыть все остальное. – ftkg

+0

Если возможно, покажите его в виде всплывающего окна - msgbox не режет его. – ftkg

ответ

3

Вставьте UserForm в проект VB рабочей книги.

Добавить элемент управления ListBox в пользовательскую форму.

Затем сделать что-то вроде этого кода в коде UserForm_Activate событий:

Private Sub UserForm_Activate() 
Dim tbl As Range 

Set tbl = Range("B2:E7") '## Change this to capture the rang you need ' 

Me.Caption = "Displaying data from " & _ 
    ActiveSheet.Name & "!" & tbl.Address 

With ListBox1 

    .ColumnHeads = False 
    .ColumnCount = tbl.Columns.Count 
    .RowSource = tbl.Address 
End With 

End Sub 

Который дает неотформатированные данные из диапазона:

Screenshot of table linked to userform

+0

Спасибо. У меня возникли проблемы с попыткой автосохранения столбцов. – ftkg

+0

столбцов в пользовательской форме? они могут быть изменены с помощью VBA, но я не знаю точного кода с моей головы. Если вы немного поиграете с этой подпрограммой и в окне «Локалисты», создайте некоторые переменные, чтобы перебирать их .columns.count и манипулировать их ширинами по мере необходимости. –

0

Если вы record a macro и спрячете несколько столбцов и строк вручную, код будет подготовлен для вас, и вы увидите, как это делается.

+0

Макросъемка создает много плохого кода. В этом случае это заставит экран переключиться на лист, который мы хотим спрятать, прежде чем скрывать строки, показывая пользователю на мгновение именно то, что мы пытаемся скрыть от них. –

+0

@DeniseSkidmore макросъемка служит отличной целью разоблачить почти каждое действие - к ошибке. Затем разработчик должен удалить «плохой» или нежелательный код и настроить записанный код в соответствии с его точными потребностями. –

+0

Ну, так как автор мог добраться до диапазона, который ему нравится, я полагаю, он понимает достаточно, чтобы выбрать нужный ему код. –

2

Чтобы экспортировать диапазон, как изображение, вы могли бы создайте изображение в UserForm вместо Listbox. Тогда этого должно быть достаточно, чтобы вы начали.

Screenshot of image in UserForm

Как вы можете видеть из этого экрана, изображение не всегда может выйти очень четко. Кроме того, если вы работаете с большим диапазоном ячеек, изображение может не поместиться на 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 
+0

Я получаю «Ошибка автоматизации» на 'ocht.Chart.Export Имя файла: = fname, FilterName: =" JPG ", любая идея? – ftkg

+0

Нет. Какую версию Excel вы используете? Этот код отлично работает для меня в Excel 2010 Win 7 64b. Немного изменился из некоторого кода, который я обычно использую для отображения изображений в пользовательских формах в PowerPoint, где работает тот же метод ... –

+0

Хорошо, я получил его - путь, который я использовал, по какой-то причине не работал (C: \\). – ftkg

Смежные вопросы