Как бы мне обработать выделенное в колонке Excel?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Как бы мне обработать выделенное в колонке Excel?

Сообщение Ronja » 24.08.2006 (Чт) 22:28

Добрый вечер, уважаемые!
Помогите синтаксисом или мыслями, пожалуйста.
Открыта книга Excel. Выделено несколько строк в колонке. Надо c помощью маленькой программы транслитерации проанализировать слова в выделенных ячейках Экселя, транслитерировать и вставить справа со сдвигом колонок вправо.
Чую, что надо по нажатию кнопки перекинуть focus на открытую книгу или еще как. Но не хватает знаний по синтаксису. Никак не получается программу заставить обратить внимание на выделенный участок Экселя и обработать его. То есть, надо обработать уже открытую книгу и уже выделенные ячейки (заранее конкретные адреса в коде программы закладывать не надо. Их сам пользователь выделяет в Экселе). Это всегда колонка, но не всегда первая. Вот, код. (пытаюсь написать именно маленькую вспомогательную прогу; чтобы она запускалась пользователем отдепльно (а не макрос как часть экселя). Буду очень благодарен за помощь. Роня

Код: Выделить всё

Private Sub Command1_Click()

          ' hide the Program window
    Me.Hide
          ' set focus on open excel sheet/workbook
          ' how to get it right?
    Windows.Application.Workbooks.Open
   
    Dim A As Range
    Dim B As String
    Dim C As String
     
        ' copy user's selection in Excel book
    Selection.Copy
        ' insert a new column on right of the selection
    Selection.Insert Shift:=xlToRight
        ' select first cell of the column to be transliterated
    ActiveCell.Offset(0, 1).Select
            ' get the address of the cell
        B = ActiveCell.Address
            ' select all cells with text in groups of 5 cells
            '(there may be a few empty cells between rows)
        Do While IsEmpty(ActiveCell.Value) = False
        ActiveCell.Offset(5, 0).Activate
        C = ActiveCell.Address
        Loop
        ' select the range of cells for trasliteration
Range(B, C).Select
 
          ' definition of replacement variables
    Selection.Replace What:="Б", Replacement:="B"
    Selection.Replace What:="B", Replacement:="V"
            ' and lines with the rest of replacements


            ' clear selection "ants"
    Application.CutCopyMode = False
            ' bring the Program window
  Me.Show
       
    End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2006 (Чт) 22:32

Щас придёт d3drm, увидит твой ник, и его порвёт. d3drm'а. Очень он к этому слову неравнодушен. Так что готовься.

По теме.
Почему не внутри?
Почему не функцией листа? =Translit(A1)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 24.08.2006 (Чт) 22:38

У нас на работе макросы не допускают ставить. То есть, если я эту прогу хочу на комп себе поставить, то она должна быть не макрос. Если отдельная прога, то разрешат (только код сначала проверют).

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2006 (Чт) 22:41

Красавцы.
То есть скомпилированный экзешник можно (который невозможно проверить) а код VBA нельзя (который проверяется на раз).
Видимо, 15 лет назад главный админ услышал слово "макровирус", и его с тех пор не отпустило., хотя смысл слова им так понят и не был. Нды.


В общем случае задача может быть сложной в пунте получения нужного инстанса экселя, когда их несколько запущено. Поэтому макрос, а точнее, функция листа, единственно правильное решение.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 24.08.2006 (Чт) 22:49

Тут тогда два пути:
- убедить "красавцев" принять макрос и разрешить его поставить;
- найти возможность все-таки переводить фокус на открытый эксель;
а что касается экзешника, то у меня и не взяли бы его. Только код. А потом уж они сами его соберут и мне вернут.
Первый вариант мне тоже по душе - собранный макрос работает идеально (но макрос :().

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2006 (Чт) 22:51

Ronja писал(а):- найти возможность все-таки переводить фокус на открытый эксель;

На какой, когда их несколько?

Ronja писал(а):Только код. А потом уж они сами его соберут и мне вернут.

А с макросом, значит, этого не сделать? Ню-ню.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 24.08.2006 (Чт) 22:55

Ну, если несколько экселей открыто, то это, наверное, сложнее. А вообще-то, есть возможность открыть "ближайший"? То есть тот, который был "в работе" прямо перед использованием Программы?

Размышляю. Если действительно макрос значительно проще (я не спец в программировании ни разу), то надоть попробовать убедить "их" разрешить поставить макрос...

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 26.08.2006 (Сб) 20:36

Позвольте еще вопрос:
В Форму пооместил типа эмулятор Excel - окошко OLE. Как в него вставить содержимое Clipboard?
Clipboard.GetText ?
Clipboard.GetData ?
А как это написать правильно в Form1_Load() или в свойствах OLE, чтобы при загрузки Формы (или клику на кнопке) загружалось содержимое Clipboard (текст)?
Спасибо.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.08.2006 (Сб) 20:46

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

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 26.08.2006 (Сб) 21:00

Моя мечта на вечер - написать программку транслитерации слов. Они уже есть в колонках Экселя. И смысл программки получить эти слова через Clipboard, транслитерировать их, и вернуть транслитерированные (хоть на Clipboard, хоть в виде текста).
С кнопками и кодом транслитерации я маленько освоился. Но застопорился на процессе помещения содержимого Clipboard в Программу (ну, что бы программа 'увидела', что что-то появилось для обработки).
В VB создал форму, добавляю на неё обект OLE (тип объекта Лист Microsoft Office Excel). Но не знаю как в этот объект OLE 'поместить' содержимое буфера обмена. Подскажите, пожалуйста.

Или можно как-нить и без OLE ввести сотню строчек из Экселя?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.08.2006 (Сб) 21:05

Через буфер? Можно.

Пример отслеживания изменения состояния буфера - а API-Guide.
API-Guide - в разделе Популярный вопросы, топик Справочники по API.

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

Если эксель на форме (какой ужас...), надо брать прямо из него.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 26.08.2006 (Сб) 21:20

Если эксель на форме (какой ужас...), надо брать прямо из него.

Согласен. В экселе выделяю ячейки, Ctrl+C (и содержимое несомненно в буфере обмена). Но, вот, как его поместить столбцом в форму для 'обработки'?
В объкт типа Текст ячейки не помещаются правильно.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.08.2006 (Сб) 21:22

А, хм, зачем их куда-то помещать, если они уже в экселе, а эксель на форме, т.е. доступен для работы?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 26.08.2006 (Сб) 21:29

а эксель на форме, т.е. доступен для работы

Это не совсем так. По моим скудным представлениям, Эксель на форме, это когда известен путь файла, и этот путь прописывается в "эксель на форме" - и там, якобы, можно работать с данными.

А мне бы нужно заставить Программу работать не с конкретным и заранее известным файлом, а с фрагментом (точнее - со столбцом) любого экселевского файла. Чтобы у меня было открыто две программы - одна Эксель с кучей разных страниц и столбцов, а вторая, собственно, Программа. В которуую я бы, по необходимости, мог скопировать столбец и транслитерировать его (а результат транслитерации уже можно опять в буфер обмена занести).

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.08.2006 (Сб) 22:29

Тогда не надо эксель на форме.

Ctrl+C в нормальном экселе, Ctrl+V в текстбоксе (многострочном). Что не так?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 12.09.2006 (Вт) 19:34

Некоторое развитие произошло. Сделал пару макросов (один исправляет регистр с нижнего на верхний, второй - делает транслитерацию). Эти макросы работают очень хорошо, когда запускаю их на своем компутере (русская версия ХР).

На английской ХР они не работают. Текст макроса в англиской ХР не исправляется нормально - там где были русские буквы они стали корявыми иероглифами.


Сделал макрос на англи йской ХР. Во время записи макрос хорошо и правильно поменял русские буквы на английские. Но, вот, смотрю текст макроса - там вместо русских букв знак вопроса. И потом пытался этот же макрос запустить - он вообще все буквы поменял на 'V'. Вот код макроса (я пытался заменит русские буквы 'б' и 'в' на B и V соответственно):
Код: Выделить всё
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 9/12/2006 by auser
'

'
    Columns("A:A").Select
    Selection.Replace What:="?", Replacement:="B", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="?", Replacement:="V", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub


Вопрос: можно ли в коде макроса Экселя на англоязычной ХР явно указать, что используется кодировка с русскими буквами? Или надо лезть в реестр и там чего-то шаманить (не хотелось бы)?
Спасибо большое за помощь.
Лёня

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 12.09.2006 (Вт) 19:45

Открыть VBA Editor. Меню Tools>Options. Вкладка Eitor Format. Установить кириллический шрифт поможет опция Font: Courier New (Cyrillic).
Моду создают модоки, а распространяют модозвоны.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.09.2006 (Вт) 19:47

Вместо "Б" пиши ChrW(1041), и т.д.

[edit]2hCORe: когда системная локаль английская, без разницы, какой выбран шрифт.[/edit]
Изображение

Ronja
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.08.2006 (Чт) 22:13

Сообщение Ronja » 12.09.2006 (Вт) 23:40

Класс! Всё заработало!
Огромное спасибо.
Все буквы пока не переписал, но десяток попробовал - все меняются как по маслу.
:D :D :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 122

    TopList  
cron