Еще раз огромное спасибо, МатросНаЗебре ! Действительно разбил на 16 строк )) Это для того, что бы удобнее распределять по таблице. Не запутаться. Так нагляднее, для меня. После того, как все заработает можно и вернуть в одну.
Большое спасибо, МатросНаЗебре! Все работает. Можно, что бы в текстовом формате сохранялось на листе РС столбце 2, при создание новой строки или ее замене? А то приходится постоянно заменять на Текст.
Добрый день! В продолжение темы. Приладил макрос (Лось Сохатый) к своим нуждам. Работает хорошо при условии, что в ячейку С1 вносится 10 знаков, а если вносить 12, которые будут совпадать со столбцом 2 листа РС (для изменения), происходит ошибка. Т.к на листе РС они сохранены в Текстовом формате. Если создавать новую строку все работает, но на листе РС их приходится переводить в Текст. Возможно для этих целей, у кого-то есть и другой макрос.
Здравствуйте! Есть код переноса данных из другой книги, Работает хорошо, но есть потребность брать данные из другой области листа если файл содержит; "ИП". В основном беру с Range("F3:H3") другой книги и переношу в Range("F3:H3") активной, а если имя другой книги содержит слово: "ИП" необходимо брать из Range("C5:E5") и переносить Range("F3:H3") активной. Вот сам код:
Код
Sub ИзДругойКниги1()
Dim WB As Workbook
Set WB = GetAnotherWorkbook
If Not WB Is Nothing Then
WB.Worksheets(1).Range("C11:G38").Copy ThisWorkbook.ActiveSheet.Range("C11")
WB.Worksheets(1).Range("D1").Copy
ThisWorkbook.ActiveSheet.Range("C2").PasteSpecial Paste:=xlPasteValues
WB.Close False
End If
End Sub
'Это я пытался сделать
'If WB.GetFileName Like "*ИП*.xlsx*" Then
'WB.Worksheets(1).Range("C5:E5").Copy ThisWorkbook.ActiveSheet.Range("F3:H3")
'Else
' WB.Worksheets(1).Range("F3:H3").Copy ThisWorkbook.ActiveSheet.Range("F3:H3")
' End If
Sanja Спасибо за ответ. Но если большая номенклатура на листе "Товары" не удобно, Потому, что приходится повторно ее искать в большом количестве строк.Хотелось исправлять сразу на листах ( Счет, КП, Акт)
Добрый день, форумчане! На трех листах ( Счет, КП, Акт) есть таблицы. Они заполняются с листа "Товары" путем клика на определенную позицию. В процессе работы, иногда, требуется внести изменения и тогда приходится исправлять на всех листах. Хотелось бы, что бы можно было корректировать на одном из листов, а исправлялась на всех. Пример прилагаю.
vimpel76 Думаю надо использовать: vbCr – возврат каретки; vbLf – перевод строки; vbCrLf – возврат каретки и перевод строки, аналог нажатия клавиши «Enter»; vbNewLine – новая строка. Вот наглядный пример:
Дмитрий(The_Prist) Щербаков- профессианал. У него часто учусь. По его статье сам отправляю показания за свет и воду. А если на коленке(как любитель) посмотрите, что у меня получилось:
vimpel76 А у меня получается. Хотя не спорю, что все правильно. Ошибочка моя: вместо With ActiveSheet("Лист 1") надо With ActiveSheet
Скрытый текст
Код
Sub Send_Mail()
Dim oOutlApp As Object, objMail As Object
Dim sTo As String, sSubject As String, sBody As String, sTblBody As String, sAttachment As String
Dim rDataR As Range
Dim IsOultOpen As Boolean
Application.ScreenUpdating = False
'Пробуем подключиться к Outlook
On Error Resume Next
Set oOutlApp = GetObject(, "Outlook.Application")
If Err = 0 Then
IsOultOpen = True
Else
Err.Clear
Set oOutlApp = CreateObject("Outlook.Application")
End If
oOutlApp.Session.Logon
Set objMail = oOutlApp.CreateItem(0) 'создаем новое сообщение
'если не получилось создать приложение или экземпляр сообщения - выходим
If Err.Number <> 0 Then Set oOutlApp = Nothing: Set objMail = Nothing: Exit Sub
With ActiveSheet
sTo = .Range("B2").Value
sSubject = .Range("B3").Value
sBody = .Range("B4").Value
sAttachment = .Range("").Value
'Переносы строк и шрифт
sBody = Replace(sBody, Chr(10), "<br />")
sBody = Replace(sBody, vbNewLine, "<br />")
sBody = "<span style=""font-size: 14px; font-family: Arial"">" & sBody & "</span>"
'Таблица
'важно добавлять таблицу после оформления переносов строк и шрифта
'в противном случае форматирование таблицы может "поплыть"
Set rDataR = .Range("") 'Selection - если надо отправить только выделенные диапазона
sTblBody = ConvertRngToHTM(rDataR)
'подменяем метку {TABLE} в тексте письма реальной таблицей(сформированной выше)
sBody = Replace(sBody, "{TABLE}", sTblBody)
End With
'создаем сообщение
With objMail
.To = sTo 'адрес получателя
' .CC = "" 'адрес для копии
' .BCC = "" 'адрес для скрытой копии
.Subject = sSubject 'тема сообщения
.BodyFormat = 2 'olFormatHTML - формат HTML
' .Body = RangeToTextTable(Selection) 'вставляем таблицу без форматирования
.HTMLBody = sBody
If sAttachment <> "" Then
.Attachments.Add sAttachment
End If
.display 'если необходимо просмотреть сообщение, а не отправлять без просмотра
'.Send 'если необходимо отправить сообщение без просмотра
End With
If IsOultOpen = False Then oOutlApp.Quit
Set oOutlApp = Nothing: Set objMail = Nothing
DoEvents
End Sub
Function ConvertRngToHTM(rng As Range)
Dim fso As Object, ts As Object
Dim sF As String, resHTM As String
Dim wbTmp As Workbook
sF = Environ("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'переносим указанный диапазон в новую книгу
rng.Copy
Set wbTmp = Workbooks.Add(1)
With wbTmp.Sheets(1)
'вставляем только ширину столбцов, значения и форматы
.Cells(1).PasteSpecial xlPasteColumnWidths
.Cells(1).PasteSpecial xlPasteValues
.Cells(1).PasteSpecial xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
'удаляем все объекты(фигуры, рисунки и пр.)
'------------------------------------------
'если рисунки и объекты нужны - удалить этот блок
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
'------------------------------------------
End With
'выставляем русскую кодировку (если кириллицы в тексте нет - можно убрать)
wbTmp.WebOptions.Encoding = msoEncodingCyrillic
'сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код)
With wbTmp.PublishObjects.Add( _
SourceType:=xlSourceRange, Filename:=sF, _
Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address(1, 1, Application.ReferenceStyle), _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'открываем созданный файл как текстовый и считываем содержимое
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sF).OpenAsTextStream(1, -2)
resHTM = ts.ReadAll
ts.Close
'выравниваем таблицу по левому краю(если надо оставить по центру - удалить эту строку)
ConvertRngToHTM = Replace(resHTM, "align=center x:publishsource=", "align=left x:publishsource=")
'закрываем временную книгу и удаляем
wbTmp.Close False
Kill sF
'очищаем объектные переменные
Set ts = Nothing: Set fso = Nothing
Set wbTmp = Nothing
End Function
Function RangeToTextTable(rng As Range)
Dim lr As Long, lc As Long, arr
Dim res As String, rh()
Dim lSpaces As Long, s As String
arr = rng.Value
If Not IsArray(arr) Then
ReDim arr(1 To 1, 1 To 1)
arr(1, 1) = rng.Value
End If
ReDim rh(1 To UBound(arr, 2))
For lr = 1 To UBound(arr, 1)
For lc = 1 To UBound(arr, 2)
If Len(arr(lr, lc)) > rh(lc) Then
rh(lc) = Len(arr(lr, lc))
End If
Next
Next
For lr = 1 To UBound(arr, 1)
For lc = 1 To UBound(arr, 2)
s = arr(lr, lc)
lSpaces = rh(lc) - Len(s)
If lSpaces > 0 Then
s = s & Space(lSpaces)
End If
If lc = 1 Then
res = res & s
Else
res = res & vbTab & s
End If
Next
res = res & vbNewLine
Next
RangeToTextTable = res
End Function
Добрый день, форумчане! Может и легкая задача, но ни как не получается. Что делает макрос, сейчас. 1. С Листа1 переносит данные на лист Список. 2. Если значения столбца "В" листа Список совпадает со значением ячейки "А4,то MsgBox пишет, что такой текст уже есть и выходит из процедуры.В столбце "В"листа Список всегда разные значения.Скажем так -разные артикулы. Они никогда не совпадают. Задача. При совпадении "А4" и "В" если есть изменения, то заменять их. Файл с макросом прилагаю.
Дмитрий(The_Prist) Щербаков, Спасибо большое. Вы правы, что пишете: "Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы..." Это мое не умения правильно сформулировать вопрос. Еще раз спасибо.
Дмитрий(The_Prist) Щербаков, Спасибо, что подсказываете. Но сейчас стало если есть картинка тогда дважды сообщает об этом. Как бы убрать второе сообщение?
Опишу свою проблему. Есть макрос который должен определять есть ли в ячейки (H6) картинка.Когда картинка есть, отрабатывает хорошо. Когда картинка сдвинута от ячейки тогда пишет, что ее нет. Это тоже правильно. Но если совсем удалить картинку с листа тогда ничего не пишет. Проблема в том, что при отсутствии или смещение картинки относительно ячейки (H6) необходимо писать, что картинки нет в ячейке.
Макрос и файл прилагаю. Макрос нашел в интернете и немного допилил под свою задачу.
Код
Sub Logo_Fill() ' Работает для ячейки
Dim pic As Picture
Sheets("Whatsapp").Unprotect
For Each pic In Sheets("Whatsapp").Pictures
If Not Application.Intersect(pic.TopLeftCell, Range("H6")) Is Nothing Then
MsgBox "Рисунок есть в H6"
Else
MsgBox "Нет рисунка в H6"
'Exit Sub
End If
Next pic
End Sub
Добрый день, уважаемые форумчане! Прошу помочь. Есть таблица в которую каждый месяц заношу соответствующие значения. И, что бы не было пропусков (табл. большая) придумал сделать типа индикатор. Если все ячейки этого месяца заполнены контрольная ячейка сменит цвет. Такой индикатор сделал на УФ. Работает на одном месяце хорошо. Но с наступлением следующего месяца приходится переписывать УФ. Хотелось сделать, чтобы с наступлением следующего месяца индикатор работал и в нем. В прилагаемом файле все описал. Можно решение, как формулой так и VBA. Спасибо.
Добрый день! Прошу помощи. Есть таблица в которой происходит нумерация (макросом) по принципу с исключением номера в строке с символом "_". Желательно сделать так, что бы нумерация происходила с начала, с 1.. после каждой стоки с символом. 1 2 3 _ 1 2 Файл пример прилагаю. Там два листа, как сейчас происходит на листе КП, и как желательно (с макросом).