Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 19:27   #21
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

а какой командой можно выделить ячейку в таблице в которой вставлять текст? Таблица мне известна Table (1), Номер столбца тоже (сделаю проверку и на таблицу,и на номер столбца)

точнее я хочу выделить допустим Cell (i,2) ,и что бы построчно текст вставился ,но в последующие строки.
тут надо как то задать кол-во value в Listboxe, icont -допустим

и далее цикл ,где i- строка выбранной ячейки.

в cell(i,2).range. insertafter 1-е значение с Listboxa
i=i+1

т.е. далее будет выполняться по сути cell(i+1,2).range.insertafter 2-е значение с Listboxa

я наверное сумбурно и непонятно объясняю.
просто я всюду искала как же можно щелкнуть мышью и выбрать ячейку,во всех примерах только задается

Последний раз редактировалось @лeся; 18.01.2012 в 19:29.
@лeся вне форума Ответить с цитированием
Старый 18.01.2012, 20:50   #22
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Первое уточнение нумерация в списке начинается с 0 поэтому цикл будет выглядеть так:
Код:
Set tbl = Selection.Tables(1)
If ListBox1.ListIndex < 0 Then ListBox1.ListIndex = 0
r = Selection.Cells(1).RowIndex
c = Selection.Cells(1).ColumnIndex
For i = ListBox1.ListIndex to ListBox1.LictCount - 1
     ListBox1.ListIndex = i
        If i > tbl.Rows.Count Then
           tbl.Rows.Add
           tbl.Cell(tbl.Rows.Count, c).Range.Text = ListBox1.Text
        Else
           tbl.Cell(r, c).Range.Text = ListBox1.Text
           r = r + 1
        End if
Next i
Код проверяет выбран ли какое-нибудь значение в списке ListBox1, если нет то присваивает первое значение списка, если да вставка начнется начиная с выбранного списка, вставка в таблице

Последний раз редактировалось Пименов Александр; 18.01.2012 в 21:08. Причина: Улучшение кода
Пименов Александр вне форума Ответить с цитированием
Старый 20.01.2012, 16:22   #23
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

о,Спасибо БОЛЬШОЕ! буду использовать
@лeся вне форума Ответить с цитированием
Старый 24.01.2012, 11:28   #24
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

ну так вот,пришла я вот к чему :

table row count мне не годится,поскольку в одной таблице несколько подразделов,чтобы было яснее в приложении скрин. Вот,и возникло несколько вопросов,надеюсь подможете,чем можете
  1. после проверки номера столбца,как сделать правильнее выход? у меня вроде стоит эксит саб.но форма не закрывается
  2. далее с проверкой на заполненность выбранной ячейки,тоже самое,либо ее убрать (хотя она скорее всего не лишняя,"от дурака"), тогда аналогичный выход из формы,или делать эту проверку как то заранее ,а не после того как Listbox уже сформирован и заполнен "именами"
  3. следующее : при вставке текста,проверяется следующая ячейка (внизу),если не пуста то добавляется строка. Вопрос,может как то можно иначе реализовать?


Код:
Private Sub Btn_Insert_Txt_Click()
    Dim oTable As Table
    Dim sStr As String
    
    Set oTable = ActiveDocument.Tables(1)       'создание объекта таблицы (чтобы не обращаться каждый раз через ActiveDocument.Tables...)
        
        'проверка в каком столбце находится курсор
   If Selection.Information(wdEndOfRangeColumnNumber) <> 2 Then
        MsgBox " Выбран не тот столбец" & vbCr & " Вставка данных невозможна.": Exit Sub:

       Selection.MoveRight Unit:=wdCell, Count:=1
  End If
        
'        проверка - заполнена хоть одна ячейка в этой строке, где стоит курсор 
    For iCount = 1 To 8 Step 1
        sStr = oTable.Cell(Selection.Information(wdEndOfRangeRowNumber), iCount).Range.Text
        If Left(sStr, Len(sStr) - 2) <> "" Then
            MsgBox "Строка уже заполнена. Переместите курсор в правильную позицию или очистите ячейки текущей строки.": Exit Sub:
        End If
    Next
    
    If ListBox1.ListIndex < 0 Then ListBox1.ListIndex = 0
        r = Selection.Cells(1).RowIndex
        For i = ListBox1.ListIndex To Me.ListBox1.ListCount - 1
             ListBox1.ListIndex = i
                  oTable.Cell(r, 2).Range.Text = ListBox1.Text
                   r = r + 1
                If oTable.Cell(r, 2).Range.Text <> "" Then
                    Selection.InsertRowsBelow 1
                    Else
                End If
        Next i
    Unload Me
