powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
10 сообщений из 35, страница 2 из 2
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773620
Фотография Мордор Держимордов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИгорь ГорбоносShocker.Pro,

Нафига тебе пример? Работаем с одним столбцом. Получаем список уникальных значений в столбце, сравниваем с таблицей в базе, по результатам просто удаляем строки по наличию какого-то значения в столбцеЕсли у него там форматирование, оформления и прочие навороты, тогда не получится тупо вставить результирующий текст из базы. То есть я хотел немножко упростить систему и не использовать цикл удаления строк. Но так как автор никак не прокомментировал мое предложение, тогда можно и в цикле.
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773713
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и?
Вы тонко намекаете, что не умеете работать с ADODB? - не верю, поскольку ведь данные вы как-то "заливаете в БД". Или вы не знаете, как удалить строчку на листе Excel? - Sheets("ПРИШЕДШИЕ БАЗЫ").Rows(32).Delete Shift:=xlUp
Или не знаете, как сравнить два списка наименований?
Что не получается-то?
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773719
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Я так понимаю, автор делает заливку файла средствами DTS (то есть мастером самого MSSQL)
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773739
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Мордор Держимордов
> .JPG

От тебя просили обычный файл екселя, а не картинку
Поставь имя своего сервера
C учетом картинки - нужно добавить проверку на длину строки sXml она не должна превышать 8000 символов готового XML'я
или переделать запрос так, чтобы открывался сам файл через OpenRowSet и сравнивались значения.
Код: 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.
Option Explicit
Dim cmd As New ADODB.Command


Sub DeleteRows()
'
' Макрос1 Макрос
' Макрос записан 14.01.2009 (user)
'

'
Dim sCurrentFiltRange As String, sXml As String, sSql As String
Dim r As Range
Dim shUnique As Worksheet, sh As Worksheet, w As Workbook, w1 As Workbook
Dim vGroup As Variant

On Error GoTo labErr

Set w = Application.ActiveWorkbook
Set sh = Application.ActiveSheet  ' лист на котором нужно удалять строки
If sh.AutoFilter Is Nothing Then
    MsgBox "Установите автофильтр"
    Exit Sub
End If

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

sCurrentFiltRange = sh.AutoFilter.Range.Address

Set w1 = Application.Workbooks.Add
Application.DisplayAlerts = False
Set shUnique = CheckSheet(w1, "Уникальные")
' Получаем список уникальных данных из столбца
Set r = w1.Worksheets("Уникальные").Range("a1")
sh.Range("A:A").AdvancedFilter xlFilterCopy, , r, True
DoEvents
' Получаем уникальный список в массив для обработки
vGroup = r.Range("a2:F" + CStr(r.SpecialCells(xlCellTypeLastCell).Row)).Value2
' Книга больше не нужна, закрываем
Set r = Nothing
w1.Close False
Set w1 = Nothing
Application.DisplayAlerts = True

' Строим из массива данных XML, который запросим на сервере и по результатам получим что удалять
sXml = "<?xml version = ""1.0"" encoding=""Windows-1251"" standalone=""yes""?><VBA><kk>"
sXml = sXml & Join(vGroup, "</a><a>")
sXml = Left(sXml, Len(sXml) - 3) & "</kk></VBA>"

Dim rs As Recordset
Set rs = CheckDataFromSQL(sXml)
' Теперь беГим циклом по рекордсету, применяем автофильтр и видимые строки удаляем
rs.MoveFirst
While Not rs.EOF
    With sh.Range(sCurrentFiltRange)
        ' Работаем с автофильтром
        .AutoFilter Field:=1, Criteria1:=rs.fields(0).Value
        DoEvents
        ' Удаляем видимые строки
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    rs.MoveNext
Wend
rs.Close
Set rs = Nothing
Set cmd = Nothing
    MsgBox "Закончили!"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
labErr:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Что-то не получилось, данные не обработаны! Ошибка - " & Err.Description, vbCritical + vbOKOnly
End Sub

Private Function CheckSheet(w As Workbook, sName As String, Optional bCreate As Boolean = True) As Worksheet
Dim b As Boolean
b = Application.DisplayAlerts
Application.DisplayAlerts = False
On Error GoTo labErr
' Если есть лист пытаемся удалить его
w.Sheets(sName).Delete
If bCreate Then
' Если удалили и нужно создавать, создаем и возвращаем
    Set CheckSheet = w.Sheets.Add
    CheckSheet.Name = sName
