Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
Форматирование диапазона ячеек
 
Добрый день.
Подскажите, пожалуйста, как в диапазоне ячеек убрать выделение жирным шрифтом? Ну т.е. в диапазоне ячеек некоторые рандомно отформатированы, так, что шрифт  жирный и перед началом работы требуется этот жирный шрифт убрать.

Делаю так:
Код
ThisWorkbook.Sheets("гр_тех_обслуж_срс").Range("A1:A3000").Style = "Normal"
Выдает ошибку: Subscript out of range.
Спасибо.
Изменено: john22255 - 07.02.2025 08:20:53
Копирование диапазона с одного листа на другой
 
Добрый день.
Подскажите пожалуйста, почему такая конструкция выдает ошибку:
Код
Sub Макрос1

Range(Sheets("декабрь").Cells(10, 4), Sheets("декабрь").Cells(17, 4)).Copy Range(Sheets("январь").Cells(10, 5))
 
End Sub

Пытаюсь скопировать диапазон с одного листа на другой в приложенном файле, но получаю ошибку "Method 'Range' of object '_Global' faled."
Спасибо
Изменено: john22255 - 22.01.2025 11:02:39
узнать код цвета ярлычка страницы
 
Добрый день.
Подскажите пожалуйста как получить цвет ярлычка активной страницы?
У меня такой код всегда возвращает  цвет 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
файл на котором тестировал прилагаю
Спасибо
настройка макросов vba после переустановки системы
 
Добрый день.
После установки 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.
Заранее спасибо
некорректная работа надстройки Поиск решения в Excel 2007
 
Добрый день.
По ссылке https://dwg.ru/b/name02/454 наткнулся на пример с работой надстройки "Поиск решения".
Попробовал повторить, но нарвался на ошибку "При поиске решения обнаружено ошибочное значение в целевой ячейке или ячейке ограничения".
Думаю, что это  потому, что в целевой ячейке возникает деление на ноль.
Прошу подсказки уважаемых форумчан, каr модифицировать целевую ячейку, чтобы "Поиск решения" корректно работал (если конечно в этом причина).
У меня еще Excel 2007 - может быть в этом тоже проблема, потому что у меня в параметрах надстройки "Поиск решения" нет метода "Эволюционный поиск решения", как у автора в примере.
Спасибо.
Изменено: john22255 - 11.01.2024 16:06:12
Экранирование (игнорирование?) знака "/"
 
Добрый вечер, уважаемые форумчане.
вот есть код:
Код
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"
Изменено: john22255 - 28.11.2023 16:33:08
сравнить значение времени на vba
 
Добрый день, коллеги.
Вот  есть в ячейках 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
И чего то как-то не работает.
Спасибо
Изменено: john22255 - 01.09.2023 15:56:45
разность дат в часах на vba
 
Коллеги, добрый день.
Подскажите пожалуйста, почему такой код :
Код
For a = 2 To 32

Cells(a, 8) = DateDiff("h", Cells(a, 3), Cells(a, 4))

Next a
возвращает в восьмой столбец нули. Т.е. не считает разницу между датами в часах?
Спасибо.
проверка вхождения значения времени в интервал
 
Доброго дня.
Вот есть две ячейки с датами. В одной  (С19) значение    21.01.1900  8:00:00  в другой (D19)  21.01.1900  9:00:00. Формат ячеек "Дата".
Хочу проверить входят ли значения в диапазон  времени от 8.00 до 17.00. Пишу так:
Код
=ЕСЛИ(И(C19>=8; D19<=17);1;0)

и так:
Код
=ЕСЛИ(И(ВРЕМЯ(C19;0;0)>=ВРЕМЯ(8;0;0); ВРЕМЯ(D19;0;0)<=ВРЕМЯ(17;0;0));1;0)
получается нолик, т.е. условия не выполняются. Подозреваю что как то не так записал время. Прошу подсказки уважаемых форумчан, о том, как же проверить входит ли время из ячеек в диапазон?
А может я неправильно условия записал?
Спасибо
Отображение ссылки на ячейку с таким же форматированием как в исходной ячейке
 
