Top.Mail.Ru

Перейти к содержимому

Фотография

Кто может помочь с макросом для Exel?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 39

#1 Bier

Bier

    Зубогинеколог

  • Свой
  • PipPipPipPipPipPip
  • 19 682 Cообщений
  • Регистрация: 07.10.01
4 187
Очень хороший
  • Пол:Мужчина
  • Город:Питер

Отправлено 25 декабря 2015 - 10:41

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

 

 

Вкратце алгоритм работы макроса можно описать так:

  • сканирует все строки карточки счета, расположенной на листе «Карточка счета 51»;
  • на основе данных из карточки формирует реестр хозяйственных операций, который размещает на листе «Реестр операций».

Sub RegMake()
    Dim SheetIn, SheetOut As Worksheet
    Dim S, S1, A1, A2, A3, B1, B2, B3, C1, C2, C3 As String
    Dim K, BrakePos, BrakePos1, BrakePos2 As Integer

    Set SheetIn = ActiveWorkbook.Worksheets("Карточка 51 счёта")
    Set SheetOut = ActiveWorkbook.Worksheets("Реестр операций")

    SheetOut.Range("A2:L10000").ClearContents

    K = 9

    Do While SheetIn.Cells(K, 1).Value <> ""

        SheetOut.Cells(K + 1, 1).Value = K - 8
        SheetOut.Cells(K + 1, 2).Value = CDate(SheetIn.Cells(K, 1))
        SheetOut.Cells(K + 1, 13).Value = Month(CDate(SheetIn.Cells(K, 1)))
        If SheetIn.Cells(K, 6).Value = "51" Then
           SheetOut.Cells(K + 1, 3).Value = - (-Format(CSng(SheetIn.Cells(K,7).Value), "# ##0.00"))
           SheetOut.Cells(K + 1, 10).Value = - (-Format(CSng(SheetIn.Cells(K,7).Value), "# ##0.00"))
      Else
           SheetOut.Cells(K + 1, 3).Value =-Format(CSng(SheetIn.Cells(K, 10).Value), "# ##0.00")        
           SheetOut.Cells(K + 1, 10).Value =-Format(CSng(SheetIn.Cells(K, 10).Value), "# ##0.00")

        End If

        SheetOut.Cells(K + 1, 4).Value = "Основной"
        SheetOut.Cells(K + 1, 11).Value = "RUR"
        SheetOut.Cells(K + 1, 9).Value = "Д" & SheetIn.Cells(K, 6).
        Value & "К" & SheetIn.Cells(K, 9).Value

        A1 = ""
        A2 = ""
        A3 = ""
        B1 = ""
        B2 = ""
        B3 = ""
        C1 = ""
        C2 = ""

        С3 = ""

        S = SheetIn.Cells(K, 2).Value
        BrakePos = InStr(S, Chr(10))
        If BrakePos <> 0 Then
           A1 = Left(S, BrakePos - 1)
           A2 = Right(S, Len(S) - BrakePos)
        End If

        S = SheetIn.Cells(K, 4).Value
        BrakePos = InStr(S, Chr(10))

        If BrakePos = 0 Then
           B1 = S
        Else
           B1 = Left(S, BrakePos - 1)
           S = Right(S, Len(S) - BrakePos)
           BrakePos = InStr(S, Chr(10))
          If BrakePos = 0 Then
               B2 = S
           Else
                B2 = Left(S, BrakePos - 1)
                B3 = Right(S, Len(S) - BrakePos)
           End If
        End If
        S = SheetIn.Cells(K, 5).Value
        BrakePos = InStr(S, Chr(10))
        If BrakePos = 0 Then
                C1 = S
        Else
                C1 = Left(S, BrakePos - 1)
                S = Right(S, Len(S) - BrakePos)
                BrakePos = InStr(S, Chr(10))
                If BrakePos = 0 Then
                    C2 = S
            Else
                 C2 = Left(S, BrakePos - 1)
                    C3 = Right(S, Len(S) - BrakePos)
            End If
        End If

        SheetOut.Cells(K + 1, 8).Value = A2
        If SheetIn.Cells(K, 6).Value = "51" Then
        SheetOut.Cells(K + 1, 6).Value = B2
        SheetOut.Cells(K + 1, 7).Value = C1
   Else
           SheetOut.Cells(K + 1, 6).Value = C2
           SheetOut.Cells(K + 1, 7).Value = B1
   End If

   K = K + 1

