Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблемы с выполнением процедур с разных компьютеров / 16 сообщений из 16, страница 1 из 1
05.03.2018, 21:47
    #39610899
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Компы:
Основной, Win7, Office2003, IP 10.112.52.112. На нем расшаренная папка с файлом "Общая" в модуле которого процедуры, использующиеся другими расчетными файлами.

Несколько других компов, с разной конфигурацией, в частности, Win7, Office2007. Назовем его условно "рабочий".
На рабочем компьютере доступ к расшаренной папке через ярлык с указанием пути к ней: "\\10.112.52.112\химия". Сначала открывают файл "Общая", затем, по мере надобности, расчетные файлы.

Если с этого рабочего из расчетного файла идет обращение к процедуре в файле "Общая" таким образом:
Код: vbnet
1.
Application.Run "\\10.112.52.112\химия\Расчеты\Общая.xls!Forming_List_Ingredients_For_Bottle", (перечисление параметров)

то возникает ошибка 1004 (считает, что вызываемая процедура отсутствует)

Обращение же следующим образом:
Код: vbnet
1.
Application.Run "Общая.xls!Forming_List_Ingredients_For_Bottle", (перечисление параметров)

ошибки не вызывает

С других компьютеров любой вызов процедуры проходит гладко. Куда копать? Назначение прав при создании ярлыка? Какие-то глюки с указанием пути к папке? А то я в системных нюансах не силен... Может, есть какой способ создания ярлыков в таких случаях?
...
Рейтинг: 0 / 0
05.03.2018, 22:06
    #39610900
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
КД,

Т.к. файл с макросами, вызываемыми через Run должен быть открыт - то путь вообще не надо указывать. Вызывайте везде вторым кодом и не будет проблем.
...
Рейтинг: 0 / 0
05.03.2018, 22:34
    #39610903
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
С одной стороны, да, раньше так и делал. Но штука в том, что процедуры в файле "Общая" меняются, а пользователи не всегда открывают его первым. В результате в текущей папке с расчетным файлом создается копия "Общая". Не факт, что она всегда будет актуальна. Для предотвращения и стал прописывать полный путь. А вот, оказывается, не всегда срабатывает...
Или я на воду дую? :)
...
Рейтинг: 0 / 0
06.03.2018, 13:30
    #39611183
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
И вот еще обнаружилось. При запуске расчетного файла на основном компе диаграмма строится без проблем.
При запуске той же процедуры на рабочем происходит ошибка - некорректно отрабатывает счетчик и пытается удалить несуществующую диаграмму:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'если диаграмма существовала - удаляем ее
intCountCharts = xlSheetIngr.ChartObjects.Count
If intCountCharts >= 1 Then
     For intCountCharts = xlSheetIngr.ChartObjects.Count To 0 Step -1
          xlSheetIngr.ChartObjects.Delete
     Next intCountCharts
End If

почему на разных компах один и тот же код по-разному отрабатывает?

ЗЫ. Не люблю Office2007...
...
Рейтинг: 0 / 0
06.03.2018, 15:23
    #39611279
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
КД,
проблема здесь:
Код: plaintext
For intCountCharts = xlSheetIngr.ChartObjects.Count To  0  Step -1
невозможно обратиться к объекту с индексом 0. Коллекция ChartObjects начинает отсчет с 1.
...
Рейтинг: 0 / 0
06.03.2018, 16:12
    #39611308
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Так этот ноль вроде как не индекс (он же не в скобках после наименования коллекции), а переменная со значением количества объектов коллекции?
...
Рейтинг: 0 / 0
06.03.2018, 16:16
    #39611312
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Count To 0 выполнится Count+1 раз
то есть на один раз больше, чем реальное количество
...
Рейтинг: 0 / 0
06.03.2018, 19:25
    #39611451
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
КД,

хотя...действительно, в Вашем случае параллельно. Вы же счетчик вообще не используете, а пытаетесь циклом удалить всю коллекцию сразу. Делайте уж тогда так:
Код: vbnet
1.
2.
3.
4.
dim oCh
For each oCh in xlSheetIngr.ChartObjects
     oCh.Delete
Next
...
Рейтинг: 0 / 0
06.03.2018, 19:27
    #39611454
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
The_PristВы же счетчик вообще не используетев том-то и дело, что он использует счетчик, но считает больше, чем надо )

Так что про ноль ты как раз правильно сказал )
...
Рейтинг: 0 / 0
07.03.2018, 11:43
    #39611725
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Shocker.Pro,

Да это-то да, я знаю. Но сам прикол в том, что строка
Код: vbnet
1.
xlSheetIngr.ChartObjects.Delete


не выполняет удаление конкретного элемента - она удаляет ВСЕ диаграммы на листе, что делает цикл избыточным :)
Т.е. по сути достаточно было бы таких строк:
Код: vbnet
1.
2.
3.
If xlSheetIngr.ChartObjects.Count > 0 Then
     xlSheetIngr.ChartObjects.Delete
