Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2016, 20:47   #1
merick
Пользователь
 
Регистрация: 31.10.2015
Сообщений: 30
По умолчанию создание формы с помощью модуля

Форма на картинке результат который должен ролучится.
Вот что я составил
Код:
Dim rCurrRange As Range
 
Sub ВыборТипаДиаграмм()
 
 Set rCurrRange = Selection
 
 frmChartType.Show
 
End Sub
Private Sub UserForm_Initialize()
 
 If rCurrRange.Columns.Count = 2 Then
 
  optPie.Enabled = True
 
  optPie.Value = True
 
  opt3DPie.Enabled = True
 
  opt3DPie.Value = False
 
  optClusterColumn.Enabled = False
 
  optClusterColumn.Value = False
 
  optStackedColumn.Enabled = False
 
  optStackedColumn.Value = False
 
  opt3DStackedColumn.Enabled = False
 
  opt3DStackedColumn.Value = False
 
  lblInfo.Caption = "Для этих данных рекомендуемый тип диаграмма - круговая"
 
 ElseIf rCurrRange.Columns.Count > 2 Then
 
  optClusterColumn.Enabled = True
 
  optClustorColumn.Value = True
  optStackedColumn.Enabled = True
 
  optStackedColumn.Value = False
 
  opt3DStackedColumn.Enabled = True
 
  opt3DStackedColumn.Value = False
 
  optPie.Enabled = False
 
  optPie.Value = False
 
  opt3DPie.Enabled = False
 
  opt3DPie.Value = False
 
  lblInfo.Caption = "Для этих данных рекомендуемый тип диаграммы - гистограмма"
 
 Else
 
  MsgBox "Выделенный диапазон не позволяет построить диаграмму"
 
  frmChartType.Hide
 
  End
 
 End If
 
End Sub
Private Sub cmdOK_Click()
 
 If optPie.Value = True Then
 
  Charts.Add
 
  ActiveChart.ChartType = xlPie
 
  ActiveChart.SetSourceDate Source:=rCurrRange, PlotBy:=xlColumns
 
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
 
  ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent, LegendKey:=False, HasLeaderLines:=True
 
   
 
 ElseIf opt3DPie.Value = True Then
 
  Charts.Add
 
  ActiveChart.ChartType = xl3DPie
 
  ActiveChart.SetSourceDate Source:=rCurrRange, PlotBy:=xlColumns
 
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
 
  ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent, LeqendKey:=False, HasLeaderLines:=True
 
 ElseIf optStackedColumn.Value = True Then
 
  Charts.Add
 
  ActiveChart.ChartType = xlColumnStacked
 
  ActiveChart.SetSourceDate Source:=rCurrRange
 
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
 
 ElseIf optClusterColumn.Value = True Then
 Charts.Add
 
  ActiveChart.ChartType = xlColumnClustered
 
  ActiveChart.SetSourceDate Source:=rCurrRange
 
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
 
 ElseIf opt3DStackedColumn.Value = True Then
 
  Charts.Add
 
  ActiveChart.ChartType = xl3DColumnStacked
 
  ActiveChart.SetSourceDate Source:=rCurrRange
 
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
 
 End If
 
 With ActiveChart
 
  .HasTitle = True
 
  .ChartTitle.Characters.Text = "Объем продаж"
 
  .ChartTitle.Select
  End With
 
 Selection.AutoScaleFont = True
 
 With Selection.Font
 
  .Name = "Arial"
 
  .FontStyle = "полужирный курсив"
 
  .Size = 14
 
  .Strikethrough = False
 
  .Superscript = False
 
  .Subscript = False
 
  .OutlineFont = False
 
  .Shadow = False
 
  .Underline = xlUnderlineStyleNone
 
  .ColorIndex = xlAutomatic
 
  .Background = xlAutomatic
 
 End With
 
 frmChartType.Hide
 
End Sub
Private Sub cmdCancel_Click()
 
 frmChartType.Hide
 
End Sub
при запуске программы она выдала ошибку, я не понимаю как ее исправить, помогите пожалуйста.
Изображения
Тип файла: jpg image185.jpg (14.6 Кб, 49 просмотров)
merick вне форума Ответить с цитированием
Старый 11.04.2016, 20:58   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

приложите еще файла с формой и приведите текст ошибки и номер строки ошибки
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 11.04.2016, 21:20   #3
merick
Пользователь
 
Регистрация: 31.10.2015
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
приложите еще файла с формой и приведите текст ошибки и номер строки ошибки
сам этот код создает форму я так понял, или я ошибаюсь?
Строка 4 ошибка 424
строка 7 ошибка 91
строка 77 metod or data member not found
строка 170 ошибка 424
merick вне форума Ответить с цитированием
Старый 11.04.2016, 21:27   #4
merick
Пользователь
 