Loop

SheetOut.Rows("2:9").Delete Shift:=xlUp
MsgBox ("Реестр банковских операций сформирован.")

End Sub


  • 0

Реклама

Реклама
Хочешь убрать эти баннеры? Пройди регистрацию на форуме.

#2 Крик оленёнка

Крик оленёнка

    Мы рождены, чтоб Сада сделать былью

  • Полноправный
  • PipPipPipPip
  • 1 849 Cообщений
  • Регистрация: 09.05.09
397
Очень хороший
  • Пол:Мужчина
  • Город:Москва

Отправлено 25 декабря 2015 - 10:59

Не спец по VВ и макросам, но предположу, что надо как-то так:

SheetOut.Cells(K + 1, 9).Value = "Д" & CChar(SheetIn.Cells(K, 6).Value) & "К" & CChar(SheetIn.Cells(K, 9).Value)

 

 

Но вообще бухгалтерию лучше вести в другой программе, даже базовая версия 1С за 3300 надёжнее и удобнее :)


  • 0
стук в дверь:
- мне нужен Дима!
- он спит...
- я тоже хочу спать с ним!

#3 Lizard

Lizard

    старофлудер

  • Перцы
  • PipPipPipPipPip
  • 3 986 Cообщений
  • Регистрация: 20.12.04
1 085
Очень хороший
  • Пол:Мужчина
  • Город:saratov

Отправлено 25 декабря 2015 - 11:55

Блин Биер) Я давно держу фрилансеров на любой вкус и цвет, включая спецов по макросам в эсель. И стоят они копейки) Когда не было потока работы - просто штучно заказывал. Сильно выгодней чем самому копать) 


  • 0

#4 Bier

Bier

    Зубогинеколог

  • Свой
  • PipPipPipPipPipPip
  • 19 682 Cообщений
  • Регистрация: 07.10.01
4 187
Очень хороший
  • Пол:Мужчина
  • Город:Питер

Отправлено 25 декабря 2015 - 13:24

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

 

Лизард советуешь на фрилансе искать? Нам это настолько редко нужно, что может подскажешь кого?


  • 0

#5 Lizard

Lizard

    старофлудер

  • Перцы
  • PipPipPipPipPip
  • 3 986 Cообщений
  • Регистрация: 20.12.04
1 085
Очень хороший
  • Пол:Мужчина
  • Город:saratov

Отправлено 25 декабря 2015 - 19:14

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

 

Лизард советуешь на фрилансе искать? Нам это настолько редко нужно, что может подскажешь кого?

 

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


  • 0

#6 sssrrr

sssrrr
  • Перцы
  • 34 Cообщений
  • Регистрация: 09.12.08
69
Очень хороший
  • Город:Russia, Chelyabinsk

Отправлено 26 декабря 2015 - 15:11

в одну строчку попробуй


  • 0

#7 ~D'Evil~

~D'Evil~

    советчик-профан

  • Полноправный
  • PipPipPipPipPipPip
  • 11 455 Cообщений
  • Регистрация: 18.12.05
3 465
Очень хороший
  • Пол:Мужчина
  • Город:Northern Venice, East side

Отправлено 26 декабря 2015 - 15:34

Согласен с предыдущим оратором. 

 

В синтаксисе конкретно экселя не силен, но логика всего текста в том, что новая операция начинается с новой строки и ни одна из строк всех операций не оканчивается точкой. 

 

Поэтому запиши так: SheetOut.Cells(K + 1, 9).Value = "Д" & SheetIn.Cells(K, 6).Value & "К" & SheetIn.Cells(K, 9).Value


Сообщение отредактировал ~D'Evil~: 26 декабря 2015 - 15:35

  • 0

No brain - no gain.


#8 Bier

Bier

    Зубогинеколог

  • Свой
  • PipPipPipPipPipPip
  • 19 682 Cообщений
  • Регистрация: 07.10.01
