Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
поиск в видимых ячейках\строках, сейчас макрос возвращает данные в скрытых строках, - они не нужны.
 
zav, спасибо, большое!
Цитата
zav написал:
Непонятно, для чего Вам Select
тестировал, что выделяет, больше нигде не используется)
поиск в видимых ячейках\строках, сейчас макрос возвращает данные в скрытых строках, - они не нужны.
 
Ищется часть слова от "контракта":
Код
contract = Cells.Find("*контра*").Offset(0, 1).Select
как сделать поиск только по видимому диапазону листа? спасибо.
Активировать лист рабочей книги из списка, из трёх вариантов
 
DANIKOLA, спасибо!
Активировать лист рабочей книги из списка, из трёх вариантов
 
А можно сделать сразу список, типо: spisok = Array("Апсны", "Флагман", "разбивки")... и если из списка найден лист- активировать его: .spisok.Select, сейчас использую вот такую конструкцию:
Код
Sub Tеек()
Dim sh As Worksheet

  For Each sh In ThisWorkbook.Worksheets      
        If LCase(sh.Name) Like "апсны" Then
        sh.Select
        End If
        If LCase(sh.Name) Like "флагман" Then
        sh.Select
        End If
        If LCase(sh.Name) Like "разбивки" Then
        sh.Select
        End If 
Next
End Sub
хотелось бы укоротить как-то код... есть мысли какие-то? спасибо. Названия листов будут только в одном экземпляре из списка.
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Val("1") = 1 (для целых чисел)
всё, конечная версия выглядит так:
Код
a = Val(CStr(tbl.Cells(lngRowIndex - 1, "D").Value))
теперь красиво прям! vikttur - респект!
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
sokol92 написал:
Решаем без доски Excel
не..для меня слишком много букв! вот, что ексель животворящий делает!
Код
Debug.Print s = d, s = v2, v1 = d, v1 = v2
            True    True    True    False
   
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Hugo, Я читал про переменные, как Вы писали,- ничего в голову не пришло... цитата: "а т.к. это судя по всему коды, то логично сразу делать их строковыми",- насчёт логики тут дело спорное, всех не упомнишь)):
Изменено: Домкрат - 29 май 2020 06:34:17
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
Hugo написал:
Зачем там Variant? Собираетесь эти коды перемножать?
код не ругается. А какой нужно?
Цитата
Hugo написал:
Может будем проще?
спасибо, в архив поставлю пока, может пригодится.  
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Хотелось бы отметить, уважаемые программисты, что не у всех получается сидеть днями над кодом, например у меня через час, если начинаются заморочки, примерно, просто-напросто мозг тупеет напрочь. И уже ничего бесполезно пытаться соображать. Хоть заизучайся там доуsepy.  Результат будет нулевой.  Поэтому фразы типа: "Помощь "на тарелочке" - это зачастую мкдвкежья услуга!",- а до "тарелочки" я уже > месяца эту тему двигаю.. я просто к тому, что всё в мире относительно, и написать ИЗНАЧАЛЬНО ПРАВИЛЬНО: "a = Val(a)" , а не  "Val(a)= а" , как было предложено изначально, я  считаю  было бы большой помощью , чем тратить непонятно на что время.
Изменено: Домкрат - 28 май 2020 20:37:47
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Юрий М, эти не равны: a = b . вроде уже всё выяснили, в этой теме. теперь код слишком велИк получается...
Код
Sub qqq()
    a = 123
    b = "123"
     Debug.Print a = b 'False
     Debug.Print a = Val(b) 'True
End Sub
Изменено: Домкрат - 28 май 2020 20:11:09
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
Юрий М написал:
Извиниться не хотите?
хочу, -ИЗВИНИТЕ;
-
Цитата
Юрий М написал:
И привёл вариант ВАШЕГО кода из #5
так там не работало, потому-что стояло изначально наоборот, как привел уважаемый викктур. Я после изучения темы поменял местами переменные и все заработало.
Цитата
Юрий М написал:
вместо того, чтоб показывать именно код.
вот он код, ещё не совсем почти готов, а так все рабочее.
Код
Sub Bijsumm()

    Main "Начало бижутерии", "Конец бижутерии"
End Sub