Добрый день.
Вот в приложенном файле есть ячейка  А3 с числом "48", отформатирована как число с двумя знаками после запятой. (48,00).
На нее ссылается ячейка С3 с формулой:
Код
=A3 & " рублей"
Но текст в ячейке С3 отображается как "48 рублей".
Прошу подсказки уважаемых коллег, как сделать чтобы в ячейке С3 текст отображался как " 48,00 рублей" ?
Спасибо
Изменено: john22255 - 19.07.2023 12:50:20
Проверка значения в ячейке - число это или не число
 
Добрый день.
Прошу прощения за очередной дурацкий вопрос.
Подскажите пожалуйста как в vba записать проверку условия на то число ли в ячейке или нет?

If [в ячейке число] Then.....
Спасибо.
копирование вкладок с помощью VBA
 
Добрый день.

Уважаемые форумчане, подскажите как копировать вкладки  с сохранением ширины столбцов?
Вот такой код:
Код
Worksheets("Лист1").Copy After:=Worksheets("Лист1")
копирует вкладку, но ширина столбцов в новой вкладке  становиться по умолчанию, а хотелось бы чтобы ширина столбцов была как в изначальной вкладке.
Спасибо
Изменено: john22255 - 18.01.2023 10:58:15
Вычитание времени
 
Коллеги, добрый день
Прошу прощения за очередной идиотский вопрос:
Вот есть в приложенном файле ячейка B5, формат ячейки: "время".
А как сделать чтобы в ячейке C5 отображалось время из ячейки B5, уменьшенное на 2 часа. Т.е. как вычесть 2 часа из значения времени в ячейке B5?
В ячейке B5 тоже формат ячейки: "время".
Спасибо
Изменено: john22255 - 22.12.2022 11:06:22
Вставка формулы в ячейку средствами VBA
 
Коллеги, доброго дня.
Подскажите по синтаксису пожалуйста, как правильно записать присваивание формулы ячейке?
Вот есть формула:

Код
=ЕСЛИ(B49=""; "";ЕСЛИ(B49="нет";"";"Петров"))
А как записать присваивание ячейке? У меня все время ошибку выдает, подозреваю что изза кавычек. П
Код
RB.Cells(48 + si, 21).FormulaLocal="=ЕСЛИ(B49=""; "";ЕСЛИ(B49="нет";"";"Петров"))"
Спасибо.
перенос строки текста в ячейке
 
Коллеги, добрый день
Подскажите пожалуйста почему такой код в ячейке:
Код
="следующих требований"  &  Chr(10)  &  "1. должны исходить "
не переносит строку,  а генерирует ошибку  #ИМЯ?

Спасибо.
Формула с датой последнего дня в текущем году
 
Коллеги, добрый день.
Очередной идиотский вопрос:
А подскажите пожалуйста формулу для отображения даты последнего дня в текущем году?
Ну т.е.для  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


Почемуто делает список примечаний только с того листа, который является активным.Прошу подсказки уважаемых форумчан, как это сделать технично и быстро.Спасибо
Изменено: john22255 - 02.02.2022 10:53:53
Вызов окна настройки гиперссылки через макрос vba
 
Добрый день и с наступающим праздником.
Подскажите, пожалуйста, добрые люди, как вызвать окно вставляния гиперссылки через vba?
Макрорекордером пишется так:
Код
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        "адрес гиперссылки", TextToDisplay:="текст гиперссылки"
 
но это работает так, что гиперссылка сразу образуется в ячейке.
А как сделать так, чтобы макрос открыл окошечко настройки гиперссылки и остановился?
Спасибо
сохранение файла с поддержкой макросов с помощью 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)/
Может потомучто код не в личной книге макросов, а в исходном коде листа?
Спасибо.
Отладка кода VBA программы для дистанционного снятия показаний тепловычислителей Multical
 
Добрый день
Есть файл с макросами для удаленного снятия показаний с теплосчетчика. Поставлялся вместе с теплосчетчиком много лет назад. Авторов соответственно найти нереально. Сейчас вдруг начал барахлить и я не могу понять почему.
Кода там довольно много, но вот выложу кусок в котором генерируется ошибка 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(). Не получается!
Раньше работал, точно помню. Просто к этой процедуре нечасто обращаюсь, и не могу сказать что же поменялось. Вообще код так выглядит как будьто потерлось объявление переменной а. Незнаю...

