powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблемы с выполнением процедур с разных компьютеров
16 сообщений из 16, страница 1 из 1
Проблемы с выполнением процедур с разных компьютеров
    #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
Проблемы с выполнением процедур с разных компьютеров
    #39610900
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД,

Т.к. файл с макросами, вызываемыми через Run должен быть открыт - то путь вообще не надо указывать. Вызывайте везде вторым кодом и не будет проблем.
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39610903
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С одной стороны, да, раньше так и делал. Но штука в том, что процедуры в файле "Общая" меняются, а пользователи не всегда открывают его первым. В результате в текущей папке с расчетным файлом создается копия "Общая". Не факт, что она всегда будет актуальна. Для предотвращения и стал прописывать полный путь. А вот, оказывается, не всегда срабатывает...
Или я на воду дую? :)
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #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
Проблемы с выполнением процедур с разных компьютеров
    #39611279
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД,
проблема здесь:
Код: plaintext
For intCountCharts = xlSheetIngr.ChartObjects.Count To  0  Step -1
невозможно обратиться к объекту с индексом 0. Коллекция ChartObjects начинает отсчет с 1.
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39611308
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так этот ноль вроде как не индекс (он же не в скобках после наименования коллекции), а переменная со значением количества объектов коллекции?
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39611312
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Count To 0 выполнится Count+1 раз
то есть на один раз больше, чем реальное количество
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39611451
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД,

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

Так что про ноль ты как раз правильно сказал )
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #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
Проблемы с выполнением процедур с разных компьютеров
    #39611727
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно такой метод называется Clear
Но откуда тогда взялосьКДпытается удалить несуществующую диаграмму:
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39611770
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за советы! Благодаря им удалось победить ошибку.
Ну еще вопрос как к спецам. Один и тот же код построения диаграммы приводит к разным результатам на разных компах.
На основном (выглядит как и задумывалось)
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39611772
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На рабочем похоже, но немного не так
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #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
Проблемы с выполнением процедур с разных компьютеров
    #39611808
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНо откуда тогда взялосьТак из цикла и взялось. Если диаграммы на листе есть - то метод вызывался два и более раза. А когда диаграмм на листе нет, этот метод вызывает ошибку, т.к. удалять нечего. Т.е. уже при втором проходе цикла он 100% вызывал ошибку.
КДВот код построения диаграммы
Как думаете, нужен этот код без файла с примером данных? :) Судя по виду - один скрин из офиса 2003(первый), второй - из 2007 и выше. И это никак не исправить, потому что офисы разные и представление диаграмм в 2003 и более новых версиях сильно различается.
...
Рейтинг: 0 / 0
Проблемы с выполнением процедур с разных компьютеров
    #39613728
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Да, видимо, проблема в разных версиях офиса.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблемы с выполнением процедур с разных компьютеров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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