Private Sub Main(strStartPhrase As String, strEndPhrase As String)

    Dim sh_act As Worksheet, tbl As Range
    Dim dicDopi As Object
    Dim arrB()
    Dim arrBlankRows() As Long
    Dim lngRowIndex As Long
    Dim hr As Long, lr As Long, i As Long
    Dim KodVd As Variant, a As Variant
    Dim k As Integer
    Dim Nachalo As Integer, lngKonec As Integer
    

    Nachalo = НачалоДанных
    lngKonec = КонецДанных
    
    '1. Создание ссылки на активный лист.
    Set sh_act = ActiveSheet
    If sh_act Is Nothing Then
        Exit Sub
    End If
    ActiveSheet.name = "Апсны"
    With ActiveWorkbook.Sheets("Апсны").Tab
        .Color = 10092390
        .TintAndShade = 0
    End With
    '2. Поиск шапки и последней строки таблицы.
    S_Hr.Function2 sh_act, hr, lr
    
    '3. Копирование данных по допам из листа-надстройки в словарь "dicDopi".
    If BIJ_BIJ_SUM_2_GetAddin.Function1(dicDopi) = False Then
        Exit Sub
    End If
            
    '4. Создание ссылки на таблицу.
        ' Включение в таблицу строки после таблицы.
    Set tbl = sh_act.Rows(hr & ":" & lr + 1)
    
    '5.
    ' Копирование столбца B в массив "arrB".
    ' Подготовка данных к сравнению.
    arrB() = tbl.Columns("B").Value
    For i = 1 To UBound(arrB, 1) Step 1
        arrB(i, 1) = CStr(arrB(i, 1))
    Next i
    
    
    '6. Получение информации о пустых строках в массив "arrBlankRows".
    
    ReDim arrBlankRows(1 To 1)
    
    ' Первая строка - шапка.
    ' Во вторую строку не вставляется формула, но первая строка нужна
        ' для расчёта формулы в нижерасположенной пустой строке.
    For i = 2 To UBound(arrB, 1) Step 1
        ' Учитываются все пустые строки, т.к. надо будет потом вставлять формулы
            ' с учётом вышестоящих пустых строк.
        If arrB(i, 1) = "" Then
            arrBlankRows(UBound(arrBlankRows)) = i
            ReDim Preserve arrBlankRows(1 To UBound(arrBlankRows) + 1)
        End If
    Next i
    ' Если не было пустых ячеек в столбце B или была пустая ячейка только во второй строке,
        ' то дальше нет смысла что-то делать.
    If UBound(arrBlankRows) < 3 Then
        MsgBox "В таблице, в столбце ""B"" нет пустых ячеек. " & _
            "Макрос вставляет суммы в пустые ячейки.", vbExclamation
        Exit Sub
    End If
    ' Удаление последнего элемента из массива "arrBlankRows", который создавался заранее.
    ReDim Preserve arrBlankRows(1 To UBound(arrBlankRows) - 1)
    
    
    '7. Откл. монитора.
   ' Application.ScreenUpdating = False
    
    
    '8. Вставка формул.
    
    ' В массиве "arrBlankRows" могут находиться три вида пустых строк:
        '1) пустые строки с заголовками групп;
        '2) пустые строки, в которые не надо вставлять формулы;
        '3) пустые строки, в которые надо вставлять формулы.
    ' Первая пустая строка - это сразу после шапки таблицы. В неё не надо вставлять формулы.
    For i = 2 To UBound(arrBlankRows) Step 1
    
        ' Помещение порядкового номера Excel-строки в переменную для удобства.
        lngRowIndex = arrBlankRows(i)
        
        ' Пустые строки с заголовками групп пропускаем.
        ' Они определяются по двум подряд стоящим пустым строкам.
        If arrB(lngRowIndex - 1, 1) = "" Then
            ' Переход к следующей пустой строке.
            GoTo metka
        End If
        
        ' Если над пустой строкой через одну строку пусто, значит
            ' блок состоит из одной строки и формулы не надо вставлять.
        ' Сверху пустая строка может быть двух видов:
            ' 1) пустая строка с заголовком группы;
            ' 2) пустая строка между блоками.
            ' В любом случае действие будет одинаковое.
      

        If arrB(lngRowIndex - 2, 1) = "" Then
     
            ' В столбец "S" нужно вставлять данные на основе словаря "dicDopi".
            If dicDopi.Exists(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = True Then
                If dicDopi.Item(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = "ДОП НУЖЕН" Then
                
'                    With tbl.Cells(lngRowIndex - 1, "S")
'                        .Value = tbl.Cells(lngRowIndex - 1, "K").Value
'                        ' Форматирование.
'                        .Interior.Color = 65535
'                        '.BorderAround xlContinuous!!!нахуй нужны бордюры!!!
'
'                    End With
                End If
            End If
           
        ' Если сверху над пустой строкой несколько непустых строк, то
            ' вставка формул (формулы проще вставить, чем рассчитывать с помощью макроса).
        Else
       
            tbl.Cells(lngRowIndex, "K").FormulaR1C1 = _
                "=ROUND(SUM(R[-" & lngRowIndex - arrBlankRows(i - 1) - 1 & "]C:R[-1]C),2)"
            tbl.Cells(lngRowIndex, "N").Resize(1, 2).FormulaR1C1 = _
                "=ROUND(SUM(R[-" & lngRowIndex - arrBlankRows(i - 1) - 1 & "]C:R[-1]C),2)"
            tbl.Cells(lngRowIndex, "R").FormulaR1C1 = _
                "=ROUND(SUM(R[-" & lngRowIndex - arrBlankRows(i - 1) - 1 & "]C:R[-1]C),2)"
            ' Выделение цветом.
            tbl.Cells(lngRowIndex, "K").Resize(1, 8).Interior.Color = 65535
        
            
'            ' В столбец "S" нужно вставлять данные на основе словаря "dicDopi".
           If dicDopi.Exists(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = True Then
           If dicDopi.Item(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = "ДОП НУЖЕН" Then
           a = CStr(tbl.Cells(lngRowIndex - 1, "D").Value) '
           'переводим текстовый в числовой:
           ' это числовой в текстовый:
           'KodVd = "" & KodVd
           a = Val(a)
           
          
            ' допы простовляем напротив каждой. ибо нех.
            For k = Nachalo To lngKonec Step 1
            KodVd = Val(ActiveSheet.Cells(k, 4).Value)
        
            If KodVd = a Then
            Cells(k, 19) = Cells(k, 11)
            With Cells(k, "S")
                       .HorizontalAlignment = xlCenter
                       .BorderAround xlContinuous '!!!нахуй нужны бордюры!!!
                    End With
            End If
            Next
            
              ' вот здесь в столбце S будет суммировать промежуточные итоги:
               tbl.Cells(lngRowIndex, "S").FormulaR1C1 = _
                "=ROUND(SUM(R[-" & lngRowIndex - arrBlankRows(i - 1) - 1 & "]C:R[-1]C),2)"
                With tbl.Cells(lngRowIndex, "S")
'                        .Value = tbl.Cells(lngRowIndex, "K").Value  ' это значение из столбца K одставляеться, а мне нужно , чтоли суммироувало
                       .Interior.Color = 65535
                       .HorizontalAlignment = xlCenter
                       .Font.Bold = True
                       .BorderAround xlContinuous '!!!нахуй нужны бордюры!!!
                    End With
'
           ' это значение из столбца K подставляться:
           
'
            ' это ориганальный код:
'            ' В столбец "S" нужно вставлять данные на основе словаря "dicDopi".
'            If dicDopi.Exists(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = True Then
'               If dicDopi.Item(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = "ДОП НУЖЕН" Then
'                         With tbl.Cells(lngRowIndex, "S")
'                        .Value = tbl.Cells(lngRowIndex, "K").Value ' это значение из столбца K одставляеться, а мне нужно , чтоли суммироувало
'                        .Interior.Color = 65535
'                        .BorderAround xlContinuous '!!!нахуй нужны бордюры!!!
'                    End With
                End If
          End If
          End If
      
    
metka:
    Next i
  
    '9. Создание справа таблицы с кол-вом мест.
    'S_KOLMEST_1_CreateTbl.Main sh_act
    
    '10. Включение обновления монитора.
    'Application.ScreenUpdating = True
    
End Sub



Изменено: Домкрат - 28 май 2020 19:58:18
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
Юрий М написал:
Домкрат , Вы утверждаете, что запись Val("a") = a корректная?
я для кого фотки выкладываю с рабочим кодом? Там ясно видно что переменная возвращает ЧИСЛО а не текст, как было изначально. Вы код умеете читать, или только по губам?
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Это была демонстрация,
я догадался, но местами пришлось менять переменные, тогда и заработало.
Изменено: Домкрат - 28 май 2020 19:36:26
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Ваш реактор такое пропустит?
нет.
А вот это пропустит:
a = Val(a) с еденицей я  указал для наглядности, что Вы наоборот написали. вот так: " Val("1") = 1" (для целых чисел), а надо было "1=Val("1")"
Вы же сами говорили, чтобы я изучал тему, вот я и изучил,- что вы с ошибкой дали код))
Изменено: Домкрат - 28 май 2020 19:34:22
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Ігор Гончаренко, на таболе #18 показан конечный результат работы макросов, в #16 посте на фотке число без кавычек,- ко мне какие притензии?
Изменено: Домкрат - 28 май 2020 18:31:32
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
редактор попросит Вас исправить
чёт не просит:
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Val("1") = 1 (для целых чисел)
Вы наоборот всё написали.
вот рабочий вариант: 1 = Val(1)
не видать Вам червонца золотого.....Извините, но ничего личного. ТОЛЬКО ЧЕЛОВЕЧЕСКОЕ СПАСИБО.
Изменено: Домкрат - 28 май 2020 17:31:01
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur напесал:
Помощь "на тарелочке" - это зачастую мкдвкежья услуга!
хорошо, я пока поизучаю про строковые переменные, а вы пока вот ето за 10р. добъете?) там 10% осталось.
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Вам основы изучать надо.
Я сюда обращаюсь с конкртным примером, в конкретной строке кода, вместо помощи я получаю советы типа: "Вам основы изучать надо." и "Изучайте операторы"
-я вам по колхозному отвечу:

KodVd = "" & KodVd
это вам ниже собственного достоинства? гордость не позволяет помочь людям?
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Изучайте операторы
я так тоже могу ответить на ЛЮБОЙ  вопрос на форуме. спасибо за "помощь".
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
Цитата
vikttur написал:
Об этом операторе читали чего-нибудь?
возвращает строковые данные.
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
vikttur, в моём случае, как переменную а ? я  пробовал,- никак не получается.
Код
 a = CStr(tbl.Cells(lngRowIndex - 1, "D").Value)  

преобразовать в число, на моем примере можете подсказать?
Изменено: Домкрат - 28 май 2020 15:49:11
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
vikttur, не вижу, тыкните пальцем, пожалуста.
Почему переменные с одинаковыми значениями не видят друг друга?, и выполнение кода пропускает их одинаковые значения, может из-за кавычек, возвращаемых одной из переменных?
 
фрагмент кода(там всё в надстройке работает, нужно очень долго выдергивать для примера, может так будет понятно?):

Код
  ' В столбец "S" нужно вставлять данные на основе словаря "dicDopi".
           If dicDopi.Exists(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = True Then
           If dicDopi.Item(key:=CStr(tbl.Cells(lngRowIndex - 1, "D"))) = "ДОП НУЖЕН" Then

         ' данные для пременной "a" беру отсюдова: 
           a = CStr(tbl.Cells(lngRowIndex - 1, "D").Value)    
                  
            For k = Nachalo To lngKonec Step 1
           ' данные для переменной   kODvD беру здесь:
             KodVd = Val(ActiveSheet.Cells(k, 4).Value)
           ' В ОПРЕДЕЛЕННЫЙ МОМЕНТ УСЛОВИЕ ВЫПОЛНЯЕТСЯ: 9004109100 = 9004109100, 
            If KodVd = a Then
             Cells(k, 19) = Cells(k, 11)
         ' но код не видит , что условие выполнено, а постоянно пререходит на енд иф:
            End If
            Next
переменная KodVd возвращает значение 9004109100: KodVd = 9004109100,см. на фото:
переменная "a" возвращает значение "9004109100":  а = "9004109100", см. на фото:
т.е. после
Код
If KodVd = a Then
должна выполнятся
Код
Cells(k, 19) = Cells(k, 11)
а этого не происходит(
может потому-что
9004109100 <> "9004109100"??
есть идеи какие нить? как исправить?
Изменено: Домкрат - 28 май 2020 15:34:03
Как циклом пройтись по файлам в папке в зависимости от их размера?
 
Цитата
Домкрат написал:
так вообще возможно делать?
да, домкрат,- ты красавчик)
Теперь макрос проверяет размер книги, и в зависимости от этого производит нужные действия.
Код
 'Windows(ИМЯ_новой_КНИГИ).Activate
          ' узнаём её размер:
        
          'Создание объекта для работы с папками и файлами.
      Set myFSO = CreateObject(Class:="Scripting.FileSystemObject")
      'Создание ссылки на папку, в которой находятся инвойсы.
          ' Путь определяется по активному файлу.
      Set myFolder = myFSO.GetFolder(ActiveWorkbook.Path)
        iFullName = myFolder & "\" & ActiveWorkbook.name
          iFileSizeNew = FileLen(iFullName) ' это размер новой книги
          ' сравниваем размеры двух книг и оставляем аткивной ту, которая меньше.
      
          If iFileSize <= iFileSizeNew Then
       ' КНИГА МЕНЬШЕГО РАЗМЕРА ДОЛЖНА БЫТЬ АКТИВИРОВАНА!
     'именно здесь ставим метку, потому-что дальше будет активироваа целевая книга
    ' ставим метку, что инвойс был обработан:
      
           Range("B5") = 1
           Windows(ИМЯКНИГИ).Activate 'КНИГА МЕНЬШЕГО РАЗМЕРА ДОЛЖНА БЫТЬ АКТИВИРОВАНА!!
         
             
            
                 MsgBox "эта книга меньше,"
                 
           '1) объединяем:
              Объеденить
                Windows(ИМЯКНИГИ).Close True
                 
               Else
            Windows(ИМЯ_новой_КНИГИ).Activate ' 'КНИГА МЕНЬШЕГО РАЗМЕРА ДОЛЖНА БЫТЬ АКТИВИРОВАНА!!
           
           Range("B5") = 1
         
          MsgBox "эта книга больше"
          '1) объединяем:
             Объеденить
             Windows(ИМЯ_новой_КНИГИ).Close True
      End If
          
          ' действя с инвойсами:
Как циклом пройтись по файлам в папке в зависимости от их размера?
 
Юрий М, да, есть там идеи, завтра попробую, спасибо.
Как циклом пройтись по файлам в папке в зависимости от их размера?
 
Думаю проверять размер уже открытого  файла с новым, если новый больше, то старый закрываю, и оставляю активным больший файл. всем спасибо за помощь.
Код
Sub asdasd()
 '3. Создание объекта для работы с папками и файлами.
    Set myFSO = CreateObject(Class:="Scripting.FileSystemObject")
    
    '4. Создание ссылки на папку, в которой находятся инвойсы.
        ' Путь определяется по активному файлу.
    Set myFolder = myFSO.GetFolder(ActiveWorkbook.Path)
    Stop
iFullName = myFolder & "\" & ActiveWorkbook.Name

iFileSize = FileLen(iFullName)

MsgBox "Размер файла составляет : " & iFileSize & " байт", , ""
End Sub
Изменено: Домкрат - 18 май 2020 22:16:31
Как циклом пройтись по файлам в папке в зависимости от их размера?
 
так вообще возможно делать?
Проблема в том, что когда циклом проходим-обрабатываем файлы, макрос с маленького начинает и в него большой загружает,- получается долго ждать приходиться, а если будет наоборот, то экономим время.
Может как-то обработать предварительно файлы, чтобы сортирнулись по размеру сами?? или что?
Изменено: Домкрат - 18 май 2020 21:12:41
Распознование в тексте латиницы и кириллицы
 
Цитата
Kuzmich написал:
Код учитывает одну раскладку, повторите строку для другой раскладки
супер, спасибо, большое, очень красиво получилось и проще !
И ещё вопрос: а если больше одной буквы будет, например Т и Д? В одной строке не получится заменить? Хотя и так нормально.. просто добавлю строку и всё, если поставщики отчудят ..
Изменено: Домкрат - 13 май 2020 19:29:02
Распознование в тексте латиницы и кириллицы
 
Kuzmich,
или вот так будет нормально для двух расскладок:?
Код
Var= Replace(Var, "T", "") ' латиница
Var= Replace(Var, "T", "") ' кирилица
Страницы: 1 2 3 4 5 След.
Наверх