PS ссылка на сам файл ( больше 100 кб):
http://d.zaix.ru/rrGV.xls
Группировка и разгруппировка листов в файле с помощью VBA
 
Добрый день,
Вот такая строка:
Код
Sheets(Array("Лист1", "Лист2")).Select
группирует листы в книге

Может быть уважаемые форумчане подскажут, как программно можно их разгруппировать?
Спасибо
Почему не считаются даты первого квартала?
 
Доброго дня!
В приложенном файле формула:
Код
=СЧЁТЕСЛИМН(A1:A21; "<01.04.2021")
должна подсчитывать количество дат из диапазона  A1:A21, относящихся к первому кварталу. Но по факту выдает 0.
Прошу подсказки уважаемых форумчан, о том, как поправить формулу, чтобы она корректно заработала.
Спасибо
Как отобразить дату в тексте?
 
Доброго дня!
Вот есть таблица: в одной ячейке дата, формат ячейки ДД.ММ.ГГГГ. А в другой ячейке я хочу написать:
до: и вставить дату из этой ячейки.
Например в первой ячейке (D1):
23.09.2016
А в другой ячейке я хочу:
до 23.09.2016
Формулою = "до: " & D1  не получается- вместо даты вставляется число:
до: 42636

Был бы благодарен уважаемым форумчанам за подсказку, как сделать чтобы было не число а дата?
Спасибо
Обращение в цикле к ячейке листа без выбора (Select) листа
 
Добрый день
Вот есть простецкий код:
Код
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, что не очень удобно.

Как сделать это более технично?
Спасибо
Изменено: john22255 - 19.01.2021 12:52:14
Запись формул в столбец ячеек при помощи макроса, заполнение формулами через макрос
 
Уважаемые форумчане!
подскажите пожалуйста, как поправить следующий макрос чтобы он заполнял формулами столбец ячеек?

так не работает:

Код
For a = 15 To 300
Cells(a, 1).Formula = "=ЕСЛИ(ЕПУСТО(RC[1]);"";СЧЕТЗ(RC[1]:R15C2))"
Next a
и так не работает:
Код
For a = 15 To 300
Cells(a, 1) = "=ЕСЛИ(ЕПУСТО(RC[1]);"";СЧЕТЗ(RC[1]:R15C2))"
Next a
Пишет:
Run-Time error 1004
Application -defined or object-defined errror

Подозреваю, что это как-то с кириллицей связано....
EXCEL 2007

Буду благодарен за подсказку.
Ошибка при работе с буфером обмена " objClpb As New DataObject " из книги макросов работает, а из локального файла нет
 
Добрый день, уважаемые форумчане.
Есть следующий код:
Код
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 в исходной таблице в которой находится значение из желтой ячейки, а потом вручную исправляю формулу в зеленой ячейке (передвигаю диапазоны).

Может быть уважаемые форумчане подскажут, как усовершенствовать формулу для минимизации ручных операций в данном случае.

Ну т.е. задан столбик значений в желтых ячейках - он каждый раз разный. Таблица с исходными данными неизменна. Что написать в формуле, чтобы каждый раз не передвигать диапазоны?

Спасибо.
Ошибка при очистке диапазона
 
Доброго дня!
Подскажите пожалуйста, почему не работает такая конструкция:
Код
Sheets("январь").Range(Sheets("январь").Cells(10, 4), Sheets("январь").Cells(16, 4)).Select
   Selection.ClearContents
Выскакивает такая вот ошибочка (см. приложеную картинку)
Лист "январь" существует.
Спасибо
Изменено: john22255 - 24.12.2019 14:35:21
Заливка диапзона цветом
 
Добрый день!
Очередной идиотский вопрос:
Вот есть код:
Код
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
Заливает по условию цветом ячейки которые идут друг за другом в ряду (диапазон ячеек).
Подскажите как записать проще? Ну чтобы не перечислять ячейки одну за другой, а сразу указать диапазон ячеек которые нужно залить. Не знаю как привязать диапазон к циклу.
Спасибо.
Изменено: john22255 - 23.12.2019 11:37:36
Страницы: 1 2 3 След.
Наверх