Привет!!! В одной книге макрос выполняется всегда, а в другой он же выполняется всегда с ошибкой в конце!! Ошибка начинается после того как макрос обработает примерно 20 или 30 строк! Ошибка заключается в том что макрос с середины начинает копировать значения,, которые состоят менее чем из 15 символов..... Почему?? [vba]
Код
bla bla bla If Len(Trim(Cells(Y, X))) > 15 Then Cells(Z, 17) = Cells(Y, X) Z = Z + 1
End If Next bla bla bla
[/vba] [moder]Покажите эту неправильную книгу и весь код макроса
Привет!!! В одной книге макрос выполняется всегда, а в другой он же выполняется всегда с ошибкой в конце!! Ошибка начинается после того как макрос обработает примерно 20 или 30 строк! Ошибка заключается в том что макрос с середины начинает копировать значения,, которые состоят менее чем из 15 символов..... Почему?? [vba]
Код
bla bla bla If Len(Trim(Cells(Y, X))) > 15 Then Cells(Z, 17) = Cells(Y, X) Z = Z + 1
End If Next bla bla bla
[/vba] [moder]Покажите эту неправильную книгу и весь код макросаTina90
Сообщение отредактировал Tina90 - Среда, 06.04.2016, 15:47
вероятно потому, что Trim убирает пробелы слева и справа, в середине оставляет. Если мое предположение верно, то нужно использовать WorksheetFunction.Trim
вероятно потому, что Trim убирает пробелы слева и справа, в середине оставляет. Если мое предположение верно, то нужно использовать WorksheetFunction.TrimMichael_S
to Moderator ► к сожалению книгу с ошибками показать не могу (государственная тайна, или военная уже не помню!!). весь код макроса вот ► [vba]
Код
Sub TrimmText()
Dim X As Integer, Y As Integer, Z As Integer On Error Resume Next Z = 1 For Y = 1 To 96 For X = 10 To 10 If Len(Trim(Cells(Y, X))) > 39 Then Cells(Z, 1) = Cells(Y, X)
вероятно потому, что Trim убирает пробелы слева и справа, в середине оставляет.
Тогда мне странно вдвойне! Так как же тогда , если в двух разных книгах один и тот же макрос правильный\неправильный?? Через воркшит нельзя, макрос запускается кнопкой а не по факту события!
to Moderator ► к сожалению книгу с ошибками показать не могу (государственная тайна, или военная уже не помню!!). весь код макроса вот ► [vba]
Код
Sub TrimmText()
Dim X As Integer, Y As Integer, Z As Integer On Error Resume Next Z = 1 For Y = 1 To 96 For X = 10 To 10 If Len(Trim(Cells(Y, X))) > 39 Then Cells(Z, 1) = Cells(Y, X)
вероятно потому, что Trim убирает пробелы слева и справа, в середине оставляет.
Тогда мне странно вдвойне! Так как же тогда , если в двух разных книгах один и тот же макрос правильный\неправильный?? Через воркшит нельзя, макрос запускается кнопкой а не по факту события!Tina90
в двух разных книгах один и тот же макрос правильный\неправильный?
Прекрасно, и какой отсюда вывод? Ну наверное такой, что ошибка возникает не из-за макроса, а из-за данных файла, как Вы думаете? Ну и следствие - весь файл не нужен, а вот некоторые значения оттуда (в особенности те, где ошибка получается) нужны. У Вас ничего, кроме Трима, не может такую реакцию "макрос с середины начинает копировать значения,, которые состоят менее чем из 15 символов" давать. Поэтому, как я и писал еще в первом сообщении, нужен сам текст.
в двух разных книгах один и тот же макрос правильный\неправильный?
Прекрасно, и какой отсюда вывод? Ну наверное такой, что ошибка возникает не из-за макроса, а из-за данных файла, как Вы думаете? Ну и следствие - весь файл не нужен, а вот некоторые значения оттуда (в особенности те, где ошибка получается) нужны. У Вас ничего, кроме Трима, не может такую реакцию "макрос с середины начинает копировать значения,, которые состоят менее чем из 15 символов" давать. Поэтому, как я и писал еще в первом сообщении, нужен сам текст._Boroda_
Может попробовать явно указать к чему относятся все эти Cells(...). В смысле родительский объект. [vba]
Код
Sub TrimmText() Dim X As Integer, Y As Integer, Z As Integer On Error Resume Next with activesheet Z = 1 For Y = 1 To 96 If Len(Trim(.Cells(Y, 10))) > 39 Then .Cells(Z, 1) = .Cells(Y, 10) Z = Z + 1 End If Next end with End Sub
[/vba]
Может попробовать явно указать к чему относятся все эти Cells(...). В смысле родительский объект. [vba]
Код
Sub TrimmText() Dim X As Integer, Y As Integer, Z As Integer On Error Resume Next with activesheet Z = 1 For Y = 1 To 96 If Len(Trim(.Cells(Y, 10))) > 39 Then .Cells(Z, 1) = .Cells(Y, 10) Z = Z + 1 End If Next end with End Sub
Всем спасибо!! У меня в книге была ошибка, результат события листа оставлял данные в том массиве, в который проводилось копирование! Теперь тот массив перед копированием очищаю и все в порядке!!! а ведь уже собиралась гневное письмо писать в майкрософт
Всем спасибо!! У меня в книге была ошибка, результат события листа оставлял данные в том массиве, в который проводилось копирование! Теперь тот массив перед копированием очищаю и все в порядке!!! а ведь уже собиралась гневное письмо писать в майкрософт Tina90