powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / И снова выгружаем Excel, и, как всегда, неудачно
15 сообщений из 15, страница 1 из 1
И снова выгружаем Excel, и, как всегда, неудачно
    #32609732
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, не могу удержаться...
Код: plaintext
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.
Private Sub Кнопка32_Click()
On Error GoTo Err_Кнопка32_Click
 '====================
 
Data_Z = Me.ПолеСоСписком0
Id_Grup = Me![Sw_Gr]
ID_Name = Me![Sp_2]
Wid8 = Me![Sp_8]
Wid10 = Me![Sp_10]
Wid11 = Me![Sp_11]
Wid12 = Me![Sp_12]
Wid13 = Me![Sp_13]
Wid14 = Me![Sp_14]
 '====================
 
Dim wzhwndOwner As Long
Dim wzAppName As String
Dim wzDlgTitle As String
Dim wzOpenTitle As String
Dim wzFile As String
Dim wzInitialDir As String
Dim wzFilter As String
Dim wzFilterIndex As Long
Dim wzView As Long
Dim wzflags As Long
Dim wzfOpen As Boolean
Dim ret As Long
    
    WizHook.Key =  51488399 
    
    wzhwndOwner =  0 &
    wzAppName = ""
    wzDlgTitle = "Сохранить отчет"
    wzOpenTitle = "Сохранить"
    wzFile = String( 255 , Chr( 0 ))
    wzInitialDir = "c:\"
    wzFilter = "Excel file " _
    & "(*.xls)"
    wzFilterIndex =  1 
    wzView =  1 
    wzflags =  64 
    wzfOpen = False

    ret = WizHook.GetFileName(wzhwndOwner, _
        wzAppName, wzDlgTitle, wzOpenTitle, wzFile, _
        wzInitialDir, wzFilter, wzFilterIndex, _
        wzView, wzflags, wzfOpen)
        
 ' Проверим, не произошел ли возврат в результате нажатия клавиши Esc (-302)
 

    If wzFile <> "" Then
 '====================
 
Dim myOlApp As Object
Dim MyWo As Excel.Workbook
Dim mysheet As Excel.Worksheet
Dim MyCel As Variant
Dim MyRst As ADODB.Recordset
Dim ct As Long
DoCmd.OutputTo acOutputQuery, "ZFin_O", acFormatXLS, wzFile, False
Set myOlApp = CreateObject("excel.Application")
Set MyWo = myOlApp.Workbooks.Open(wzFile)
Set mysheet = MyWo.Worksheets("ZFin_O")
 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
Rows("1:1").Select
    With Selection
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation =  90 
        .AddIndent = False
        .IndentLevel =  0 
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Rows.AutoFit
 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
Set MyRst = New ADODB.Recordset
 'ct = 2
 
MyRst.Open "select * from ZFin_O", CurrentProject.Connection, adOpenStatic, adLockReadOnly
ct =  2 
Do Until MyRst.EOF
   If MyRst![Rang_ID] <=  0  Then
     Cells(ct,  1 ).Select
    Selection.Font.Bold = True
    Selection.Font.Italic = True
   End If
ct = ct +  1 
MyRst.MoveNext
Loop
    Columns("Z:Z").Select
    Selection.Delete Shift:=xlToLeft
    Cells.Select
    Selection.NumberFormat = "General"
    Range("A2").Select
    Cells.Select
    Selection.EntireColumn.AutoFit
    Range("A2").Select
MyRst.Close
Set MyRst = Nothing
 '++++++++++++++++++++++++
 
MyWo.Save
Set mysheet = Nothing
MyWo.Close
Set MyWo = Nothing
 'myOlApp.Quit
 
 '====================
 
 'Set myOlApp = Nothing
 
Excel.Application.Quit
 'Application.Quit
 
 '====================
 
Else

Exit_Кнопка32_Click:
    Exit Sub
End If
Err_Кнопка32_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка32_Click
    
End Sub
Екс не выглужается, причем вылазят (слово то какое!) разные ошибки...
Доэксперементаровался до того что еле смог вообще открыть базу...

Может кто укажет путь истинный?

