powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программирование на VBA
25 сообщений из 106, страница 3 из 5
Программирование на VBA
    #36357082
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Погонял мою вариацию кода от Djon Player
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Option Explicit

Sub test()
 Dim i As Integer
 Dim sel As String
 
 For i =  1  To  1000  Step  2 
  If sel = "" Then
    sel = Cells(i,  1 ).Address
   Else
    sel = sel & "," & Cells(i,  1 ).Address
  End If
  Debug.Print sel

Next i

'Range(sel).Select

ActiveWorkbook.Names.Add Name:="request_item", RefersToR1C1:=Range(sel)
End Sub


Вывод - string содержит в себе все адреса, а вот Range(sel).Select не проходит, обрубает.
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357096
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я проверял свой вариант из первой темы - загнать адреса в массив, затем выгрузить в выделение. Не пройдёт...
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357112
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: K_Aida
> Да имя присвоить можно и не в цикле, а после цикла, здесь проблем нет, мне самое главное, чтобы выделял без
> проблем.
Если нужно без проблем выделять, тогда:
Код: 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.
Dim rwIndex As Long, nCountCells As Long, sAddresSelect As String, rSelectidRange As Range
nCountCells =  0 
sAddresSelect = ""
rSelectidRange = Nothing
For rwIndex =  10  To  100 
    If ЕдИзм <> "" And КолвоВсего <> "" And Исх <> "" And ДатаЗаявки <> "" And Подразделение <> "" And 
НаправлениеРасхода <> "" And НаправлениеДеят <> "" And СтатусЗаявки <> "" Then
' Запоминаем в строке, адрес, который нужно включить в итоговое выделение
        sAddresSelect = sAddresSelect & "A" & CStr(rwIndex) & ":" & "AP" & CStr(rwIndex) & ","
' Увеличиваем счетчик запомненных адресов, максимум 30 адресов
        nCountCells = nCountCells +  1 
        If nCountCells >  29  Then
'        Если адресов критическое значение, получаем Range по ним
'        Обрезаем последнюю запятую
            sAddresSelect = Left(sAddresSelect, Len(sAddresSelect) -  1 )
'            Проверяем, если наш итоговый диапазон ещё не определён
            If rSelectidRange Is Nothing Then
'            Определяем итоговый диапазон
                Set rSelectidRange = Range(sAddresSelect)
            Else
'            Иначе, добавляем к итоговому диапазону новую порцию
                Set rSelectidRange = Application.Union(rSelectidRange, Range(sAddresSelect))
            End If
'            Сбрасываем счетчики для новой порции ячеек
            sAddresSelect = ""
            nCountCells =  0 
        End If
    End If
Next rwIndex
'По окончании цикла добавляем остатки
sAddresSelect = Left(sAddresSelect, Len(sAddresSelect) -  1 )
If rSelectidRange Is Nothing Then
    Set rSelectidRange = Range(sAddresSelect)
Else
    Set rSelectidRange = Application.Union(rSelectidRange, Range(sAddresSelect))
End If
'Выделяем полученное множество
rSelectidRange.Select
Set rSelectidRange = Nothing


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357175
Танцор Пасадобля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а девушка то уже ушла
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357180
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Танцор Пасадобля а девушка то уже ушла

Ушла курить, что мы тут все понаписали. Ну да ладно, завтра снова все здесь встретимся
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357191
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Ушла курить

Это мужчины уходят курить, а девушки отворачиваются припудрить носик

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357221
K_Aida
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, Танцор Пасадобля,

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

Не то вы обсуждаете господа, лучше придумайте как лучше сделать!
и потом, не все девушки курят!!!

Мы уже придумали, дело за вами.

Курят ВСЕ, кто тут тусуется, в частности, мы курим вашу задачу.

А вы курите все, что предложили, в частности вариант Игоря.
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357230
Танцор Пасадобля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K_AidaShocker.Pro, Танцор Пасадобля,

Не то вы обсуждаете господа, лучше придумайте как лучше сделать!
и потом, не все девушки курят!!!
Вот это похвально!
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357236
K_Aida
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

