powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скрыть пустые колонки после выполнения процедуры
22 сообщений из 22, страница 1 из 1
Скрыть пустые колонки после выполнения процедуры
    #37992391
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть макрос, который вызывает ХПР. Процедура возвращает таблицу значений, многие из колонок которой пустые. Как их скрыть сразу после выполнения процедуры?
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37992410
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то про телепатию написано в правилах. ))

Предположительно это эксель, но все же надо пояснить, а так же указать, как именно формируется таблица значений (привести фрагмент кода)
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37992476
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грамотно написать Селект, и дело в шляпе.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37992602
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь в деталях:
MS Excel 2010. Макрос берет переменную (имя человека) -> передает ее в процедуру -> процедура возвращает все записи, созданные юзером. В каждой записи процентов 90% колонок пустые (регистрируются ошибки по кодам).

Т.к. выводится весь список записей, через какое-то время все колонки будут задействованы.

Желаемый макрос должен срабатывать по кнопке (желатеьно по той же, что и процедура).

VladConnГрамотно написать Селект, и дело в шляпе.

а можно поподробней?
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993019
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessVladConnГрамотно написать Селект, и дело в шляпе.

а можно поподробней?ХП редактировать можно?
Просто не возвращать колонки (правильнее в данном случае называть их полями), в которых нет данных.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993088
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думала об этом варианте, но в таблице, откуда берутся значения, около 200 полей (столбцов) и перечислять их все через

Код: sql
1.
where blabla is not null



не совсем удобно.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993256
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where blabla тут никак не поможет, ибо это отбор записей, а не столбцов.

вообще, если у вас такое количество незначащих столбцов, скорее всего неверно спроектирована база, из-за чего теперь вы расплачиваетесь проблемами программирования, ну да ладно.

скорее всего тут решалось бы все созданием динамического запроса типа
Код: sql
1.
2.
3.
4.
5.
declare @k nvarchar(max)
set @k=N'select '
--далее цикл, который добавляет поля в зависимости от наличия данных
set @k=@k+N' from Таблица where ....'
exec (@k)
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993563
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База собирает сведения об ошибках, которые все идут под разными кодами. Поэтому абсолютно все колонки нужны, ибо записи изменяются во временем.

По поводу запроса не совсем понятно.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessБаза собирает сведения об ошибках, которые все идут под разными кодами.medea_blessПоэтому абсолютно все колонки нужнынет тут причинно-следственно связи. Можно писать все в одну таблицу - распределяя по записям, а не по полям. То есть не
абоненткод1код2код3абонент1значениезначениезначениеабонент2значениезначениезначениеабонент2значениезначениезначениеа
абоненткодзначениеабонент1код1значениеабонент1код2значениеабонент1код3значениеабонент2код1значениеабонент3код1значениеабонент3код3значение
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993582
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessПо поводу запроса не совсем понятно.ну так ведь и подробностей нет
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993608
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМожно писать все в одну таблицу - распределяя по записям, а не по полям

нельзя.

Итак начнем сначала. Есть 2 Infopath формы, которые передают информацию в базу. Для короткой справки: Infopath работает только с уже созданными полями SQL. Незаполненным полям присваивается значение NULL.

С этих 2 форм в Excel генерируются отчеты по заданным условиям. Например, для данного пользователя посчитать сумму всех ошибок по кодам/типам, общую сумму ошибок; количество листов чертежа с ошибкой данного типа/кода, среднее количество ошибок на лист и т.д.

Т.к. полей очень много (около 214) и убрать их нельзя (форма не будет работать если поле не создано в базе), некоторые из них пустые. Вот их по запросу выводить не нужно.

Схема работы отчета:
1. выбирается пользователь (с таблиц, привязанных к формам)
2. кликается на кнопку "получить отчет" (подвязана к макросу, вызывающему ХРП)
3. подгружается отчет со всеми записями. Для удобства чтения хотелось бы пустые колонки скрыть.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993627
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessС этих 2 форм в Excel генерируются отчеты по заданным условиям. Например, для данного пользователя посчитать сумму всех ошибок по кодам/типам, общую сумму ошибок; количество листов чертежа с ошибкой данного типа/кода, среднее количество ошибок на лист и т.д.А почему бы эти отчеты не генерировать прям в процедуре на сервере? Это гораздо логичнее, в сто раз быстрее и меньше данных передавать
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993628
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отчет там и генерируется. Со всеми полями (колонками), которые и выводятся пустыми. Вот их в Excel быть не должно.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993640
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessавторМожно писать все в одну таблицу - распределяя по записям, а не по полям

нельзя.

Итак начнем сначала. Есть 2 Infopath формы, которые передают информацию в базу. Для короткой справки: Infopath работает только с уже созданными полями SQL. Незаполненным полям присваивается значение NULL.

С этих 2 форм в Excel генерируются отчеты по заданным условиям. Например, для данного пользователя посчитать сумму всех ошибок по кодам/типам, общую сумму ошибок; количество листов чертежа с ошибкой данного типа/кода, среднее количество ошибок на лист и т.д.

Т.к. полей очень много (около 214) и убрать их нельзя (форма не будет работать если поле не создано в базе), некоторые из них пустые. Вот их по запросу выводить не нужно.