End If


и никаких циклов вообще не надо.
...
Рейтинг: 0 / 0
07.03.2018, 11:45
    #39611727
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Обычно такой метод называется Clear
Но откуда тогда взялосьКДпытается удалить несуществующую диаграмму:
...
Рейтинг: 0 / 0
07.03.2018, 12:55
    #39611770
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Всем спасибо за советы! Благодаря им удалось победить ошибку.
Ну еще вопрос как к спецам. Один и тот же код построения диаграммы приводит к разным результатам на разных компах.
На основном (выглядит как и задумывалось)
...
Рейтинг: 0 / 0
07.03.2018, 12:56
    #39611772
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
На рабочем похоже, но немного не так
...
Рейтинг: 0 / 0
07.03.2018, 12:59
    #39611774
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Вот код построения диаграммы

Код: vbnet
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.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
Public Sub Creation_Diagram(mvarIngredientMethod As Variant, mlngCountRow As Long)
Dim strWorkbookName As String
Dim xlWorkbook As Excel.Workbook
Dim xlSheetIngr As Excel.Worksheet
Dim strIngredient As String
Dim rstValues As ADODB.Recordset
Dim co As ChartObject
Dim xlChart As Chart
Dim lngRowHeight As Long
Dim lngColumnWidth As Long
Dim intCountCharts As Integer
Dim strDiagSheetName As String
Dim intNomerKoefficient As Integer
Dim lngRow As Long
Dim intCountColumn As Integer
Dim strGroupBy As String
Dim varUnitValue As Variant
Dim intSeriesCollectionCount As Integer
Dim intNumberControlProcedure As Integer
Dim lngChartWidth As Long
       