да...
всё понятно с вами...
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357257
Танцор Пасадобля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K_Aida,
общими усилиями задачу решили?
теперь с вас либо пирожки с капустой, либо фото(свое)
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357258
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: K_Aida
> Да имя присвоить можно и не в цикле, а после цикла, здесь проблем нет, мне самое главное, чтобы выделял без
> проблем.
Если нужно без проблем выделять, тогда:
Проверил код
На строчке
Код: plaintext
rSelectidRange = Nothing
вываливается ошибка, правильнее наверно так
Код: plaintext
Set rSelectidRange = Nothing
После прохожения цикла вываливается ошибка на коде
Код: plaintext
sAddresSelect = Left(sAddresSelect, Len(sAddresSelect) -  1 )
она связанная с тем. что значение переменной sAddresSelect=""
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357346
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Djon Player
> Проверил код
> На строчке ...
> вываливается ошибка, правильнее наверно так

Да согласен, поторопился и не проверил
Еще можно получить ошибку при большом количестве объеденённых Union'ом Range'й. Но это только мои домыслы и нужно
проверять.
Проверил, при nCountCells > 27 можно добавить только 120 строк, при rwIndex = 121 уже ошибка.

Тогда остается или красить или копировать на новый лист, и там выделять просто диапазон одной командой:
Код: plaintext
1.
2.
ActiveWorkbook.Sheets("Не прошедшие проверку").Range("A1:AP" & _
    CStr(Номер_последней_скопированной_строки)).Select


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357539
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносТогда остается или красить или копировать на новый лист

А красить-то чем поможет


(сбрить усы - и расстрелять)
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357696
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> А красить-то чем поможет

Ну "красить" можно по разному
Можно цветом, можно значением в дополнительном столбце и автофильтром по этому значению, можно так-же отобрать, хотя в
любом случае копирование на новый лист проще в реализации

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357745
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Shocker.Pro
> А красить-то чем поможет

Ну "красить" можно по разному
Можно цветом, можно значением в дополнительном столбце и автофильтром по этому значению, можно так-же отобрать, хотя в
любом случае копирование на новый лист проще в реализации



А, понял тебя. Не факт, что проще. Все зависит от того, как именно идет экспорт. Информация на эту тему от автора топика очень скудна. Например, можно вообще подключиться к книге через ODBC как к БД и написать запрос SELECT ... WHERE со всеми теми условиями, с которыми сейчас работает макрос, то бишь вообще не использовать макрос, при этом получить гораздо бОльшую гибкость.
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357947
K_Aida
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Например, можно вообще подключиться к книге через ODBC как к БД и написать запрос SELECT ... WHERE со всеми теми условиями, с которыми сейчас работает макрос, то бишь вообще не использовать макрос, при этом получить гораздо бОльшую гибкость...

И как подключиться к книге ODBC как к БД?
...
Рейтинг: 0 / 0
Программирование на VBA
    #36357994
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K_AidaИ как подключиться к книге ODBC как к БД?

Ну из вас прям все клещами приходится вытягивать.
а ЧЕМ подключиться, вы для начала не хотите рассказать? Вы же ни слова не сказали, какая у вас СУБД.

Допустим, в Аксессе можно создать связанную таблицу, в качестве источника данных указать ODBC, в настройках подключения указать "Драйвер Microsoft Excel" и выбрать нужный файл. В MSSQL можно создать DTS-пакет, в котором опять же указать источник - "Драйвер Microsoft Excel" и т. п.
...
Рейтинг: 0 / 0
Программирование на VBA
    #36358105
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K_Aida,
вот придумал, может пригодиться
Код: 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.
Sub Macros1()
Dim pos As Integer, adr As String, flag As Byte
Dim r1 As Integer, r2 As Integer
adr = "": flag =  0 : r1 =  0 : r2 =  0 
For pos =  1  To  100 
    ' условие, указывающее какие строки должны быть выделены, тут от 1 до 20 и от 30 до 50
    ' можно задать свое условие 
    If (pos >=  1  And pos <=  20 ) Or (pos >=  30  And pos <=  50 ) Then 
        flag =  1 
        r1 = IIf(r1 =  0 , pos, r1)
        r2 = pos
    Else
        flag = IIf(flag =  1 ,  2 , flag)
    End If
    If flag =  2  Then
        flag =  0 
        adr = adr & CStr(r1) & ":" & CStr(r2) & ","
        r1 =  0 : r2 =  0 
    End If
