Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: Dmitriy05
Дата сообщения: 05.01.2011 23:24
ferias
На работе на Excel 2000 Sp3 если выделяешь и копируешь один участок:

Код:
ActiveSheet.Range("A1:B10").Select
Selection.Copy
Автор: ferias
Дата сообщения: 06.01.2011 01:03
Чесно говоря, немогу понять, в чем суть? Но если вопрос стоит в том чтобы временно ячейки отличались цветом, так может их просто окрасить на какоето определённое время, или до какого нибудь определённого условия, как например выделение какой нибуть ячейки или изминений активного листа.
Автор: Dmitriy05
Дата сообщения: 06.01.2011 10:06
ferias
Суть вопроса:
Можно ли сделать так, чтобы после выделения и копирования участков (макросом) и дальнейшей ручной вставки текста, указанные участкие остались выделенные ("затемненными"), но полоски не бегали по периметру
Автор: ferias
Дата сообщения: 07.01.2011 14:29
Может [more=такой вариант]
Код: Dim r1 As Range, r2 As Range, r3 As Range, c As Range, a() As String
Dim MyDataObj As New DataObject, b As Long, i As Long, colar As String
Set r1 = Range("A1:D1")
Set r2 = Range("A3:D3")
Set r3 = Union(r1, r2)
For Each c In r1
b = b + 1
ReDim Preserve a(1 To b)
a(b) = c.Value
Next
For Each c In r2
b = b + 1
ReDim Preserve a(1 To b)
a(b) = c.Value
Next
On Error Resume Next
b = UBound(a())
If Err.Number = 0 Then
colar = ""
For i = 1 To b
colar = colar & a(i) & Chr(13)
Next i
MsgBox colar
MyDataObj.Clear
MyDataObj.SetText colar
MyDataObj.PutInClipboard
Else
End If
r3.Interior.Color = 15395562
Автор: Dmitriy05
Дата сообщения: 07.01.2011 16:36
ferias
Возникает Compile error: User-defined type not defined
Реагирует на строку Dim MyDataObj As New DataObject
Автор: ferias
Дата сообщения: 07.01.2011 19:20
подключите в Tools- Reference библиотеку "Microsoft Forms 2.0 object library"
Между прочим это мне посоветовали здесь, SERGE_BLIZNUK.
Автор: Dmitriy05
Дата сообщения: 07.01.2011 19:54
ferias
Надо чтобы участки соединились по вертикали (не все значения в одном столбце)
Пример:
Надо скопировать A1:A5 и D1:D5
Должно скопироваться объединение участков:

A1 A2 A3 A4 A5
Автор: ferias
Дата сообщения: 07.01.2011 22:01
К сожалению, не знаю как это сделать, хотя почти уверен что это вполне реально. Может кто нам подскажет? По этому, поставим следующий вопрос:

- как внести данные в буфер обмена "Clipboard", чтобы после вставки, посредством клавиш Ctr+V данные вставить в разные ячейки по горизонтали?

Хотя, я думаю что ваш вопрос можно решить и каким-то другим образом. К примеру если это приемлимо, вместо Ctr+V осуществить вставку посредством макроса. Если я правильно понимаю, то диапазон, из которого мы берем данные, мы не выделяем. По этому, перед вызовом процедуры, можно выделить ачейку для вставки данных. Здесь вопрос решается намного проще. Если это вас устраивает, то сдесь смогу вам помочь.
Автор: Dmitriy05
Дата сообщения: 07.01.2011 23:12
ferias
Я понял как сформулировать вопрос:

На работе стоит Excel 2003 Sp3.
Когда выделяю и копирую участок

Код:
ActiveSheet.Range("A2:D3").Select
Selection.Copy
Автор: Zloy_Gelud
Дата сообщения: 07.01.2011 23:43

