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

» Excel VBA (часть 3)

Автор: andrewkard1980
Дата сообщения: 06.08.2013 22:03
Zhiv4ik
Пробуйте так:

Код:
Sub test()
Dim s1$, s2$
Dim oCBrd As DataObject

Set oCBrd = New DataObject
Cells(1, 1).Copy
oCBrd.GetFromClipboard
s1 = Cells(2, 1).Value
s2 = oCBrd.GetText
Cells(2, 1).Value = s1 & s2
Set oCBrd = Nothing
End Sub

Автор: Zhiv4ik
Дата сообщения: 06.08.2013 22:52
andrewkard1980
а как тут задать адрес ячейки???

Добавлено:
andrewkard1980
не работает!!!!....
а имеет значение как я єту команду запускаю!!
в моем случаи все это вшито в кнопку!)))
Автор: andrewkard1980
Дата сообщения: 07.08.2013 07:23
Zhiv4ik
Добавьте в проект UserForm. Почему не работает, что именно не работает? Я проверял - все отлично пашет.
Cells(1, 1).Copy ' Это адрес первой ячейки, данные которой мы копируем в буфер;
s1 = Cells(2, 1).Value ' Значение второй ячейки записываем в переменную
Cells(2, 1).Value = s1 & s2 ' Записываем значения обоих в ячейку Cells(2, 1)

"Cells(6,1) returns cell A6 on Sheet1." - это и есть адреса, Вам нужно подставить свои ячейки
Автор: Zhiv4ik
Дата сообщения: 07.08.2013 17:47
andrewkard1980
если у меня нет второй ячейки.... информация береться из-вне (допустим с интернета как текст или числовые значения)!!! мне нужно к тому тексту что есть в яцейки, допустим Cells(3,2), дописать другой текст в туже яцейку!!!!

Добавлено:
andrewkard1980
у меня получается что копируется один и тот же текст!

Добавлено:
andrewkard1980
все.... получилось!!!
спасибо))
немного по другому прописал правда!! НО РАБОТАЕТ!
Автор: Leojse
Дата сообщения: 10.08.2013 11:36
Добрый день. Помогите, пожалуйста, со следующим вопросом.
Есть два столбца. Необходимо скрыть строки, содержащие ноль в парных ячейках (т.е. если в А1 и В1 есть нули, то строку нужно скрыть, если в А1 стоит ноль, а В1 ячейка пуста, то строку скрывать не нужно). Причем ноль может быть результатом формулы, либо вбит вручную. Хотелось бы, чтобы не было привязки к определенным столбцам, т.е. выделить 2 произвольных столбца и запустить макрос.

Добавлено:
Прикладываю файл
http://rghost.ru/48026141
Автор: vikkiv
Дата сообщения: 10.08.2013 15:34
Leojse
Код: Sub hidezeroes()
a = Selection.Rows.Count
b = Selection.Columns.Count
If b = 2 Then
For i = 1 To a
If Len(Selection.Cells(i, 1)) > 0 And Selection.Cells(i, 1) = 0 And Len(Selection.Cells(i, 2)) > 0 And Selection.Cells(i, 2) = 0 Then
Selection.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
Else: MsgBox "Select 2 columns"
End If
End Sub
Автор: Leojse
Дата сообщения: 10.08.2013 15:41
vikkiv
Спасибо БОЛЬШОЕ! Очень выручили!
Автор: Zhiv4ik
Дата сообщения: 17.08.2013 11:29
Помогите с таким интересным вопросом!
Есть экселевский файл делающий определенные вычисления. Мне нужно что бы конце, возможно с помощью кнопки, создавался текстовый документ в той же директории где находиться сам файл в который буду заносить основные значения! лучший вариант в виде таблицы такой формы:
текст текст текст текст
Автор: SFC
Дата сообщения: 17.08.2013 11:54
Добрый день всем.
Стоит задача удалить все строки сгруппированные в уровень 2

Код: Sub DELETE_2_LEVEL()
Application.ScreenUpdating = False
With ActiveSheet
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
If .Rows(i).OutlineLevel = 2 Then .Rows(i).Delete
Next
End With
End Sub
Автор: karlss0n
Дата сообщения: 18.08.2013 14:19

Цитата:
Добрый день. Помогите, пожалуйста, со следующим вопросом.
Есть два столбца. Необходимо скрыть строки, содержащие ноль в парных ячейках (т.е. если в А1 и В1 есть нули, то строку нужно скрыть, если в А1 стоит ноль, а В1 ячейка пуста, то строку скрывать не нужно). Причем ноль может быть результатом формулы, либо вбит вручную. Хотелось бы, чтобы не было привязки к определенным столбцам, т.е. выделить 2 произвольных столбца и запустить макрос.



Цитата:

Dim rs
Dim delta

