powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Построение графика
6 сообщений из 6, страница 1 из 1
Построение графика
    #38793261
AlinaMalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выдает постоянно ошибку : Else without if.
Что с этим делать?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub график()

  
  nrow = Cells(31, 14).Value + Cells(31, 16).Value
  ncell = nrow + 1
 
 
  If Cells(31, 16).Value = 0 Then Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
     ElseIf Cells(31, 16).Value = 15 Then Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
     Else: Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
  End If
  End If 
       

  
  Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.ChartTitle.Characters.Text = "" & Cells(25 + Cells(31, 16).Value, 1) & ""

End Sub

Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Построение графика
    #38793269
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариантов записи If может быть два:

Код: vbnet
1.
If условие Then действие Else действие


Код: vbnet
1.
2.
3.
4.
5.
If условие Then
  действие
Else
  действие
End If


вы не следуете ни одному из них
...
Рейтинг: 0 / 0
Построение графика
    #38793272
AlinaMalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
потому что мне нужно прописать 3 условия. я пробовала через case, но там проблема с объектом range
...
Рейтинг: 0 / 0
Построение графика
    #38793281
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
If условие Then
  действие
ElseIf условие Then
  действие
Else
  действие
End If



Что за проблемы с Range? Ваше условие вполне вписывается
...
Рейтинг: 0 / 0
Построение графика
    #38793810
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlinaMalinaShocker.Pro,
потому что мне нужно прописать 3 условия. я пробовала через case,
но там проблема с объектом rangeкак пробовали
покажите
...
Рейтинг: 0 / 0
Построение графика
    #38793881
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlinaMalina,

Исполнение Вашего условия будет приводить всегда к одинаковому результату, т.к. выражения, стоящие после условий, одинаковые. В таком случае в условии вообще нет необходимости. Допустим однако, что выражения были бы разные, тогда условие можно записать так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
If Cells(31, 16).Value = 0 Then
    Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
ElseIf Cells(31, 16).Value = 15 Then
    Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
Else
    Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
End If



Заметим, что Cells(31, 16).Value используется дважды, поэтому проще присвоить значение переменной и использовать ее. Это упростит работу в будущем, если потребуется использовать большее количество условий или другую ячейку:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim iVal As Integer

iVal = Cells(31, 16).Value

If iVal = 0 Then
    Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
ElseIf iVal = 15 Then
    Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
Else
    Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range("C79:G79,C" & nrow & ":G" & ncell)
End If



Допустим, что выражения, стоящие после условий отличались бы лишь областью, например
Код: vbnet
1.
2.
3.
"C79:G79,C" & nrow & ":G" & ncell
"H79:L79,H" & nrow & ":L" & ncell
"M79:Q79,M" & nrow & ":Q" & ncell


В таком случае имеет смысл объявить переменную для адреса области по тем же соображениям, что и для значения ячейки выше, и изменять значение этой переменной, а после проверки условия использовать ее:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim val As Integer
Dim sRng As String

val = Cells(31, 16).Value

If val = 0 Then
    sRng = "C79:G79,C" & nrow & ":G" & ncell
ElseIf val = 15 Then
    sRng = "H79:L79,H" & nrow & ":L" & ncell
Else
    sRng = "M79:Q79,M" & nrow & ":Q" & ncell
End If

Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range(sRng)



Здесь можно было бы сделать еще одну оптимизацию, и создать переменную, которая хранила бы основу для адреса, а в условии лишь подставлять необходимые изменения, но мы не знаем, чем именно выражения отличаются на самом деле и поэтому оставим код как есть. Однако, в данном конкретном случае имеет смысл использовать Select Case, что позволит избавиться от переменной iVal (хотя я отдал бы предпочтение оставить ее), несколько упростит читаемость кода и облегчит добавление новых условий:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim sRng As String

Select Case Cells(31, 16).Value
    Case 0
        sRng = "C79:G79,C" & nrow & ":G" & ncell
    Case 15
        sRng = "H79:L79,H" & nrow & ":L" & ncell
    Case Else
        sRng = "M79:Q79,M" & nrow & ":Q" & ncell
End Select

Worksheets("ЖЦК_ОСА").ChartObjects(1).Chart.SetSourceData Source:=Range(sRng)



Надеюсь Вам это поможет. Удачи.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Построение графика
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]