Добрый день. Подскажите, пожалуйста, как в диапазоне ячеек убрать выделение жирным шрифтом? Ну т.е. в диапазоне ячеек некоторые рандомно отформатированы, так, что шрифт жирный и перед началом работы требуется этот жирный шрифт убрать.
Добрый день. Подскажите пожалуйста как получить цвет ярлычка активной страницы? У меня такой код всегда возвращает цвет 65535 независимо от цвета ярлычка. (Excel 2016).
Код
Sub sasdfasd()
Dim b As Integer
For b = 1 To Sheets.Count
If Sheets(b).Tab.ColorIndex <> 65535 Then
MsgBox ActiveSheet.Tab.Color
End If
Next b
End Sub
Добрый день. После установки Win10 много чего в макросах перестало работать .Не знаю за что хвататься. Поэтому прошу подсказки уважаемых форумчан, почему вот такая конструкция перестала создавать pdf ? Ничего не происходит никакой ошибки не выдает, просто не появляется pdf:
Код
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="C:\Users\kols0875\Desktop\показания на " & Date & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Также перестал вызываться Outlook вот таким кодом:
Код
Dim objOutlookApp As Object, objMail As Object
Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
Application.ScreenUpdating = False
On Error Resume Next
Shell ("OUTLOOK")
Application.Wait (Now + TimeValue("0:00:10"))
'пробуем подключиться к Outlook, если он уже открыт
Set objOutlookApp = GetObject(, "Outlook.Application")
Err.Clear 'Outlook закрыт, очищаем ошибку
If objOutlookApp Is Nothing Then
Set objOutlookApp = CreateObject("Outlook.Application")
End If
objOutlookApp.Session.Logon
Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение
нужно сказать, что установлена win 10, но офис установлен 2007, соответственно версия vba тоже та которая шла с 2007 офисом. Но Outlook установлен 2016. Заранее спасибо
Добрый день. По ссылке https://dwg.ru/b/name02/454 наткнулся на пример с работой надстройки "Поиск решения". Попробовал повторить, но нарвался на ошибку "При поиске решения обнаружено ошибочное значение в целевой ячейке или ячейке ограничения". Думаю, что это потому, что в целевой ячейке возникает деление на ноль. Прошу подсказки уважаемых форумчан, каr модифицировать целевую ячейку, чтобы "Поиск решения" корректно работал (если конечно в этом причина). У меня еще Excel 2007 - может быть в этом тоже проблема, потому что у меня в параметрах надстройки "Поиск решения" нет метода "Эволюционный поиск решения", как у автора в примере. Спасибо.
Sub QQQ
Dim wb As Workbook
Set wb = ActiveWorkbook
Set PZ = Sheets("Лист2")
Set L1 = Sheets("Лист1")
For a = 4 To 17
PZ.Cells(6, 1) = L1.Cells(a, 1)
PZ.Copy '
ActiveWorkbook.SaveAs wb.Path & "\" & PZ.Cells(6, 1).Value & ".xlsx"
Next a
End Sub
Меняет значение в ячейке PZ.Cells(6, 1) на значение из таблицы на другом листе и копирует лист в отдельный файл с названием из этой же ячейки. Но если в этой ячейке есть текст в котором символ "/", то макрос останавливается с ошибкой (см.приложеный скрин). Ну т.е. воспринимает его как часть пути чтоли... Прошу подсказки, как сделать так, чтобы макрос при присваивании имени вновь создаваемому файлу убирал из этого имени знак "/" ? PS И что дописать чтобы файлы которые создаются копированием листов, не оставались открытыми, а закрывались. Спасибо PS на приложенном скрине ошибка возникает, когда он пытается обработать значение из ячейки равное "1475/1-17"
Добрый день, коллеги. Вот есть в ячейках Cells(a, 3) Cells(a, 4) с форматом "Время" некое время, например 21.01.1900 16:00:00 Подскажите пожалуйста, как на vba сравнить его? Ну т.е. понять, например, больше оно 17 часов или меньше. Вот так вот пишу:
Код
For a = 2 To 32
If Cells(a, 3) >= 8 And Cells(a, 4) <= 16 And (Weekday(Cells(a, 1)) = 1 Or Weekday(Cells(a, 1)) = 7) Then q = 1 'если выходной, и интервал внутри 8-16
If (Cells(a, 3) >= 8 And Cells(a, 3) <= 16) And Cells(a, 4) >= 16 And (Weekday(Cells(a, 1)) = 1 Or Weekday(Cells(a, 1)) = 7) Then q1 = 1 'если выходной, и нижний конец внутри интервала 8-16, а верхний за пределами
Next a
Доброго дня. Вот есть две ячейки с датами. В одной (С19) значение 21.01.1900 8:00:00 в другой (D19) 21.01.1900 9:00:00. Формат ячеек "Дата". Хочу проверить входят ли значения в диапазон времени от 8.00 до 17.00. Пишу так:
получается нолик, т.е. условия не выполняются. Подозреваю что как то не так записал время. Прошу подсказки уважаемых форумчан, о том, как же проверить входит ли время из ячеек в диапазон? А может я неправильно условия записал? Спасибо
Добрый день. Вот в приложенном файле есть ячейка А3 с числом "48", отформатирована как число с двумя знаками после запятой. (48,00). На нее ссылается ячейка С3 с формулой:
Код
=A3 & " рублей"
Но текст в ячейке С3 отображается как "48 рублей". Прошу подсказки уважаемых коллег, как сделать чтобы в ячейке С3 текст отображался как " 48,00 рублей" ? Спасибо
копирует вкладку, но ширина столбцов в новой вкладке становиться по умолчанию, а хотелось бы чтобы ширина столбцов была как в изначальной вкладке. Спасибо
Коллеги, добрый день Прошу прощения за очередной идиотский вопрос: Вот есть в приложенном файле ячейка B5, формат ячейки: "время". А как сделать чтобы в ячейке C5 отображалось время из ячейки B5, уменьшенное на 2 часа. Т.е. как вычесть 2 часа из значения времени в ячейке B5? В ячейке B5 тоже формат ячейки: "время". Спасибо
Коллеги, добрый день. Очередной идиотский вопрос: А подскажите пожалуйста формулу для отображения даты последнего дня в текущем году? Ну т.е.для 2022 года это будет 31.12.2022, для 2023 года 31.12.2023 и т.д. Спасибо
Добрый день. Подскажите пожалуйста, как собрать примечания со всех листов книги на отдельный лист в формате: имяЛиста+номерСтрокиПримечания? Делал так , но получается какаято ерунда:
Код
Sub Спис_примечаний()
Dim k As Integer, b As Integer, cell As Object, v As String, PR As Object
'Sheets.Add.Name = "Примечание"
Set PR = Sheets("Примечание")
k = 1
For b = 2 To Sheets.Count ' цикл по всем листам книги
For Each cell In Range("A1:D70") ' цикл по диапазону на каждом листе
If cell.Comment Is Nothing Then
Else
v = v & cell.Row & ", "
End If
Next cell
PR.Cells(k, 1) = Sheets(b).Name & " " & v
k = k + 1
Next b
End Sub
Почемуто делает список примечаний только с того листа, который является активным.Прошу подсказки уважаемых форумчан, как это сделать технично и быстро.Спасибо
Добрый день и с наступающим праздником. Подскажите, пожалуйста, добрые люди, как вызвать окно вставляния гиперссылки через vba? Макрорекордером пишется так:
но это работает так, что гиперссылка сразу образуется в ячейке. А как сделать так, чтобы макрос открыл окошечко настройки гиперссылки и остановился? Спасибо
Добрый день. Подскажите пожалуйста почему такой код не хочет работать:
Код
Sub protocol()
Dim otv3 As String, Filename As String
otv3 = InputBox("ввести название контрагента", "ввод контрагента", "ООО ")
Cells(9, 2) = "Потребитель: " & otv3
On Error Resume Next
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = "протоколы для контрагентов"
' создаём папку для файла, если её ещё нет
MkDir ActiveWorkbook.Path & "\" & REPORTS_FOLDER
' выбираем стартовую папку
ChDrive Left(ActiveWorkbook.Path, 1): ChDir ActiveWorkbook.Path & "\" & REPORTS_FOLDER
' вывод диалогового окна для запроса имени сохраняемого файла
Filename = "протокол_для_" & Cells(9, 2) & ".xlsm"
'Filename = "протокол.xlsx"
' копируем активный лист (при этом создаётся новая книга)
Err.Clear: Sheets("PR").Copy: DoEvents
If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа
ActiveSheet.Buttons.Delete
ActiveWorkbook.SaveAs Filename, FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWorkbook.Close False
End Sub
вернее он работает, ошибок никаких не выдает, но сохранения не происходит. Не хочет сохранять в файл с поддержкой макросов.
На всякий случай прилагаю файл, в котором этот код и привязан к кнопке (лист PR)/ Может потомучто код не в личной книге макросов, а в исходном коде листа? Спасибо.
Добрый день Есть файл с макросами для удаленного снятия показаний с теплосчетчика. Поставлялся вместе с теплосчетчиком много лет назад. Авторов соответственно найти нереально. Сейчас вдруг начал барахлить и я не могу понять почему. Кода там довольно много, но вот выложу кусок в котором генерируется ошибка Type mismatch.
Код
' Процедуры ниже заполняют протокол данными со счётчика
'
Public Function ОбработатьЧасовой(Wrs As Excel.Worksheet, ByVal До As Date, ByVal Всего As Integer) As Integer
Dim i As Integer, j As Integer, k As Integer
Dim Регистр As Integer, iDay As Integer
Dim iStr As Integer, iPos As Integer
Dim День As Date
Dim a
With Wrs
If kTab = 0 Then Exit Function
День = До - Всего + 1
iDay = Sect(Sect_Tbl, 1) + TblBeg
For k = 1 To Всего
For i = 1 To kTab ' Цикл по регистрам
If ПрерватьЧтение Then
ОбработатьЧасовой = 1
Exit Function
End If
Регистр = sTab(2, i)
iPos = sTab(1, i)
iStr = iDay
' *************************************
a = MC601_СчитатьЧасовой(Регистр, День)
' *************************************
ИндикаторЕщё (1)
For j = 24 To 1 Step -1 ' Записываем в блок
.Cells(iStr, iPos) = a(j)
iStr = iStr + 1
Next j
Next i
iDay = iDay + TblLen
День = День + 1
Next k
End With
End Function
Конечно понимаю, что это очень неблагодарный труд, но может быть кто нибудь из уважаемых форумчан сразу увидит в чем дело. Ошибка на скрине ниже. Возникает сразу, при j=24. Переменную a объявлял и integer и Long, и скобочки ставил после a(). Не получается! Раньше работал, точно помню. Просто к этой процедуре нечасто обращаюсь, и не могу сказать что же поменялось. Вообще код так выглядит как будьто потерлось объявление переменной а. Незнаю...
должна подсчитывать количество дат из диапазона A1:A21, относящихся к первому кварталу. Но по факту выдает 0. Прошу подсказки уважаемых форумчан, о том, как поправить формулу, чтобы она корректно заработала. Спасибо
Доброго дня! Вот есть таблица: в одной ячейке дата, формат ячейки ДД.ММ.ГГГГ. А в другой ячейке я хочу написать: до: и вставить дату из этой ячейки. Например в первой ячейке (D1): 23.09.2016 А в другой ячейке я хочу: до 23.09.2016 Формулою = "до: " & D1 не получается- вместо даты вставляется число: до: 42636
Был бы благодарен уважаемым форумчанам за подсказку, как сделать чтобы было не число а дата? Спасибо
Sub выравнивание_строк()
Set TA = Sheets("Лист1") ' название листа который служит эталоном
For b = 4 To Sheets.Count ' цикл по всем листам книги, исключая лист - эталон
For c = 1 To 48
Sheets(b).Select
Cells(c, 1).RowHeight = TA.Cells(c, 1).RowHeight
Next c
Next b
End Sub
Цикл (b) пробегает по всем листам книги, вложенный цикл (с) пробегает по строкам выбранного листа, выставляя высоту строк равной высоте строк на листе эталоне. Подскажите как сделать это без выбирания каждый раз листа
Код
Sheets(b).Select
дело в том, что если не выбирать лист, то я не знаю как перебрать ряды. Т.е. если лист выбран, то проблем нет! Пишу так:
Код
Cells(c, 1).RowHeight = TA.Cells(c, 1).RowHeight
А как добиться того же результата, но не выбирать листы? Т.е. как обратиться к ячейке, если ее позиция на каждом листе одинаковая, но листы имеют разное название?
Коллеги, добрый день Прошу прощения за идиотский вопрос. Вот есть в окне редактора VBA окно отладчика в котором во время выполнения видны значения переменных во время выполнения . Подскажите пожалуйста, как добавить в этот отладчик какие нибудь конструкции из кода. Поясню: Например какой-то кусок произвольного кода:
Код
If DateDiff("yyyy", Now, Cells(a, k)) < 1 Then Cells(a, 13) = Cells(a, k)
Next c
If DatePart("yyyy", Cells(a, 13)) <= DatePart("yyyy", Now) Then Cells(a, 13) = "ñïèñàòü"
Next a
И я хочу видеть в отладчике какое значение принимает в процессе выполнения программы выражение:
Код
DateDiff("yyyy", Now, Cells(a, k))
Сейчас делаю так что вывожу это значение в Msgbox, что не очень удобно.
Добрый день, уважаемые форумчане. Есть следующий код:
Код
Function PrevMonthName$()
PrevMonthName = Split("декабрь январь февраль март апрель май июнь июль август сентябрь октябрь ноябрь декабрь")(Month(Now) - 1)
End Function
Sub ген()
Dim mes As String, objClpb As New DataObject
otv2 = InputBox("ввести месяц в формате 1, 2 и т.д. (13-по умолчанию прошлый) иначе вводить номер требуемого месяца", "ввод месяца", "13")
Select Case otv2
Case "01"
mes = "январь"
Case "2"
mes = "февраль"
Case "3"
mes = "март"
Case "4"
mes = "апрель"
Case "5"
mes = "май"
Case "6"
mes = "июнь"
Case "7"
mes = "июль"
Case "8"
mes = "август"
Case "9"
mes = "сентябрь"
Case "10"
mes = "октябрь"
Case "11"
mes = "ноябрь"
Case "12"
mes = "декабрь"
Case "13"
mes = PrevMonthName
End Select
Range("A1:A14").Select
Selection.ClearContents
Cells(1, 1) = "отопление_" & mes
sStr = Cells(1, 1)
objClpb.SetText sStr
objClpb.PutInClipboard
End Sub
Он работает без ошибок, если его сохранять в глобальной книге макросов (PERSONAL.XLSB), а если я его сохраняю в файле ( исходный текст), то этот код при запуске генерирует следующую ошибку: user-defined type not defined и в компиляторе подсвечивает следующий кусок кода:
Код
, objClpb As New DataObject
Прошу подсказки уважаемых форумчан, как пофиксить проблему? Ну чтобы код работал из файла при переносе между машинами, и не был привязан к PERSONAL.XLSB.
Добрый день. Вот есть таблица из двух столбцов с исходными данными для интерполирования. В первом значения x, во втором значения y.(Столбцы A и B в приложенном файле ). В выделенных желтым ячейках значения x, в выделеных зеленым значения y, которые находятся интерполированием с помощью функции:
Код
=ПРЕДСКАЗ(E3;B6:B7;A6:A7)
В настоящее время делаю так: смотрю в желтую ячейку, потом глазами выбираю диапазон из двух значений X в исходной таблице в которой находится значение из желтой ячейки, а потом вручную исправляю формулу в зеленой ячейке (передвигаю диапазоны).
Может быть уважаемые форумчане подскажут, как усовершенствовать формулу для минимизации ручных операций в данном случае.
Ну т.е. задан столбик значений в желтых ячейках - он каждый раз разный. Таблица с исходными данными неизменна. Что написать в формуле, чтобы каждый раз не передвигать диапазоны?
Добрый день! Очередной идиотский вопрос: Вот есть код:
Код
Dim f As Integer
For f = 1 To 260
If Cells(f, 1) <> "-" Then Cells(f, 1).Interior.Color = vbYellow: Cells(f, 2).Interior.Color = vbYellow: Cells(f, 2).Interior.Color = vbYellow: Cells(f, 3).Interior.Color = vbYellow: Cells(f, 4).Interior.Color = vbYellow: Cells(f, 5).Interior.Color = vbYellow: Cells(f, 6).Interior.Color = vbYellow: Cells(f, 7).Interior.Color = vbYellow: Cells(f, 8).Interior.Color = vbYellow: Cells(f, 9).Interior.Color = vbYellow:
Next f
Заливает по условию цветом ячейки которые идут друг за другом в ряду (диапазон ячеек). Подскажите как записать проще? Ну чтобы не перечислять ячейки одну за другой, а сразу указать диапазон ячеек которые нужно залить. Не знаю как привязать диапазон к циклу. Спасибо.