delta = 0
With Selection
For i = 1 To .Rows.Count
rs = 0
For y = 1 To .Columns.Count
rs = rs + .Columns(y).Rows(i - delta)
Next y
If rs = 0 Then
.Rows(i - delta).Delete
delta = delta + 1
End If
Next i
End With
Автор: rbrd78
Дата сообщения: 18.08.2013 14:39
Добрый день.

Подскажите пожалуйста, как сохранять и просматривать debug информацию в VBA?
Автор: karlss0n
Дата сообщения: 18.08.2013 14:40

Цитата:
Помогите с таким интересным вопросом!
Есть экселевский файл делающий определенные вычисления. Мне нужно что бы конце, возможно с помощью кнопки, создавался текстовый документ в той же директории где находиться сам файл в который буду заносить основные значения! лучший вариант в виде таблицы такой формы:
текст     текст     текст     текст
##     ##     ########     ########

и что бы каждый раз значения вносимые значения дополняли эту таблицу а не создавали ее заного



Цитата:

Filename = ThisWorkbook.FullName & ".txt"

Const DELIMITER As String = "|"
Dim myRecord As Range
Dim myField As Range
Dim sOut As String

Open Filename For Append As #1
For Each myRecord In Range("A1:A" & _
Range("A" & Rows.Count).End(xlUp).Row)
With myRecord
For Each myField In Range(.Cells, _
Cells(.Row, Columns.Count).End(xlToLeft))

sOut = sOut & DELIMITER & myField.Text
Next myField
Print #1, Mid(sOut, 1) & "|"
sOut = Empty
End With
Next myRecord
Close #1
Автор: Zhiv4ik
Дата сообщения: 18.08.2013 17:21
karlss0n черт...... не могу до конца понять что тут что!?)))
можешь объяснить, плиззззз!
Автор: karlss0n
Дата сообщения: 18.08.2013 19:22

Цитата:
karlss0n черт...... не могу до конца понять что тут что!?)))
можешь объяснить, плиззззз!


Получаем полное имя книги (с путём) и добавляем к названию .txt
Filename = ThisWorkbook.FullName & ".txt"

определяем разделитель
Const DELIMITER As String = "|"
определяем переменные
Dim myRecord As Range
Dim myField As Range
Dim sOut As String

открываем файл для записи в конец (append)
Open Filename For Append As #1
для каждой строчки на листе...
For Each myRecord In Range("A1:A" & _
Range("A" & Rows.Count).End(xlUp).Row)
With myRecord
для каждой ячейки в строке...
For Each myField In Range(.Cells, _
Cells(.Row, Columns.Count).End(xlToLeft))
генерируем строку "РАЗДЕЛИТЕЛЬ Значение ячейки"
sOut = sOut & DELIMITER & myField.Text
Next myField
Пишем результат в файл
Print #1, Mid(sOut, 1) & "|"
обнуляем строку (т.к. ряд закончили)
sOut = Empty
End With
Next myRecord
закрываем файл
Close #1
Автор: Zhiv4ik
Дата сообщения: 18.08.2013 19:33
karlss0n это создается файл с именем книги, но мне этого не надо!!


Добавлено:
karlss0n + шапка таблицы нужно прописать в коде, это определитель к значения которые будут записываться
Автор: karlss0n
Дата сообщения: 18.08.2013 20:19
Zhiv4ik

Цитата:
karlss0n это создается файл с именем книги, но мне этого не надо!!
 
 
Добавлено:
karlss0n + шапка таблицы нужно прописать в коде, это определитель к значения которые будут записываться


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

Шапку можно записать
Print #1, "ваша шапка"

Добавь до и после цикла по ячейкам header и footer, какие нужны.
Автор: Xromos
Дата сообщения: 19.08.2013 15:03
Кто знает....? очень надо, спецы МСО молчат на мои запросы.


Есть тучи хмл файлов (1-2тыщи), для MSO 2003 я делал скрипт импорта этих файлов в эксель лист, распарсивал и закрывал.


В новом офисе 2010 пишет ошибку типа "DDE is block" и как я понял это сделано для безопасности. Пробовал давать макс.права скриптам, безопасность...ниче не помогло.

Новый офис тупо не открывает XML файлы, хотя возможность сделать есть.


Что подскажете?
Автор: karlss0n
Дата сообщения: 19.08.2013 19:36
Xromos

Покажи код на котором ошибка возникает и пример XML файла
Автор: Leojse
Дата сообщения: 25.08.2013 18:18
Добрый вечер.
Надеюсь на Вашу помощь. Есть таблица, в которую вбиваются данные в цветные ячейки (заливка может быть разного цвета). Нужно, чтобы при заполнении ячейки макрос "шел" по этому же столбцу, где расположена заполненная ячейка, вверх и находил первую не залитую ячейку и ставил в ней какой-нибудь символ (пусть будет $, <,> вообщем, не важно, какой будет символ). Эти символы нужно ставить в 5, 10, 12 и 13 столбцах.
И, если не трудно, можно прокомментировать код?
Заранее ОГРОМНОЕ СПАСИБО!)
Автор: Oyger
Дата сообщения: 26.08.2013 13:17
Leojse
Сразу скажу, я не даю готовых кодов - Вы должны сами посидеть и подумать.