Схема работы отчета:
1. выбирается пользователь (с таблиц, привязанных к формам)
2. кликается на кнопку "получить отчет" (подвязана к макросу, вызывающему ХРП)
3. подгружается отчет со всеми записями. Для удобства чтения хотелось бы пустые колонки скрыть.
Ну так пройдитесь по колонкам с
Код: vbnet
1.
range.EntireColumn.Hidden = True


В чем проблема то?

Шокеру +1. Весь процесс явно криво настроен.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993700
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
Шокеру +1. Весь процесс явно криво настроен.



Найдете вариант, как лучше как передавать инфу с Infopath напрямую в SQL базу - дайте знать. А то все горазд комментить, но особо понимая "всю гру свитла та тини"

По макросу:

Код: 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.
Sub HideEmptyColumns()
Dim r As Range
Dim nLastRow As Long
Dim nLastColumn As Integer
Dim i As Integer
Dim HideIt As Boolean
Dim j As Long

Columns.EntireColumn.Hidden = False
Set r = ActiveSheet.UsedRange
nLastRow = r.Rows.Count + r.Row - 1
nLastColumn = r.Columns.Count + r.Column - 1

For i = 1 To nLastColumn
HideIt = True
For j = 7 To nLastRow
If Cells(j, i).Value <> "" Then
HideIt = False
End If
Next
If HideIt = True Then
Columns(i).EntireColumn.Hidden = True
End If
Next
ActiveWorkbook.Connections("s-epm ErrorReports ExtendedByUser").Refresh
End Sub



Первый раз скрывает все верно, но после выбора отчета по следующему исполнителю информация не апдейтится т.е. перечень колонок остается от прежнего пользователя. Есть ли возможность при каждом клике на кнопку сначала все показать, а потом уже скрывать в зависимости от заполненной инфы? Мой вариант не прошел.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993822
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessОтчет там и генерируется. Со всеми полями (колонками), которые и выводятся пустыми.medea_blessС этих 2 форм в Excel генерируются отчеты по заданным условиям.На сервере генерируется не отчет, как я понимаю, а просто сырые данные, которые передаются в эксель. Отчеты генерируются в экселе, судя по вашим же словам.
Я предлагаю генерировать ЭТИ отчеты прямо на сервере. "Например, для данного пользователя посчитать сумму всех ошибок по кодам"

Впрочем - да, я углубился, в правильность архитектуры, чем в реальную помощь вам

medea_blessЕсть ли возможность при каждом клике на кнопку сначала все показать, а потом уже скрывать в зависимости от заполненной инфы?
Почему бы это не делать сразу в цикле:
вместо:
Код: vbnet
1.
2.
3.
If HideIt = True Then
Columns(i).EntireColumn.Hidden = True
End If


сделать
Код: vbnet
1.
Columns(i).EntireColumn.Hidden = HideIt
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993933
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отчет генерируется на сервере, т.е. все суммы уже посчитаны, а процедура просто вытягивает инфу со view. Но пустые столбцы все равно есть: например пользователь Иванов не сделал ни одной ошибки типа 1.1.1.1 т.е. количество ошибок данного типа - 0. Зато сделал ошибку 1.1.1.2. Но вью содержит инфу по всем пользователям, а не только по Иванову и в Excel передается полный перечень полей.

Что касается макроса, то проблема не решена.
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993949
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessЧто касается макроса, то проблема не решена.можно еще раз полный текст с изменениями.

ЗЫ: после HideIt = False очень логично разместить Exit For, ибо зачем мучать столбец дальше, если уже все ясно
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37993955
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, что значит "не прошел"? Ошибку выдает? Скрывает все столбцы? Не скрывает ни одного столбца?
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37994157
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как-то поправила, но срабатывает только по повторному нажатию на кнопку. + я поместила его в макрос вызова процедуры и теперь при загрузке Excel выглядит страшновато :)

Собственно код:

Код: 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.
Sub GetReport()
    With ActiveWorkbook.Connections("s-epm ErrorReports ExtendedByUser").OLEDBConnection
        .CommandText = "EXECUTE dbo.GetReportByUserName '" & Range("A2").Value & "'"
    End With
    
ActiveWorkbook.Connections("s-epm ErrorReports ExtendedByUser").Refresh
    
Dim r As Range
Dim nLastRow As Long
Dim nLastColumn As Integer
Dim i As Integer
Dim HideIt As Boolean
Dim j As Long

Set r = ActiveSheet.UsedRange
nLastRow = r.Rows.Count + r.Row - 1
nLastColumn = r.Columns.Count + r.Column - 1

For i = 1 To nLastColumn
Columns(i).EntireColumn.Hidden = True
For j = 7 To nLastRow
If Cells(j, i).Value <> "" Then
Columns(i).EntireColumn.Hidden = False
End If
Next
Next

End Sub
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37994172
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, ну зачем же столбец сто раз туда-сюда дергать в цикле?
Я же по другому предлагал
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
For i = 1 To nLastColumn
  HideIt = True
  For j = 7 To nLastRow
    If Cells(j, i).Value <> "" Then
      HideIt = False
      Exit For
    End If
  Next
  Columns(i).EntireColumn.Hidden = HideIt
Next
...
Рейтинг: 0 / 0
Скрыть пустые колонки после выполнения процедуры
    #37994181
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эффект тот же - срабатывает со второго раза
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скрыть пустые колонки после выполнения процедуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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