Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
morgen84
30 / 8 / 0
Регистрация: 30.09.2011
Сообщений: 33
1

Построение диаграммы. Создание нового тега и ошибка "type mismatch"

29.11.2012, 15:34. Просмотров 681. Ответов 5
Метки нет (Все метки)

Здравствуйте! После запуска макроса выдает ошибку run-time error 13 type mismatch в этом месте кода:
Кликните здесь для просмотра всего текста
Visual Basic
1
 X1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 3)).Value

Не могу разобраться в причине ее возникновения. Попытался уменьшить количество аргументов. Проблему не решило. Подскажите как исправить проблему.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 Sub Dobavlenie()
  'Dim y1 As String   ' Ошибка
Dim X1 As Variant
'Dim x1 As String Variant   ' Ошибка
Dim y1 As Variant, NomSerii  As Integer
Dim t1, t2, t3 As String
NomSerii = 0
 
     
  MyName = "19_10_12.xlsx"
  MyCharts = "Диаграмма1"
  MyDannie = "2_11_12"
  Workbooks(MyName).Worksheets(MyDannie).Activate
  'Определение координат искомого значения
  a1 = "Мощность ГТУ21"
  Set iLastCell = Cells.Find(What:="22MBY10CE901", LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlPrevious, SearchOrder:=xlByRows)
If Not iLastCell Is Nothing Then
iRowi = iLastCell.Row
iClmj = iLastCell.Column
'MsgBox (iRowi)
'MsgBox (iClmj)
End If
'Определение последней заполненой строки
iAddress1 = Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi, iClmj).SpecialCells(xlLastCell).Address
iRow1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi, iClmj), Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi, iClmj)).SpecialCells(xlLastCell).Row
iClm1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi, iClmj), Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi, iClmj)).SpecialCells(xlLastCell).Column
'MsgBox (iRow1)
'Workbooks(MyName).Worksheets(MyDannie).Cells(iRow, iClm + 1) = "проверка"
 'Изменение формата ячейки на дату
t1 = "dd/mm/yyyy hh:mm:ss ;@" 'для примера
t2 = "dd/mm/yyyy ;@"
t3 = "hh:mm:ss ;@"
    Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3) = Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj - 1).Value + Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj).Value
   
 'For i = iRowi + 7 To iRow1 Step 1
 For i = iRowi + 7 To 1000 Step 1
 Workbooks(MyName).Worksheets(MyDannie).Cells(i, iClmj + 3) = Workbooks(MyName).Worksheets(MyDannie).Cells(i, iClmj - 1).Value + Workbooks(MyName).Worksheets(MyDannie).Cells(i, iClmj).Value
 