End If
Application.DisplayAlerts = b
Exit Function
labErr:
Application.DisplayAlerts = b
If bCreate Then
' Если нужно создавать, создаем и возвращаем
    Set CheckSheet = w.Sheets.Add
    CheckSheet.Name = sName
End If
End Function

Private Function CheckDataFromSQL(sXml As String) As Recordset
Dim sql As String
sql = "DECLARE @idoc INT " & vbCrLf _
    & "EXEC sp_xml_preparedocument @idoc OUTPUT, " & vbCrLf _
    & "     ? " & vbCrLf _
    & "      " & vbCrLf _
    & "SELECT distinct dp.BDNAME " & vbCrLf _
    & "FROM   Base_001.dbo.BD_Processed dp " & vbCrLf _
    & "       INNER JOIN OPENXML(@idoc, 'VBA/kk', 2) " & vbCrLf _
    & "            WITH(a VARCHAR(255)) a ON dp.BDNAME = a.a " & vbCrLf _
    & " " & vbCrLf _
    & "EXEC sp_xml_removedocument @idoc"
Dim prm As ADODB.Parameter
' Define a Command object for a stored procedure.
cmd.ActiveConnection = "Provider=sqloledb;Data Source=_TVOI_SERVER_;Initial Catalog=Base_001;Integrated Security=SSPI;"
cmd.CommandText = sql
cmd.CommandType = adCmdText
cmd.CommandTimeout = 15
' Set up new parameter for the stored procedure.
Set prm = cmd.CreateParameter("sxml", adVarChar, adParamInput, 8000, sXml)
cmd.Parameters.Append prm
' Create a record set by executing the command.
Set CheckDataFromSQL = cmd.Execute
' Тут можно сделать обработку ошибок, но под рукой нет, а искать нет времени. Если нужно сам разберёшся
End Function



Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773745
Тыжных Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант без программирования: сделать лист, вывести на него данные из запроса к базе.
На листе со списком баз сделать столбец, в котором прописать функцию ВПР(), ну и далее либо условное форматирование, либо фильтр.
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773747
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос

Ну и как обычно:
После сборки обработать напильником (с) Инструкция!

:)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773776
Фотография Мордор Держимордов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMНу и?
Вы тонко намекаете, что не умеете работать с ADODB? - не верю, поскольку ведь данные вы как-то "заливаете в БД". Или вы не знаете, как удалить строчку на листе Excel? - Sheets("ПРИШЕДШИЕ БАЗЫ").Rows(32).Delete Shift:=xlUp
Или не знаете, как сравнить два списка наименований?
Что не получается-то?

Я вчера перед написанием поста узнал о такой штуке: Сервис -> Макрос -> Начать запись
:)

Я с VB, экселем никак до этого не пересекался, админю MS SQL, пишу скриптики на нём же.
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773780
Фотография Мордор Держимордов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос> Автор: Мордор Держимордов
> .JPG

От тебя просили обычный файл екселя, а не картинку
Поставь имя своего сервера
C учетом картинки - нужно добавить проверку на длину строки sXml она не должна превышать 8000 символов готового XML'я
или переделать запрос так, чтобы открывался сам файл через OpenRowSet и сравнивались значения.
+
Код: 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.
Option Explicit
Dim cmd As New ADODB.Command


Sub DeleteRows()
'
' Макрос1 Макрос
' Макрос записан 14.01.2009 (user)
'

'
Dim sCurrentFiltRange As String, sXml As String, sSql As String
Dim r As Range
Dim shUnique As Worksheet, sh As Worksheet, w As Workbook, w1 As Workbook
Dim vGroup As Variant

On Error GoTo labErr

Set w = Application.ActiveWorkbook
Set sh = Application.ActiveSheet  ' лист на котором нужно удалять строки
If sh.AutoFilter Is Nothing Then
    MsgBox "Установите автофильтр"
    Exit Sub
End If

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

sCurrentFiltRange = sh.AutoFilter.Range.Address

Set w1 = Application.Workbooks.Add
Application.DisplayAlerts = False
Set shUnique = CheckSheet(w1, "Уникальные")
' Получаем список уникальных данных из столбца
Set r = w1.Worksheets("Уникальные").Range("a1")
sh.Range("A:A").AdvancedFilter xlFilterCopy, , r, True
DoEvents
' Получаем уникальный список в массив для обработки
vGroup = r.Range("a2:F" + CStr(r.SpecialCells(xlCellTypeLastCell).Row)).Value2
' Книга больше не нужна, закрываем
Set r = Nothing
w1.Close False
Set w1 = Nothing
Application.DisplayAlerts = True