Код: On Error Resume Next
For i = 1 To UBound(b)
nArticul = CLng(b(i))
If Err.Number = 0 Then
Debug.Print nArticul
Else
End If
Next i
End Sub
Автор: ferias
Дата сообщения: 08.01.2011 00:47
Dmitriy05
К сожалению, не знаю, как это сделать.
Автор: Dmitriy05
Дата сообщения: 08.01.2011 13:55
ferias
Ok. Спасибо что пробовал помочь!
Автор: ferias
Дата сообщения: 09.01.2011 02:37
Вопрос всем, кто знает, имеет желание, и возможность помочь. Мне просто интересен этот вопрос
Цитата:
- как внести данные в буфер обмена "Clipboard", чтобы после вставки, посредством клавиш Ctr+V данные вставить в разные ячейки по горизонтали?

Думаю что нужно каким-то образом симулировать нажатие клавиши табуляции, ведь просто набирая текст, нажимаю клавишу табуляции, а VBA переводит этот знак в несколько пробелов. Может существует в charmap.exe соответствующий символ, или может есть еще другой вариант. Что-то быть должно, посколько есть программы екпортирующие данные в буфер обмена, после вставки даже в простой текстовый редактор, как говорится, "присутствует налицо", табуляция. И естественно в Exel-е вствка производится в разные ячейки, как по горизонтали, так и по вертикали. Может быть, кто знает, как перебрать все символы буфера обмена по одиночьке и определить этот загадочьный, по крайней мере для меня, символ?
Автор: VicKos
Дата сообщения: 09.01.2011 11:58
ferias
Своими словами объяснять долго, почитайте на Википедии
Вкратце - код символа табуляции 09h.
Автор: Dmitriy05
Дата сообщения: 09.01.2011 17:38
ferias
Если немного изменить твой код учитывая сказанное VicKosом, имеем:
[more]
Dim r1 As Range, r2 As Range, r3 As Range, c As Range, a() As String
Dim MyDataObj As New DataObject, b As Long, i As Long, colar As String
Set r1 = Range("A1:D1")
Set r2 = Range("A3:D3")
Set r3 = Union(r1, r2)
r3.Select
b = 0
For Each c In r1
b = b + 1
ReDim Preserve a(1 To b)
c.Font.Color = clred

a(b) = c.Value
Next
For Each c In r2
b = b + 1
ReDim Preserve a(1 To b)
a(b) = c.Value
Next
On Error Resume Next
b = UBound(a())
If Err.Number = 0 Then
colar = ""
' Копируем 1-3 значения добавляя табуляцию
For i = 1 To 3
colar = colar & a(i) & Chr(9)
Next i
'Копируем 4е значение добавляя "Enter" -chr(13)
colar = colar & a(i) & Chr(13)
For i = 5 To 7
colar = colar & a(i) & Chr(9)
Next i
colar = colar & a(i)
MyDataObj.Clear
MyDataObj.SetText colar
MyDataObj.PutInClipboard
Else
End If
r3.Interior.Color = 15395562
End Sub
[/more]

То получим необходимый результат: Текст скопирован в буфер, а исходные участки выделены (затемнены)
Однако возникает проблема: после вставки текста его шрифт, размер и выравнивание отличается от исходного.
Автор: kit4351
Дата сообщения: 10.01.2011 17:47
У меня возник вопрос, который не могу никак решить. часто приходится менять регистр некоторых слов, например в ворде для этого есть хорошее сочетание клавишь вроде шифт + ф3. я знаю что как и с помощью формулы и программно на vba изменить регистр ячейки или группы ячеек, но задача состоит в том что сделать это с частью текста я ячейке, который соответственно будет выделен (но не всей ячейки).
Прошу помочь если кто знает как решить эту проблему, заранее СПАСИБО!
Автор: vk171281
Дата сообщения: 11.01.2011 12:02

Цитата:
Dmitriy05
К сожалению, не знаю, как это сделать.