On Error GoTo ErrorHandler
    
    Application.ScreenUpdating = False
    
    strWorkbookName = ThisWorkbook.Name
    Set xlWorkbook = Application.Workbooks(strWorkbookName)
    Set xlSheetIngr = xlWorkbook.Worksheets(mvarIngredientMethod)
    
    xlSheetIngr.Unprotect "1"
    
    xlSheetIngr.Select
        
    
    'если диаграмма существовала - удаляем ее
    If xlSheetIngr.ChartObjects.Count > 0 Then
        xlSheetIngr.ChartObjects.Delete
    End If
    
    
    lngColumnWidth = xlSheetIngr.Columns(1).Width
    lngRowHeight = xlSheetIngr.Rows(1).Height
    
    'при расчете ширины диаграммы учитываем количество результатов в ряду данных
    intNumberControlProcedure = mlngCountRow - 17
    
    If intNumberControlProcedure > 50 Then  'если результатов больше, чтобы не "наползали" друг на друга
        lngChartWidth = intNumberControlProcedure * 20
    Else
        lngChartWidth = lngColumnWidth * 20
    End If
    
        
    'Построение диаграммы
    Rem Set co = ActiveSheet.ChartObjects.Add(lngColumnWidth * 0.5, lngRowHeight * 10, lngColumnWidth * 20, lngRowHeight * 40)'первоначальный вариант
    Set co = xlSheetIngr.ChartObjects.Add(lngColumnWidth * 0.5, lngRowHeight * 17 + lngRowHeight * mlngCountRow, lngChartWidth, lngRowHeight * 40)
    Application.ScreenUpdating = True
    ActiveWindow.SmallScroll Up:=1000
    ActiveWindow.SmallScroll Down:=mlngCountRow
    
    
    'зададим имя для диаграммы
    Select Case mvarIngredientMethod
        Case "pH (П)"
            strIngredient = "водородного показателя"
        Case "NH4 (Ф)"
            strIngredient = "ионов аммония"
        Case "ХПК (Ф)"
            strIngredient = "ХПК"
        Case "НП (ИК1)"
            strIngredient = "нефтепродуктов"
        Case "Mn (Ф)"
            strIngredient = "марганца"
        Case "НП (Фл)"
            strIngredient = "нефтепродуктов"
        Case "P_общ (Ф)"
            strIngredient = "фосфора общего"
        Case "SO4 (Тб)"
            strIngredient = "сульфат-ионов"
        Case "фенолы (Фл)"
            strIngredient = "фенолов"
        Case "Cl (Т)"
            strIngredient = "хлоридов"
        Case "NH4 (Эф)"
            strIngredient = "катионов аммония"
        Case "NO3 (Эф)"
            strIngredient = "нитрат-ионов"
        Case "SO4 (Эф)"
            strIngredient = "сульфат-ионов"
        Case "АПАВ (Фл)"
            strIngredient = "АПАВ"
        Case "Fe (Ф)"
            strIngredient = "железа общего"
        Case "жиры (Г)"
            strIngredient = "жиров"
        Case "Cu (Ф)"
            strIngredient = "меди"
        Case "NO3 (Ф)"
            strIngredient = "нитрат-ионов"
        Case "NO2 (Ф)"
            strIngredient = "нитрит-ионов"
        Case "со (Г)"
            strIngredient = "сухого остатка"
        Case "PO4 (Ф)"
            strIngredient = "фосфат-ионов"
        
    End Select
    
    Rem Application.ScreenUpdating = False
    
    Select Case mvarIngredientMethod
        Case "pH (П)"
            strDiagSheetName = "Контрольная карта Шухарта." & _
            Chr$(13) & "Контроль повторяемости результатов измерений " & strIngredient & "" & _
            Chr$(13) & "с использованием реальных проб (в абсолютных величинах)"

        Case Else
            strDiagSheetName = "Контрольная карта Шухарта." & _
            Chr$(13) & "Контроль повторяемости результатов измерений " & strIngredient & "" & _
            Chr$(13) & "с использованием реальных проб (в приведенных величинах)"
    End Select
    
    Application.ScreenUpdating = False
    
    With co.Chart
        'определение вида диаграммы (в данном случае - график)
        .ChartType = xlLine
                  
        'добавление ряда данных для результатов контрольных процедур
        .SeriesCollection.Add Source:=xlSheetIngr.Range(xlSheetIngr.Cells(17, 4), _
             xlSheetIngr.Cells(mlngCountRow, 4)), Rowcol:=xlColumns, SeriesLabels:=True
            
        'добавление ряда данных для средней линии
        .SeriesCollection.Add Source:=xlSheetIngr.Range(xlSheetIngr.Cells(17, 12), _
             xlSheetIngr.Cells(mlngCountRow, 12)), Rowcol:=xlColumns, SeriesLabels:=True
                     
        'добавление ряда данных для предела предупреждения
        .SeriesCollection.Add Source:=xlSheetIngr.Range(xlSheetIngr.Cells(17, 13), _
             xlSheetIngr.Cells(mlngCountRow, 13)), Rowcol:=xlColumns, SeriesLabels:=True
            
        'добавление ряда данных для предела действия
        .SeriesCollection.Add Source:=xlSheetIngr.Range(xlSheetIngr.Cells(17, 14), _
             xlSheetIngr.Cells(mlngCountRow, 14)), Rowcol:=xlColumns, SeriesLabels:=True
        
        
        'при расчете ширины области, реально занятой диаграммой, учитываем количество результатов в ряду данных
        .PlotArea.Width = lngChartWidth * 0.85
        .PlotArea.Top = lngRowHeight * 5
        
        
        Select Case mvarIngredientMethod
            Case "pH (П)"
                Rem .Shapes.AddLabel(msoTextOrientationHorizontal, lngColumnWidth * 13.8, _
                    lngRowHeight * 6, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел действия"
                
                .Shapes.AddLabel(msoTextOrientationHorizontal, lngChartWidth * 0.91, _
                    lngRowHeight * 6, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел действия"
        
                Rem .Shapes.AddLabel(msoTextOrientationHorizontal, lngColumnWidth * 13.8, _
                    lngRowHeight * 12.5, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел предупреждения"
                    
                .Shapes.AddLabel(msoTextOrientationHorizontal, lngChartWidth * 0.91, _
                    lngRowHeight * 12.5, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел предупреждения"
    
                Rem .Shapes.AddLabel(msoTextOrientationHorizontal, lngColumnWidth * 13.8, _
                    lngRowHeight * 25.5, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "средняя линия"
                    
                .Shapes.AddLabel(msoTextOrientationHorizontal, lngChartWidth * 0.91, _
                    lngRowHeight * 27, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "средняя линия"
                
            Case Else
                Rem .Shapes.AddLabel(msoTextOrientationHorizontal, lngColumnWidth * 13.8, _
                    lngRowHeight * 4, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел действия"
                    
                .Shapes.AddLabel(msoTextOrientationHorizontal, lngChartWidth * 0.87, _
                    lngRowHeight * 4, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел действия"
        
                Rem .Shapes.AddLabel(msoTextOrientationHorizontal, lngColumnWidth * 13.8, _
                    lngRowHeight * 11, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел предупреждения"
                    
                .Shapes.AddLabel(msoTextOrientationHorizontal, lngChartWidth * 0.87, _
                    lngRowHeight * 11, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "предел предупреждения"
    
                Rem .Shapes.AddLabel(msoTextOrientationHorizontal, lngColumnWidth * 13.8, _
                    lngRowHeight * 26, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "средняя линия"
                    
                .Shapes.AddLabel(msoTextOrientationHorizontal, lngChartWidth * 0.87, _
                    lngRowHeight * 26, lngColumnWidth, lngRowHeight * 2).TextFrame.Characters.Text = "средняя линия"
        End Select
    
    
        'задаем жирные линии
        For intSeriesCollectionCount = 2 To 4
            .SeriesCollection(intSeriesCollectionCount).Border.Weight = xlMedium
        Next intSeriesCollectionCount
    
  
        'Задание свойств диаграммы
             
        .HasTitle = True
        .HasLegend = False
        
        With .ChartTitle
           .Characters.Text = strDiagSheetName
           .Font.Size = 12
           .Top = lngRowHeight * 0.1
        End With
        
        'добавление осей и форматирование подписей к ним
        
        'первичная ось категорий ("идентификаторы" - номера контрольных процедур)
        .HasAxis(xlCategory, xlPrimary) = True
        
        With .Axes(xlCategory, xlPrimary)
            'следующая строка задает отображение значений из первого столбца (идентификаторы)
            .CategoryNames = xlSheetIngr.Range(xlSheetIngr.Cells(18, 1), xlSheetIngr.Cells(mlngCountRow, 1))
            .CategoryType = xlCategoryScale
            .HasTitle = True
            .CrossesAt = 1
            .AxisBetweenCategories = False
            .ReversePlotOrder = False
            .MajorTickMark = xlTickMarkCross
            .TickMarkSpacing = 1
            .TickLabelPosition = xlTickLabelPositionNextToAxis
            .TickLabelSpacing = 1
            .TickLabels.Font.Size = 8
            .TickLabels.NumberFormat = "0"
            .TickLabels.Orientation = xlTickLabelOrientationHorizontal
            .HasMajorGridlines = False
            .HasMinorGridlines = False
        
            With .AxisTitle
                .Caption = "Номера контрольных процедур"
                .Orientation = xlHorizontal
            End With
        End With
                  
      
        'первичная ось значений (результаты контрольных процедур)
        .HasAxis(xlValue, xlPrimary) = True
        With .Axes(xlValue, xlPrimary)
            
            .HasMajorGridlines = False
            .HasMinorGridlines = False
            
            Select Case mvarIngredientMethod
                Case "pH (П)"
                    .TickLabels.NumberFormat = "0.0"
                    .MinimumScale = 0
                    .MaximumScale = 0.3
                    .MinorUnit = 0.1
                    .MajorUnit = 0.1
                    
                Case Else
                    .TickLabels.NumberFormat = "0"
                    .MinimumScaleIsAuto = True
                    .MaximumScaleIsAuto = True
                    .MinorUnit = 0.5
                    .MajorUnit = 1
            End Select
            
            .Crosses = xlAutomatic
            .ReversePlotOrder = False
            .ScaleType = xlLinear
            .DisplayUnit = xlNone
        End With
        
        'установка вида линий
        .SeriesCollection(1).Border.ColorIndex = 11  'данные
        .SeriesCollection(1).MarkerBackgroundColorIndex = 11
        .SeriesCollection(1).MarkerForegroundColorIndex = 11
        .SeriesCollection(1).MarkerStyle = xlSquare
        .SeriesCollection(1).MarkerSize = 3
        
        .SeriesCollection(2).Border.ColorIndex = 50  'сред. линия
        .SeriesCollection(2).Border.Weight = xlThick
        .SeriesCollection(3).Border.ColorIndex = 6  'пред. предупр
        .SeriesCollection(3).Border.Weight = xlThick
        .SeriesCollection(4).Border.ColorIndex = 3  'пред. действия
        .SeriesCollection(4).Border.Weight = xlThick
    End With
    
    xlSheetIngr.Protect "1"
    
    Application.ScreenUpdating = True
    
ErrorHandlerExit:
    Exit Sub
ErrorHandler:
    Application.ScreenUpdating = True
    MsgBox "Creation_Diagram Ошибка №:" & Err.Number & ";Описание:" & Err.Description
    Resume ErrorHandlerExit
End Sub


...
Рейтинг: 0 / 0
07.03.2018, 13:40
    #39611808
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Shocker.ProНо откуда тогда взялосьТак из цикла и взялось. Если диаграммы на листе есть - то метод вызывался два и более раза. А когда диаграмм на листе нет, этот метод вызывает ошибку, т.к. удалять нечего. Т.е. уже при втором проходе цикла он 100% вызывал ошибку.
КДВот код построения диаграммы
Как думаете, нужен этот код без файла с примером данных? :) Судя по виду - один скрин из офиса 2003(первый), второй - из 2007 и выше. И это никак не исправить, потому что офисы разные и представление диаграмм в 2003 и более новых версиях сильно различается.
...
Рейтинг: 0 / 0
12.03.2018, 18:52
    #39613728
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с выполнением процедур с разных компьютеров
Спасибо!
Да, видимо, проблема в разных версиях офиса.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблемы с выполнением процедур с разных компьютеров / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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