' Строим из массива данных XML, который запросим на сервере и по результатам получим что удалять
sXml = "<?xml version = ""1.0"" encoding=""Windows-1251"" standalone=""yes""?><VBA><kk>"
sXml = sXml & Join(vGroup, "</a><a>")
sXml = Left(sXml, Len(sXml) - 3) & "</kk></VBA>"

Dim rs As Recordset
Set rs = CheckDataFromSQL(sXml)
' Теперь беГим циклом по рекордсету, применяем автофильтр и видимые строки удаляем
rs.MoveFirst
While Not rs.EOF
    With sh.Range(sCurrentFiltRange)
        ' Работаем с автофильтром
        .AutoFilter Field:=1, Criteria1:=rs.fields(0).Value
        DoEvents
        ' Удаляем видимые строки
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    rs.MoveNext
Wend
rs.Close
Set rs = Nothing
Set cmd = Nothing
    MsgBox "Закончили!"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
labErr:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Что-то не получилось, данные не обработаны! Ошибка - " & Err.Description, vbCritical + vbOKOnly
End Sub

Private Function CheckSheet(w As Workbook, sName As String, Optional bCreate As Boolean = True) As Worksheet
Dim b As Boolean
b = Application.DisplayAlerts
Application.DisplayAlerts = False
On Error GoTo labErr
' Если есть лист пытаемся удалить его
w.Sheets(sName).Delete
If bCreate Then
' Если удалили и нужно создавать, создаем и возвращаем
    Set CheckSheet = w.Sheets.Add
    CheckSheet.Name = sName
End If
Application.DisplayAlerts = b
Exit Function
labErr:
Application.DisplayAlerts = b
If bCreate Then
' Если нужно создавать, создаем и возвращаем
    Set CheckSheet = w.Sheets.Add
    CheckSheet.Name = sName
End If
End Function

Private Function CheckDataFromSQL(sXml As String) As Recordset
Dim sql As String
sql = "DECLARE @idoc INT " & vbCrLf _
    & "EXEC sp_xml_preparedocument @idoc OUTPUT, " & vbCrLf _
    & "     ? " & vbCrLf _
    & "      " & vbCrLf _
    & "SELECT distinct dp.BDNAME " & vbCrLf _
    & "FROM   Base_001.dbo.BD_Processed dp " & vbCrLf _
    & "       INNER JOIN OPENXML(@idoc, 'VBA/kk', 2) " & vbCrLf _
    & "            WITH(a VARCHAR(255)) a ON dp.BDNAME = a.a " & vbCrLf _
    & " " & vbCrLf _
    & "EXEC sp_xml_removedocument @idoc"
Dim prm As ADODB.Parameter
' Define a Command object for a stored procedure.
cmd.ActiveConnection = "Provider=sqloledb;Data Source=_TVOI_SERVER_;Initial Catalog=Base_001;Integrated Security=SSPI;"
cmd.CommandText = sql
cmd.CommandType = adCmdText
cmd.CommandTimeout = 15
' Set up new parameter for the stored procedure.
Set prm = cmd.CreateParameter("sxml", adVarChar, adParamInput, 8000, sXml)
cmd.Parameters.Append prm
' Create a record set by executing the command.
Set CheckDataFromSQL = cmd.Execute
' Тут можно сделать обработку ошибок, но под рукой нет, а искать нет времени. Если нужно сам разберёшся
End Function






СПАСИБО. Завтра поразбираюсь.
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773803
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Мордор Держимордов

Да сори не заметил:
Код: vbnet
1.
2.
' Получаем уникальный список в массив для обработки
vGroup = r.Range("a2:F" + CStr(r.SpecialCells(xlCellTypeLastCell).Row)).Value2


здесь должно Не по столбец F, а в столбце A, т.е.
Код: vbnet
1.
2.
' Получаем уникальный список в массив для обработки
vGroup = r.Range("a2:A" + CStr(r.SpecialCells(xlCellTypeLastCell).Row)).Value2



Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
    #37773931
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[youtube=http://www.youtube.com/watch?v=-MoF3KxDCMY]

Обидно, что становимся базарными бабами!
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строк в EXCEL первый параметр столбец которых присутствует в таблице MS SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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