Next
If r1 <>  0  And r2 <>  0  Then adr = adr & CStr(r1) & ":" & CStr(r2) & ","
adr = Mid(adr,  1 , Len(adr) -  1 )
Range(adr).Select
End Sub
но на сколько я понял из обсуждения все упирается в длину строки adr
...
Рейтинг: 0 / 0
Программирование на VBA
    #36358202
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНапример, можно вообще подключиться к книге через ODBC как к БД
K_AidaИ как подключиться к книге ODBC как к БД?

Ну из вас прям все клещами приходится вытягивать.
а ЧЕМ подключиться, вы для начала не хотите рассказать?


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

Shocker.ProВы же ни слова не сказали, какая у вас СУБД.
А какая разница, какая. На приемной стороне есть какой-то алгоритм приема, вот под этот алгоритм K_Aida и пытается подстроить свои данные.
Хотя могла-бы рассказать подробнее. Потому, что выделение как признак экспортируемости, мне совсем не нравится и я бы использовал другие варианты как вариант копирование на новый лист, откуда просто забирать, или ... или придумывать можно долго, не зная особенностей приемника выделяемых данных.
...
Рейтинг: 0 / 0
Программирование на VBA
    #36358326
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносА какая разница, какая. На приемной стороне есть какой-то алгоритм приема, вот под этот алгоритм K_Aida и пытается подстроить свои данные.

А черт его знает. Может там используется не ODBC (что скорее всего, иначе бы не понадобился такой дурацкий фильтр с помощью макроса), а, допустим, СОМ. Без подробностей о СУБД и адгоритме переброски мы ничего умного не скажем, а то, что выделение строк макросом - не самый оптимальный вариант для достижения конечной цели - сомнения у нас зародились еще неделю назад
...
Рейтинг: 0 / 0
Программирование на VBA
    #36359504
K_Aida
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, работаю я на SQL 2005.

С помощью скрипта идет обработка данных. А область request_item нужна для того, чтобы вытащить данные из файла. А после уже идет обработка данных.
А данные вытаскиваю так:

select *
from
OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="Путь к файлу";Extended properties=Excel 5.0')...request_item

Вот поэтому мне и нужна область.
Если у кого есть какие-то советы, как сделать иначе, проще чем макрос, то пишите! :)
...
Рейтинг: 0 / 0
Программирование на VBA
    #36359542
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K_AidaРебят, работаю я на SQL 2005.

С помощью скрипта идет обработка данных. А область request_item нужна для того, чтобы вытащить данные из файла. А после уже идет обработка данных.
А данные вытаскиваю так:

select *
from
OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="Путь к файлу";Extended properties=Excel 5.0')...request_item

Вот поэтому мне и нужна область.
Если у кого есть какие-то советы, как сделать иначе, проще чем макрос, то пишите! :)

Чтой-то за синтаксис с многоточием в запросе?

Я имел ввиду что-то типа:
Код: plaintext
1.
2.
3.
4.
select * 
from
OpenDataSource(   )
where  ЕдИзм <> "" And КолвоВсего <> "" And Исх <> "" And ДатаЗаявки <> "" And Подразделение <> "" And НаправлениеРасхода <> "" And НаправлениеДеят <> "" And СтатусЗаявки <> ""
...
Рейтинг: 0 / 0
Программирование на VBA
    #36359558
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: K_Aida
> Ребят, работаю я на SQL 2005.
> А данные вытаскиваю так:
> select *
> from
> OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="Путь к файлу";Extended properties=Excel
> 5.0')...request_item

Так тем более, выбрасывать в новую книгу, и оттуда забирать тем-же селектом, но без указания request_item
Тогда ограничение бодет только на количество строк на листе, судя по Excel 5.0 - 65536 строк. и без всяких заморочекна
выделение, имена и все остальное

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Программирование на VBA
    #36359593
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Я имел ввиду что-то типа:

да кстати тоже как вариант

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 106, страница 3 из 5
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программирование на VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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