Код почти готовый. Вставляется в объект "Эта книга"

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'От измененной ячейки просматриваются все ячейки вверх (по столбцу, в котором изменилась ячейка). И в первой "не закрашеной" ставется "$"
If Target.Row > 1 Then
For q = Target.Row - 1 To 1 Step -1
If Cells(q, Target.Column).Interior.Pattern = xlNone Then
Cells(q, Target.Column).Value = "$"
End
End If
Next
End If
End Sub
Автор: Leojse
Дата сообщения: 26.08.2013 17:45
Oyger
Спасибо Вам большое за внимание, но если бы я что-то понимал в VBA, то не писал бы здесь.... Попробовал Ваш код - знак $ ставится абсолютно во всех не залитых ячейках, расположенных выше заполненной, как поправить - не знаю. Ставится во всех столбцах - опять же не знаю как править.
Автор: aidomars
Дата сообщения: 26.08.2013 19:20
Leojse

Код: Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False 'отключить обработчик событий
If ActiveCell.Row > 1 Then 'если активная строка > 1
For q = ActiveCell.Row - 1 To 1 Step -1 'цикл наверх с шагом -1
If Cells(q, ActiveCell.Column).Interior.Pattern = xlNone Then 'если ячейка не закрашенная
For Each n In Array(ActiveCell.Column, 5, 10, 12, 13) 'цикл по столбцам
Cells(q, n) = "$"
Next
Exit For 'выход из цикла
End If
Next
End If
Application.EnableEvents = True 'включить обработчик событий
End Sub
Автор: Leojse
Дата сообщения: 26.08.2013 22:13
aidomars
Спасибо БОЛЬШОЕ! Но можно еще вопросик?
Когда вбиваю в столбик 5 данные, то $ ставится и во все остальные столбцы... А можно ли, чтобы при заполнении столбца 5 "доллары" вбивались бы только в 5 столбце, а не во всех остальных сразу?
Автор: karlss0n
Дата сообщения: 27.08.2013 08:19
Leojse

Заменить

Код:
For Each n In Array(ActiveCell.Column, 5, 10, 12, 13) 'цикл по столбцам
Cells(q, n) = "$"
Next
Автор: aidomars
Дата сообщения: 27.08.2013 08:45
karlss0n
Тогда остальные столбцы не будут заполняться
Надо так

Код: For Each n In Array(ActiveCell.Column, 5, 10, 12, 13) 'цикл по столбцам
Cells(q, n) = "$"
If ActiveCell.Column = 5 then Exit For ' если столбец 5 - выходим
Next
Автор: Oyger
Дата сообщения: 27.08.2013 08:47
aidomars
Про обработчик событий - забыл. Спасибо.
Автор: Leojse
Дата сообщения: 27.08.2013 20:47
Oyger
aidomars
karlss0n
Огромное Вам спасибо за помощь!
Автор: karlss0n
Дата сообщения: 28.08.2013 11:17
aidomars

Он же просил, чтобы $ вбивались в том столбце, в котором редактирование идёт, разве нет?

Если только редактируемый и только если он 5, 10,12,13, то как то так получается:


Код:
For Each n In Array(5, 10, 12, 13) 'цикл по столбцам
if ActiveCell.Column=n then Cells(q, n) = "$"
Next
Автор: aidomars
Дата сообщения: 28.08.2013 11:20
karlss0n
Вроде только в пятом просил.
Автор: nic_name
Дата сообщения: 29.08.2013 02:49
Добрый день, коллеги!
Нужна ваша подсказка. Задача такая:

1. Есть два массива А(i) и B(i,2)
2. Массив А одномерный, содержит i строк разной длины. Тип данных - variant
3. Массив B двумерный, содержит i строк и 3 столбца. Тип данных - integer
4. Каждая строка i массива A состоит из 3-х подстрок разной длины
5. Для каждой строки i длина подстрок определена в массиве B(i,2)
6. Элемент массива B(i,0) определяет длину 1-й подстроки i-той строки (в количестве символов)
7. Элемент массива B(i,1) определяет длину (1-й + 2-й) подстроки i-той строки
8. Элемент массива B(i,2) определяет длину (1-й + 2-й + 3-й) подстроки i-той строки, то есть, полностью длину строки i.

Так, если надо получить, скажем, 2-ю подстроку 18-й строки, то необходимо для элемента А(17) вывести символы
начиная с [В(17,0)+1] длинной [В(17,1) - B(17,0)] символов.

Вопрос стоит так:
Как организовать вывод заданной подстроки в заданную ячейку?
Нужна помощь, просто пока знаний по этой части не хватает.
Дальше "ActiveCell.Value = ... " дело не идёт
Как это сделать, подскажите пожалуйста.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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