4 187
Очень хороший
  • Пол:Мужчина
  • Город:Питер

Отправлено 03 января 2016 - 21:06

спасибо, осилил я этот макрос )))


  • 0

#9 ~D'Evil~

~D'Evil~

    советчик-профан

  • Полноправный
  • PipPipPipPipPipPip
  • 11 455 Cообщений
  • Регистрация: 18.12.05
3 465
Очень хороший
  • Пол:Мужчина
  • Город:Northern Venice, East side

Отправлено 04 января 2016 - 00:57

Так в чем там проблема была, как решил?


  • 0

No brain - no gain.


#10 Bier

Bier

    Зубогинеколог

  • Свой
  • PipPipPipPipPipPip
  • 19 682 Cообщений
  • Регистрация: 07.10.01
4 187
Очень хороший
  • Пол:Мужчина
  • Город:Питер

Отправлено 04 января 2016 - 10:22

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


  • 0

#11 Mixrud

Mixrud

    старофлудер

  • Забанен
  • PipPipPipPipPip
  • 3 619 Cообщений
  • Регистрация: 02.06.09
347
Очень хороший
  • Пол:Мужчина

Отправлено 07 января 2016 - 00:45

Это возвращает ссылку на объект класса Cell (ячейка) SheetIn.Cells(K, 6)., точка подразумевает переход к свойствам и методам ячейки по ссылке. Такое обращение необходимо писать на VB в одну строчку - SheetIn.Cells(K, 6).Value 

означает получить ячейку К:6 и вытащить из нее значение. 


Сообщение отредактировал Mixrud: 07 января 2016 - 00:46

  • 0

#12 SunDot

SunDot

  • Проходит регистрацию
  • PipPipPipPip
  • 1 736 Cообщений
  • Регистрация: 02.01.14
189
Очень хороший
  • Пол:Мужчина

Отправлено 13 января 2016 - 18:58

И не лень зарабатывая раз в 5 больше программиста самому писать макросы...)))


  • 0

Изменил пароль на случайный - и не стал его запоминать.


#13 Roman Ivanov

Roman Ivanov

    Любитель

  • Лингвисты
  • PipPipPip
  • 1 024 Cообщений
  • Регистрация: 20.01.09
203
Очень хороший
  • Пол:Мужчина
  • Город:Москва

Отправлено 15 января 2016 - 18:32

Так, он не сам правил.  ;)

Если кому нужно - пишите, на исправление его макроса ушло 30 мин попивая чай в новогодние праздники ))

 

p.s. хороший программист (не в РФ) поднимает 180 штук грина в год.


  • 0

Базовый, Трансовый, Лингвистика, Секреты Лидерства, Харизматичный лидер ...


#14 ~D'Evil~

~D'Evil~

    советчик-профан

  • Полноправный
  • PipPipPipPipPipPip
  • 11 455 Cообщений
  • Регистрация: 18.12.05
3 465
Очень хороший
  • Пол:Мужчина
  • Город:Northern Venice, East side

Отправлено 15 января 2016 - 22:17

И сколько заработал? ))


  • 0

No brain - no gain.


#15 Level_One

Level_One

    на связи

  • Лингвисты
  • PipPipPip
  • 1 186 Cообщений
  • Регистрация: 01.01.06
290
Очень хороший
  • Пол:Мужчина
  • Город:Москва

Отправлено 15 января 2016 - 22:38

Если бы у меня был компьютер, я бы поправил минут за 10-15 бесплатно))) Делов-то: поставить точку останова, пройтись отладчиком по F8, подсветить мышкой переменные, посмотреть где что не так и исправить))) VBA знаю неплохо, в свое время много с ним развлекался в банке. А то пока программистов заставишь какой-нибудь отчет сделать, полгода пройдет, начиная с утверждения технического задания)))

Вообще, как мне кажется, все современные люди должны мало-мальски разбираться в основах программирования, работы с базами данных, на начальном уровне понимать сетевые технологии, и еще кое-что по мелочам.
  • 0
Инсталлирую 5-й контур с дистрибутива заказчика




Количество пользователей, читающих эту тему: 1

0