powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / цикл VBA, небольшая доработка
9 сообщений из 9, страница 1 из 1
цикл VBA, небольшая доработка
    #39692979
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Написал небольшой цикл в VBA, в экселе, в принципе что в аксессе,что в экселе смысл один и принцип такой же.
Процедурка выполняет следующее : бежит по выделенному диапазону значений ,склеивает значения в одну строку и записывает в буфер обмена, чтобы потом можно было сразу при помощи Ctrl+V вставить в нужное место в другую программу:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
Dim cur_range As Range

    With ActiveSheet
         Set cur_range = Selection
            cur_range.Activate
        
        For Each x In cur_range
           s = s & x & ","
            Next x

        Dim d As New DataObject
          d.SetText (s)
           d.PutInClipboard
            MsgBox s   

    End With
....


Все отлично выполняется, единственно что режет глаз, это то, что после последнего элемента всегда проставляется запятая.
Тело склейки в цикле s = s & x & ","

Можно ли как нибудь прямо цикле сделать так, чтобы последний элемент не заканчивался запятой?
Обрецать итоговую строку можно конечно: d.SetText(Left(s, Len(s) - 1)) , но наверное это не по феншую.
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693010
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте, что бы "," была бы впереди s = s & "," & x , и тогда обрезайте по фэншую:d.SetText(mid(s, 2))
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693012
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А иначе нужна ещё переменная :
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
Dim cur_range As Range
Dim separator as string

    With ActiveSheet
         Set cur_range = Selection
         cur_range.Activate
        
        For Each x In cur_range
           s = s & separator & x 
           separator = ","
       Next x

        Dim d As New DataObject
          d.SetText (s)
          d.PutInClipboard
          MsgBox s   

    End With
....
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693016
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не царское это дело, лишние запятые обрезать!
Пусть негры работают:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim dct As Object
    Set dct = CreateObject("Scripting.Dictionary")
    
    With ActiveSheet
        For Each x In Selection
            dct.Add x.Address, x.Value
        Next x
    End With
    s = Join(dct.Items, ",")
    Debug.Print s
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693021
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredНе царское это дело, лишние запятые обрезать!
А что, точная аналогия: царь поручает это дело одному боярину, тот пинает кучу холопов, они отвечают, и результат преподносится царю.
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693032
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterА иначе нужна ещё переменная :

А зачем?
s="," & S & x
d.setText(mid(s,2))
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693037
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу пардон-сообщение не читать
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693073
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за пятничный феншуй!)

Пользуясь случаем ,умыкнул у Predeclared более короткий вариант работы с selection For Each x In Selection ,где не надо дополнительно c диапазоном ничего set и activate))
...
Рейтинг: 0 / 0
цикл VBA, небольшая доработка
    #39693085
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати вариант Predeclared на больших объёмах даже быстрее конкатенации если не использовать stringBuilder.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / цикл VBA, небольшая доработка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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