чтобы ставились флажки-написан макрос в "исходном тексте". когда щелкаю на кнопку ПРОВЕСТИ, начинает ругаться на дату , как раньше писала, и не ставятся флажки. ваш файл открываю- все прекрасно.
замучил меня Excel)
замучил меня Excel)
22.06.2013 16:59:51
данные, которые предсталены на втором листе, вбивала сама. так и должно быть. на первом листе даты тоже проставляю сама. Но на листе 2 дат может быть намного меньше,т.к не каждый день покупаются хозтовары. задача в том, чтобы с листа 2 считать даты, сравнить их с датами на листе 1, и если они совпадают-перенести соответствующие суммы
|
|
|
22.06.2013 07:57:41
Здравствуйте,уважаемые форумчане. Не могу сделать макрос. Суть вот в чем: в книге 2 листа-лист 1 и лист 2. на листе 1 есть столбы:номер, наименование операции,даты. под датами будут идти суммы для каждой операции в зависимости от даты.
на листе 2 дана таблица "Хозтовары" со столбцами:номер,дата, сумма. нужно,чтобы на листе Хозтовары была кнопка "Провести", макрос пробегал по столбцу с датами, сравнивал даты с листом 1, и разносил суммы с листа 2 на лист 1. пока что сделан макрос на перенос суммы из конкретной ячейки в конкретную. это неудобно, потому что дат может быть и 30, и 50. а писать 30 макросов-это ужас) я так понимаю,нужен цикл. но как его сделать-я не знаю. посмотрите , пожалуйста, макрос. Подскажите решение. Заранее,огромное-приогромное спасибо |
|
|
21.06.2013 16:52:27
не совсем. даты надо сравнивать, и в если даты одинаковые-то копировать сумму с одного листа на другой. это делается, но для каждого сравнения нужен новый макрос. то есть, если мне надо сравнить 30 дат, то и макросов надо сделать столько же. можно ли сделать цикл,чтобы был один макрос?
|
|
|
21.06.2013 14:13:40
Данный макрос работает только с ячейкой В7 и С7. Для В8 и С8 макрос этот нужно переписывать еще раз, и так для каждой пары ячеек. Как сделать многократное повторение? Чтобы цикл полностью проходил по колонке В и С?
Sub Procedure_1() Dim sh3 As Excel.Worksheet Dim myDate As Date Dim arrC() As Variant Dim myLastRow As Long Dim i As Long 1. Помещаем искомую дату с активного листа из ячейки "B7" в переменную "myDate", чтобы каждый раз не обращаться к ячейке (это может быть ускорит работу кода). myDate = Range("B7").Value 2. Даём VBA-имя третьему Excel-листу. Через это имя удобно будет писать код. Set sh3 = Worksheets(3) 3. В некоторых случаях быстрее работать с VBA-массивом, чем с Excel-ячейками. Поэтому помещаем данные из столбца "C" в VBA-массив. Затем будем в VBA-массиве искать нужную дату. 3.1. Чтобы не брать весь столбец, определяем, какая строка последняя. Т.к. не известно, по какому столбцу определять последнюю строку, то воспользуемся командой "Find". Ищем на третьем листе с конца в начало какие-нибудь данные. Команда "Find" связана с окном программы "Excel" "Найти и заменить", поэтому нужно указывать в команде "Find" все параметры (я не указываю только параметр "After"), даже если эти параметры нам и не нужны, чтобы настройки окна "Найти и заменить" не повлияли на работу команды "Find". What:="?" - знак вопроса здесь - это специальный символ. SearchDirection:=xlPrevious - поиск с конца в начало. myLastRow = sh3.Cells.Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _ MatchCase:=False, SearchFormat:=False).Row 3.2. Помещаем данные в VBA-массив. arrC() = sh3.Range("C1:C" & myLastRow).Value Двигаемся по каждому элементу в массиве. For i = 1 To UBound(arrC, 1) Step 1 Если в элементе наша дата. If arrC(i, 1) = myDate Then 4. Вставляем на третий лист нужные данные. Порядковые номера строк в массиве совпадают с порядковыми номерами строк на Excel-листе. sh3.Cells(i, "C").Offset(19, 3).Value = Range("C7").Value Задача выполнена, поэтому переходим в нужную часть кода. GoTo metka End If Next i Если до сюда дошли, значит не было найдено нужной даты. MsgBox "Не было найдено нужной даты!", vbExclamation metka: End Sub |
|
|
03.06.2013 17:00:55
хочу вернуться опять к датам. На листе движение "денежных средств на расчете" я создала кнопку "Новая дата", при нажатии на которую копируется таблица,которая там находится, новая дата ->новая таблица,соотвественно (даты совпадают и на листе "хозтовары", и на листе "движение средств на расчете").
поиск по дате есть,но встал другой вопрос. за 16.05.2012 35000 перенеслось из листа "хозтовары" в ячейку Е23 на листе "движение средств на расчете". теперь надо,чтобы за 18.04.2012 20000 из ячейки С8 листа хозтовары переносились в ячейку Е53 листа "движение средств на расчете". т.е нужен цикл, да? |
|
|
02.06.2013 08:39:07
пробую вот такой код
Sub vstavka_zakladki() Const myPath As String = "C:\Users\пк\Desktop\Новая папка (3)\вставка.docx" 'Код работает с подключённой библиотекой: 'Tools - References... - Microsoft Word версия Object Library. Dim WApp As Object Set WApp = CreateObject("Word.Application") Set WApp = CreateObject(Class:="Word.Application") WApp.Visible = True Set myDocument = WApp.Documents.Open(Filename:=myPath) Range("C6").Copy myDocument.Bookmarks("вставка").Range.Text = ActiveCell.Value End Sub в документ "вставка.docx" ничего не вставляется,хотя с ячейке С6 значение есть |
|
|