попробуйте в код добавить:
Application.CutCopyMode = False
Автор: kit4351
Дата сообщения: 11.01.2011 18:37
неужели никто не знает как реализовать это(
Автор: VicKos
Дата сообщения: 11.01.2011 19:14
kit4351

Цитата:
неужели никто не знает как реализовать это(

Наверное, можно как то и в Excel VBA реализовать, но я в этом не силен.
Как вариант - Punto Switcher (переключатель раскладки клавиатуры), там регистр выделенного текста инвертируется клавишами Alt + Break (строчные в ПРОПИСНЫЕ и наоборот).
Автор: Dmitriy05
Дата сообщения: 11.01.2011 19:42
ferias
Проверил твой код на работе (XP SP3/Excel 2003 SP3) и должен признаться в немного неверной информации:

Когда выделяю и копирую участок

Код:
ActiveSheet.Range("A2:D3").Select
Selection.Copy
Автор: vk171281
Дата сообщения: 11.01.2011 22:01

Цитата:
vk171281
Не поможет - этим мы отменим режим копирования.


именно... эти полоски и означают, что данная область скопированна в буфер обмена. Нужно эту строку добавить в конец кода.
Автор: MYSHKAR
Дата сообщения: 11.01.2011 22:16
Народ,очень нужна помощь с задачками.помогите пожалуйста

1.Даны Целочисленные м, n и матрица (м, n). Вычислите количество строк, у которых есть нулевые элементы.
2.Даны Целое число n и квадратная матрица (n, n). Подсчитайте среднее число четных элементов, которые помещены
1) выше чем диагональ
2) ниже чем диагональ
3) на диагонали
Создайте на форме управление listBox, который позволяет пользователю выбирать один или более элементов задачи. (Расширенное свойство Multiselected=2 набора). Ваша программа должна выполнить только выбранные пункты.
Автор: lihoru
Дата сообщения: 12.01.2011 12:14
Подскажите пожалуйста!

У меня есть большой документ EXCEL, в котором много листов. Мне нужно автоматически разбить его на несколько маленьких документов EXCEL. В каждом документе должны оказаться определенные листы. Как это сделать?
Автор: ZlydenGL
Дата сообщения: 12.01.2011 13:27
lihoru

Код: For Each WS In Thisworkbook.WOrksheets
Set NewWB = Workbooks.add
WS.Copy After:=NewWB.Worksheets(1)
NewWB.SaveAs Thisworkbook.Path & "\" & ws.name & Thisworkbook.Name
NewWB.Close
Next WS
Автор: Dmitriy05
Дата сообщения: 12.01.2011 19:41
vk171281
Понял
Но после копирования текста он вручную вставляеться в другой файл, и после этого теряеться смысл отмены режима копирования.
Автор: MYSHKAR
Дата сообщения: 12.01.2011 22:45
ZlydenGL,спасибо щас попробую!
Автор: Ole Solo
Дата сообщения: 14.01.2011 12:44
Столкнулся с проблемой и не могу понять как ее решить.
Помогите пожалуйста

Есть скрипт, который по циклу обращается к функции, обрабатывает инфу(получает координаты) и вставляет в ячейки. Все отлично работает если инфы не более 10 строк, как только более 10 строк, вываливается ошибка
Runtime error 5 invalid procedure or argument

Ругается на строку в функции GeoCode

Код:
cpoint = Mid(sHTML, lTopicstart + 13, lTopicend - lTopicstart - 13)
Автор: dneprcomp
Дата сообщения: 14.01.2011 20:03
Ole Solo
Похоже что в Mid пытаются использовать отрицательное число и/или Mid пробует работать за пределами длины стринга. Проверь в дебаге в момент ошибки чему равны переменные, вычисляемые значения и как это все соотносится с длиной стринга.
Автор: Ole Solo
Дата сообщения: 14.01.2011 22:26
во время ошибки
lTopicstart = 0
lTopicend = 0

неужели не успевает вычислить?
попробывал поставить паузу во время вычислений 250 миллисекунд, вроде работает нормально. но возможно есть более цивилизованое решение?
Автор: dneprcomp
Дата сообщения: 14.01.2011 23:53
Ole Solo

Цитата:
неужели не успевает вычислить?

Дело не в скорости вычисления. Или sHTML пустая, или в стринге отсутствуют искомые теги.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.