End Sub
Изображения
Тип файла: jpg tab.JPG (29.7 Кб, 18 просмотров)
@лeся вне форума Ответить с цитированием
Старый 24.01.2012, 18:22   #25
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

и еще ,не пойму почему multiselect у меня работает так,что в список файлов последний вносится первым?

Код:
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        'Добавляется фильтр по типам файлов DWG и DOC.
        .Filters.Add "Files", "*.dwg; *.pdf;*.doc; *.docx", 1
   
        'Выбор нескольких файлов через Ctrl
        .AllowMultiSelect = True

        'По умолчанию для выбора предоставляется определенный диск
        .InitialFileName = "E:\Test\"
        If .Show = -1 Then
                 For Each vrtSelectedItem In .SelectedItems
'                     s = Mid(vrtSelectedItem, 1, Len(vrtSelectedItem) - InStr(1, StrReverse(vrtSelectedItem), ".")) 'отсечение расширения файла
'                     a = Mid(s, InStrRev(vrtSelectedItem, "\") + 1)                                                 'разбиение по "\",и отсечене пути файла.
                     a = Mid(Mid(vrtSelectedItem, 1, Len(vrtSelectedItem) - InStr(1, StrReverse(vrtSelectedItem), ".")), InStrRev(vrtSelectedItem, "\") + 1)
                     Me.ListBox1.AddItem a
                Next vrtSelectedItem
        Else
        End If
    End With
п.с. не смотрите пожалуйста на фильтры
@лeся вне форума Ответить с цитированием
Старый 27.01.2012, 13:21   #26
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

нет идей,да?
ну с первой частью я решила так,делать проверку местоположения курсора еще до выборки файлов.
а вот вопрос #25 всё еще открыт )
@лeся вне форума Ответить с цитированием
Старый 27.01.2012, 14:43   #27
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

По мультиселекту, все нормально, как бы Вы не выбирали файлы в SelectedItems они будут отражаться по порядку сверху вниз.....
Пименов Александр вне форума Ответить с цитированием
Старый 27.01.2012, 14:54   #28
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Вообще я так понял в вашей таблице строки обозначенные как 1-2 это шапка, а строки с надписью тип это расширение файла и таблица каждый раз должна пополняться а не создаваться заново. Так?
Пименов Александр вне форума Ответить с цитированием
Старый 27.01.2012, 18:46   #29
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Пименов Александр Посмотреть сообщение
По мультиселекту, все нормально, как бы Вы не выбирали файлы в SelectedItems они будут отражаться по порядку сверху вниз.....
странно,а у меня именно когда я выбираю хоть с Ctrl, хоть с SHIFt последний файл в списке становится первым. я уже хочу пустить им и этот вариант...пусть стрелочкой вниз опускают,хотя при 20 наименований,это конечно геморрно,но пока решения нет...Правильно у меня становится только когда я выбираю файлы через ctrl+a.Не знаю может это особенность multiselecta.


По второму посту- да таблица одна, ну впрочем первый вопрос (#24), я решила строки вроде добавляются (мне не хватает тестера который все варианты прощелкает :D ), и проверки на :
  • заполненность ячейки (в выбранной строке);
  • количество столбцов в таблице;
  • нахождение курсора в необходимом столбце;

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


в итоге главная проблема сейчас в multiselect.

Последний раз редактировалось @лeся; 27.01.2012 в 18:53.
@лeся вне форума Ответить с цитированием
Старый 27.01.2012, 18:49   #30
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

ну и напоследок вопрос чисто на ваш взгляд, как было бы лучше?

выбор файлов,одним разом ограничить?(сделала пока как проще: блокируя после выборки кнопку "выбрать")

или дать возможность "добирать" файлы из других папок в один "набор" Listbox-a?

если второй ,то я так понимаю надо будет поработать с "набором"(собирать в какой то select),и инициализацией формы...?

Последний раз редактировалось @лeся; 27.01.2012 в 18:50. Причина: комментарий
@лeся вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
makefile: поменять имена файлов как? chechestor Общие вопросы C/C++ 1 14.01.2011 17:02
Как задать команду загрузки файлов данных на кнопку если каталог и имена файлов известны??? Andbuba Microsoft Office Excel 2 28.12.2008 17:28
Как вывести на экран имена файлов текущего каталога? (С++) Darw1n Помощь студентам 1 13.12.2008 11:10
Как получить имена нескольких файлов выделенных в OpenDialog Comer_Jus Общие вопросы Delphi 2 26.05.2008 19:47
как считать имена файлов из директории и поддерикторий в массив, ХЭЛП uraveselov Microsoft Office Excel 2 10.04.2008 09:50