Заранее спасибо!
Ok.madg
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32609741
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выудил ошибки: (коментарии к приложенному файлу :(
1. Открыл базу, отправляю запрос в Екс

2. Принудительно выкидываю Екс из памяти, отправляю заново:

В обоих случаях проверил форматирование листа выполняется полностью…
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32610181
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нельзя но очень хочется а ОСь- XP
вставь через Shell
Код: plaintext
1.
>taskkill  /f /im excel.exe
получишь
Код: plaintext
1.
Успешно: Процесс "EXCEL.EXE", с идентификатором  1808 , был завершен.
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32610362
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>taskkill
Этот вариан не лучше чем КонтрАльДел...
А как хотель чтоб как у людей...
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32610650
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот так не надо: Rows("1:1").Select
Обращайся через переменную mysheet - при всех явных обращениях ексель должне нермально выгружаться.
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32610873
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HummerА вот так не надо: Rows("1:1").Select
Обращайся через переменную mysheet - при всех явных обращениях ексель должне нермально выгружаться.
Тогда и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    Columns("Z:Z").Select
    Selection.Delete Shift:=xlToLeft
    Cells.Select
    Selection.NumberFormat = "General"
    Range("A2").Select
    Cells.Select
    Selection.EntireColumn.AutoFit
    Range("A2").Select
вот этот кусок будет сбоить на выгрузку?

Если так, дайте плиз кусок с использованием mysheet, ну, хоть для замены Rows("1:1").Select

Если не трудно :(
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32610886
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Держи
Код: plaintext
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.
Private Sub Кнопка3_Click()
    Dim nRows As Long
    Dim myOlApp As Excel.Application
    Dim MyWo As Excel.Workbook
    Dim mysheet As Excel.Worksheet
    Dim MyCel As Variant
    Dim MyRst As ADODB.Recordset
    Dim MyRst2 As ADODB.Recordset
    Dim strcon As ADODB.Connection
    Dim strconnect As String
    Dim strN As String
    Dim strST As String
    Dim strOS As String
    Dim strSum As String
    Dim ct As Long
    Dim m As Long
    Dim strSql As String
DoCmd.OutputTo acOutputTable, "svod", acFormatXLS, mysave_file, False
Set myOlApp = New Excel.Application
Set MyWo = myOlApp.Workbooks.Open("c:\test.xls")
Set mysheet = MyWo.Worksheets("svod")
'+++++++++++++++++++++++ Определение количества столбцов++++++++++++++++++++++++++++++++++++
m = MyWo.Worksheets(1).Range("A1").CurrentRegion.Columns.Count

myOlApp.Selection.Rows.AutoFit
'+++++++++++++++++++Подключение++++++++++++++++++++++++++++++++++++++++
    Set strcon = CurrentProject.Connection
'-------------------------------------------------------------
    Set MyRst = New ADODB.Recordset
    MyRst.Open "select * from balance", strcon, adOpenStatic, adLockReadOnly

'++++++++++++Подсчёт суммарной стоимости по строкам и столбцам от первой до последней+++++++++++++++++++++++
    nRows = mysheet.Range("A1").CurrentRegion.Rows.Count
    mysheet.Range("a" & (nRows +  1 )).Value = "Итого"
    Set MyRst2 = New ADODB.Recordset
    MyRst2.Open "select * from svod", strcon, adOpenStatic, adLockReadOnly
'-------------------------Серый фон + Окантовка -------------------------------------------------
   mysheet.Range(Chr(MyRst.Fields.Count + 97) & "1").Value = "Итого"
    mysheet.Cells(m + 1 & ",1").Select
    With myOlApp.Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
      .Weight = xlThin
        .ColorIndex = 1
    End With
    With myOlApp.Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
    End With
    With myOlApp.Selection.Interior
        .ColorIndex = 15
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With
   ' ---------------------------------------------------------
 
For i =  98  To MyRst.RecordCount +  98 
    mysheet.Range(Chr( 97  + MyRst2.Fields.Count) & (i -  96 )).Formula = "=SUM($" & Chr( 98 ) & "$" & (i -  96 ) & ":$" & Chr(MyRst2.Fields.Count -  2  +  98 ) & "$" & (i -  96 ) & ")"
Next i
MyRst2.Close
Set MyRst2 = Nothing
'-----------------------------------------------------------------------
'+++++++++++++ Изменение шрифта названий задач+++++++++++++++++++++++++++++++
ct =  2 
Do Until MyRst.EOF
   If MyRst![type_balance] =  1  Then
    mysheet.Cells(ct,  1 ).Select
    myOlApp.Selection.Font.Bold = True
    myOlApp.Selection.Font.Italic = True
    End If
ct = ct +  1 
MyRst.MoveNext
Loop
MyRst.Close
'-------------------------------------------------------------
    For i = 98 To m + 96
'=============================================================
    strSum = "select * from balance where (level not like '%.%') and (level<>'0')"
    Set MyRst2 = New ADODB.Recordset
    MyRst2.Open strSum, strcon, adOpenDynamic, adLockOptimistic, adCmdText
    strOS = ""
    While Not MyRst2.EOF
        strN = mysheet.Cells.Find(MyRst2!name_balance).Address
        MyRst2.MoveNext
        strOS = "$" & Chr(i) & Mid(strN,  3 , Len(strN) -  2 ) & ","
    Wend
    mysheet.Range(Chr(i) & nRows +  1 ).Formula = "=SUM(" & strOS & ")"
'=============================================================
    Set MyRst = New ADODB.Recordset
    MyRst.Open "select * from balance", strcon, adOpenStatic, adLockReadOnly
    
While Not MyRst.EOF
    
    If MyRst!type_balance = 1 Then
    strOS = mysheet.Cells.Find(MyRst!name_balance).Address
    strSql = "select * from balance where balance.level like '" & MyRst!Level & ".%" & "'And level_balance=(" & MyRst!level_balance + 1 & ");"
    Set MyRst2 = New ADODB.Recordset
    MyRst2.Open strSql, strcon, adOpenDynamic, adLockOptimistic, adCmdText
    strST = ""
     strN = ""
While Not MyRst2.EOF
    strN = mysheet.Cells.Find(MyRst2!name_balance).Address
    MyRst2.MoveNext
    If Len(strN) > 0 Then
    strST = strST & "$" & Chr(i) & Mid(strN, 3, Len(strN) - 2) & ","
    End If
        
Wend
    MyRst2.Close
    If Len(strST) > 0 Then
        mysheet.Range(Chr(i) & Mid(strOS, 4, Len(strOS) - 2)).Formula = "=SUM(" & strST & ")"
    End If
End If
    MyRst.MoveNext
Wend
MyRst.Close
Next i
'Set MyRst = Nothing
'+++++++++ Установка шрифта+++++++++++++++
mysheet.Cells.Select
    With myOlApp.Selection.Font
        .Name = "Arial"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
' --------------------------Сетка и формат ячеек(красный, если отрицательное, "-",если- 0)-------------------------------------
 
    myOlApp.Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    myOlApp.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With myOlApp.Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With myOlApp.Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With myOlApp.Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With myOlApp.Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With myOlApp.Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With myOlApp.Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
mysheet.Cells.Select
    With myOlApp.Selection
    .NumberFormat = "###,###;[red]-### ###;-"
    End With
    mysheet.Range("a1").Value = "Задачи"
'++++++++++++++++++++++
mysheet.Range("a" & nRows + 1 & ":" & Chr(m + 97) & nRows + 1).Select
    With myOlApp.Selection.Font
    .Size = 12
    .Bold = True
    End With
            
' -------- Скрываем ненужное-------------
 
'---Справа-------------
If Me!EX_Group = False Then
mysheet.Rows(nRows + 2 & ":" & nRows + 2).Select
   mysheet.Range(myOlApp.Selection, myOlApp.Selection.End(xlDown)).Select
    myOlApp.Selection.EntireRow.Hidden = True
End If
' ---Снизу--------------
 
   mysheet.Columns(Chr(m +  98 ) & ":" & Chr(m +  98 )).Select
    mysheet.Range(myOlApp.Selection, myOlApp.Selection.End(xlToRight)).Select
    myOlApp.Selection.EntireColumn.Hidden = True
' --------------------------------------
 
MyWo.save
Set mysheet = Nothing
MyWo.Close
Set MyWo = Nothing
myOlApp.Quit
Set myOlApp = Nothing
strcon.Close
Set strcon = Nothing
End Sub

...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611090
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вай, какой хороший человек!!!
Приду домой буду разбирать!!!
Спасибо!!!
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611160
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 madg: это универсальный код практически под любую таблу, только в коде необходимо сделать ссылки на таблу и её содержимое.
Работает супер круто!!!
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611563
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
DoCmd.OutputTo acOutputTable, "svod", acFormatXLS, mysave_file, False

В этом варианте Акс выдает окно "Сохранить в формате"

Я конечно понимаю, что можно использовать:
Код: plaintext
1.
2.
3.
DoCmd.OutputTo acOutputTable, "svod", acFormatXLS, "с:\...", False
' а потом 
Set MyWo = myOlApp.Workbooks.Open("c:\...")

Но в хелпе сказано:
Хелп
OutputFile Optional Variant. A string expression that's the full name, including the
path, of the file you want to output the object to. If you leave this argument
blank, Microsoft Access prompts you for an output file name.

Что примерно значит:
ДОПОЛНИТЕЛЬНЫЙ Вариант OutputFile. Выражение строки, которое - полное имя, включая путь, файла Вы хотите выход объект против. Если Вы оставляете этот пробел аргумента, Доступ Микрософт подсказывает Вам для выходного файлового имени


Мать его Сократ персональный...
Я пробовал:
Код: plaintext
1.
2.
3.
DoCmd.OutputTo acOutputTable, "svod", acFormatXLS, Patch, False
' а потом 
Set MyWo = myOlApp.Workbooks.Open(Patch)
Матерится...
Как же использвать то что "Микрософт подсказывает Вам для выходного файлового имени"
А, товарисчи:?
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611573
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
madgНо в хелпе сказано:
ХелпOutputFile Optional Variant. A string expression that's the full name, including the
path, of the file you want to output the object to. If you leave this argument
blank, Microsoft Access prompts you for an output file name.

Что примерно значит:
ДОПОЛНИТЕЛЬНЫЙ Вариант OutputFile. Выражение строки, которое - полное имя, включая путь, файла Вы хотите выход объект против. Если Вы оставляете этот пробел аргумента, Доступ Микрософт подсказывает Вам для выходного файлового имени

Я даже догадываюсь, каким образом был получен этот перевод.

Вот правильный:

ХелпOutputFile - необязательный параметр типа Variant. Строковое выражение, представляющее собой полное имя (включая путь) файла, в который Вы хотите вывести объект. Если Вы оставите этот параметр пустым, Аксесс запросит у Вас имя файла для вывода.
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611579
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
madg[src]Мать его Сократ персональный...


А я сразу оговорился... млин детище отечественного программостроения...

Так как использовать то что у меня Акс запросил...
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611597
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В чем вопрос? Как оставить параметр пустым? Вот так:
Код: plaintext
, ,
Но тогда нельзя будет использовать в программе то имя файла, которое введет юзер.
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611602
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в том что подставить вместо ???
Код: plaintext
1.
2.
3.
DoCmd.OutputTo acOutputTable, "svod", acFormatXLS, ???, False
' а потом 
Set MyWo = myOlApp.Workbooks.Open(???)

Я полагаю что там должна быть переменная или что еще и ее имя подставляется в .Open(???) но что и как не знаю.. :(
...
Рейтинг: 0 / 0
И снова выгружаем Excel, и, как всегда, неудачно
    #32611833
madg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока что не ответили... :(
Может вопрос глуповатый, или не точный...

В результате экспериментов выяснилось что конструкция:
Код: plaintext
1.
2.
3.
4.
mysheet.ххх.Select
    With myOlApp.Selection.ххх (ххх опционально)
......
    End With

Весьма прилично работает...
Также выяснилось, что конструкция:
Код: plaintext
1.
2.
3.
4.
Do Until MyRst.EOF
.....
MyRst.MoveNext
Loop
Работает медленне чем хотелось бы.
Есть варианты замены? на более быстрые конечно...

ЗЫ > Proga
В натуре "Работает супер круто!!!"
Моя радоваться!!!
Спасибо Вам товарисчь!!!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / И снова выгружаем Excel, и, как всегда, неудачно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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