Регистрация: 31.10.2015
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
приложите еще файла с формой и приведите текст ошибки и номер строки ошибки
вот модуль
Вложения
Тип файла: zip Module1.zip (1.0 Кб, 7 просмотров)
merick вне форума Ответить с цитированием
Старый 11.04.2016, 21:30   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
сам этот код создает форму я так понял, или я ошибаюсь?
глубоко ошибаетесь!
у Вас в проекте должна существовать форма и называться она должна
frmChartType, тогда frmChartType.Show - не будет ругаться.

а Private Sub UserForm_Initialize()
заполняет поля разных контролов, УЖЕ живущих к моменту инициализации в форме, стартовыми значения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.04.2016, 21:54   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

подозреваю, что Вы нафантазировали много лишнего, и что Ваша задача решается гораздо проще, стандартными способами...

а чтобы программно создать форму нужно:
а) в Параметрах Ексель "доверить доступ к обьектной модели проектов VBA"
б) где-то добавить форму в проект
Set frmChartType = ActiveDocument.VBProject.VBComponen ts.Add(vbext_ct_MSForm)
задать форме как минимум размеры
потом много раз
frmChartType.Add(...) ' добавить контролы
каждому задать положение и размер

от процедуры Private Sub UserForm_Initialize() проще вообще отказаться, а начальные значения задать при создании самих контролов

могу предположить, что через несколько месяцев упорных экспериментов у Вас что-то начнет работать

о, да! не забудьте, при закрытии файла удалять форму из проекта!!! а то при повторном открытии файла и создании формы у Вас в одном проекте не уживутся две формы с ОДИНАКОВЫМИ именами
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.04.2016, 22:01   #7
merick
Пользователь
 
Регистрация: 31.10.2015
Сообщений: 30
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
подозреваю, что Вы нафантазировали много лишнего, и что Ваша задача решается гораздо проще, стандартными способами...

а чтобы программно создать форму нужно:
а) в Параметрах Ексель "доверить доступ к обьектной модели проектов VBA"
б) где-то добавить форму в проект
Set frmChartType = ActiveDocument.VBProject.VBComponen ts.Add(vbext_ct_MSForm)
задать форме как минимум размеры
потом много раз
frmChartType.Add(...) ' добавить контролы
каждому задать положение и размер

от процедуры Private Sub UserForm_Initialize() проще вообще отказаться, а начальные значения задать при создании самих контролов

могу предположить, что через несколько месяцев упорных экспериментов у Вас что-то начнет работать

о, да! не забудьте, при закрытии файла удалять форму из проекта!!! а то при повторном открытии файла и создании формы у Вас в одном проекте не уживутся две формы с ОДИНАКОВЫМИ именами
Вот форма можете помочь с программой пожалуйста просто я не уверен что она вообще будет работать с этим кодом я делал по методичке которую нам дали к лабе, методичка и лаба 2000 года помогите пожалуйста а то я уже двое суток ее делаю.
Вложения
Тип файла: zip UserForm1.zip (1.3 Кб, 8 просмотров)
merick вне форума Ответить с цитированием
Старый 11.04.2016, 22:11   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

может ТС надо не в "нашем VBA" это задание?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 11.04.2016, 22:18   #9
merick
Пользователь
 
Регистрация: 31.10.2015
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
может ТС надо не в "нашем VBA" это задание?
Это нужно делать в экселе препод сказал работать по методичке и я смог по ней сделать этот код но походу код для excel 2000 не будет действовать для 2010 помогите пожалуйста, я бы лучше на с++ препод просто отказался от лаб по программе и решил нас помучить vba потому что ему лень самому что то для нас готовить
merick вне форума Ответить с цитированием
Старый 11.04.2016, 22:30   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

думаете с 2000-го года в байте изменилось количество бит
или поменялся синтаксис For
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]

видимо Вы далеки от VBA, как я от плюсов, а возможно даже дальше
Вложения
Тип файла: rar UF1.rar (13.1 Кб, 10 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С помощью процедур и функций модуля GRAPH на экране изобразить декартовую систему координат (по осям расставить цифровые значения) Deg Паскаль, Turbo Pascal, PascalABC.NET 3 18.05.2014 19:28
Как вызвать из модуля формы командную строку Swatch Microsoft Office Access 1 26.11.2010 12:08
Передать значение из модуля формы в другую процедуру Maxx Microsoft Office Excel 4 29.01.2010 13:23