Next i
'Дата дд,мм,гг
Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj - 1), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj - 1)).NumberFormat = t2
'Дата чч,мм,сс
Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj)).NumberFormat = t3
'Дата дд,мм,гг чч,мм,сс
Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 3)).NumberFormat = t1
    X1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 3)).Value
    y1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 1), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 1)).Value
        Workbooks(MyName).Sheets(MyCharts).Activate
        With Charts(MyCharts)
            
             If .SeriesCollection.Count >= 0 Then
             NomSerii = .SeriesCollection.Count
             NomSerii = NomSerii + 1
            .SeriesCollection.NewSeries
            .SeriesCollection(NomSerii).Name = "=""" & a1 & """"
            .SeriesCollection(NomSerii).XValues = X1
            .SeriesCollection(NomSerii).Values = y1
            End If
        End With
        
        End Sub

Заранее спасибо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2012, 15:34
Ответы с готовыми решениями:

Ошибка в коде при выводе "Type mismatch"
Здраствуйте, столкнулся с проблемой, ошибка в коде при выводе type mismatch Sub pr2() Dim x, y,...

Если str довольно длинная,то выскакивает ошибка "type mismatch"
Делаю ODBC запрос,пишу .commandtext=array(str),где str="........".Если str довольно длинная,то...

Ошибка при запуске программы "run time error 13 type mismatch"
сама задача: Определить количество элементов массива, принадлежащих промежутку отa до b (значения...

Ошибка "argument type mismatch"
Me.Controls("Label" & zahod + 1).Caption = num_cows(s, s1) Function num_cows(s, s1) k = 0 For...

Ошибка: "Type mismatch"
При запуске скрипта, возникает ошибка: "Type mismatch". Код цикла: For Z = sm + 3 To sm + 17 ...

5
sn_88
64 / 64 / 4
Регистрация: 21.06.2011
Сообщений: 166
29.11.2012, 16:12 2
А что у вас в практическом смысле означает переменная Х1?
0
morgen84
30 / 8 / 0
Регистрация: 30.09.2011
Сообщений: 33
29.11.2012, 16:15  [ТС] 3
Абцисса будущего графика - X1
Y1 - ордината
0
sn_88
64 / 64 / 4
Регистрация: 21.06.2011
Сообщений: 166
29.11.2012, 16:17 4
Тогда как может X1 быть диапазоном Range, когда Вы обозначили ее как Variant?

Visual Basic
1
 X1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 3)).Value
Разберитесь с типами данных

Range - это диапазон, а координатой может быть Cells
1
Казанский
14906 / 6308 / 1720
Регистрация: 24.09.2011
Сообщений: 9,977
29.11.2012, 17:16 5
morgen84, лист Workbooks(MyName).Worksheets(MyDannie) в момент работы кода активен (строка 13), поэтому не надо везде писать эту конструкцию. А если потом Вы захотите, чтобы код работал при другом активном листе, он не заработает, несмотря на эту конструкцию! Потому что перед Range тоже надо ее ставить. Иначе получится, что Вы составляете Range активного листа из ячеек другого листа!
То есть, следует писать либо
Visual Basic
1
2
'работает при активном листе Workbooks(MyName).Worksheets(MyDannie)
X1 = Range(Cells(iRowi + 7, iClmj + 3), Cells(iRow1, iClmj + 3)).Value
либо
Visual Basic
1
2
3
4
5
6
 'работает независимо от того, какой лист активен
with Workbooks(MyName).Worksheets(MyDannie) 
    '...
    X1 = .Range(.Cells(iRowi + 7, iClmj + 3), .Cells(iRow1, iClmj + 3)).Value
    '...
end with
Этот коммент не объясняет причину ошибки, но поможет разгрузить код и избежать ошибок в дальнейшем.
1
morgen84
30 / 8 / 0
Регистрация: 30.09.2011
Сообщений: 33
30.11.2012, 10:28  [ТС] 6
Проблему решил. Убрал присвоение диапазона данных переменным X1 и Y1.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  With Charts(MyCharts)
            
             If .SeriesCollection.Count >= 0 Then
            NomSerii = .SeriesCollection.Count
            NomSerii = NomSerii + 1
           .SeriesCollection.NewSeries
            .SeriesCollection(NomSerii).Name = "=""" & a1 & """"
            .SeriesCollection(NomSerii).XValues = Worksheets(Mydannie).Range(Workbooks(MyName).Worksheets(Mydannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(Mydannie).Cells(iRow1, iClmj + 3))
            .SeriesCollection(NomSerii).Values = Worksheets(Mydannie).Range(Workbooks(MyName).Worksheets(Mydannie).Cells(iRowi + 7, iClmj + 1), Workbooks(MyName).Worksheets(Mydannie).Cells(iRow1, iClmj + 1))
            .SeriesCollection(NomSerii).AxisGroup = 2 ' перенос на вспомогательную ось
            .SetElement (msoElementSecondaryValueAxisTitleRotated) 'вставка текста вертикальной оси
            .Axes(xlValue, xlSecondary).AxisTitle.Text = b1 ' Название вертикальной шкалы
            .Axes(xlValue, xlSecondary).MinimumScale = Nymin 'минимальная шкала по Y
            .PlotArea.Select
             Selection.Width = 615
            End If
        End With

Спасибо, кто откликнулся!
Еще вопрос как можно вернуть переменной текст из раскрывающегося списка на нужной вкладке?
21MBY10CE901§§XQ01
21LBA50CP001§§XQ01
Как вернуть значение в списке соответствующее этому тексту из раскрывающегося списка у меня получается. Мне нужен сам текст.
Visual Basic
1
a = Раскр. Список 1.Value
?
0
30.11.2012, 10:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 10:28

Почему вдруг начали появляться сообщения "ByRef argument type mismatch"?
Работал достаточно долго с программой. Проверял элементы по отдельности. Делаю сборку программы - и...

Исправить ошибку "Type Mismatch" в макросе
Доброе время суток.. При наладку 1с предприятия столкнулся с макросом который выводит бак код на...

Run-Time Error "13". Type mismatch
Всем доброго времени суток! Писал макрос на перенесение данных из таблиц в сводный лист, и, вроде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.