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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 15 След.
Название объекта
 
Например:

Модуль
Код
Option Explicit

Sub menu()
    Dim komnaty As UserForm1
    
    Set komnaty = New UserForm1
        Load komnaty
        komnaty.Show
    Set komnaty = Nothing
End Sub

Форма
Код
Option Explicit

Private Sub UserForm_Initialize()
    Dim a, c As Control
    
    a = Array("Kirdyk", "Zakroy") 'isklyucheniya
    
    For Each c In Me.Controls
        If TypeOf c Is MSForms.CommandButton Then
            If IsError(Application.Match(c.Name, a, 0)) Then c.Tag = c.Name
        End If
    Next
End Sub

Private Sub nazva(nzv As String)
    Me.Nazvanye.Value = nzv
    Worksheets("Razmery").Range("A1").Value = nzv
    'Unload Me
End Sub

Private Sub Zal_Click()
    nazva Me.Zal.Tag
End Sub

Private Sub Kukhnya_Click()
    nazva Me.Kukhnya.Tag
End Sub

Private Sub Spalnya_Click()
    nazva Me.Spalnya.Tag
End Sub

Private Sub Zakroy_Click()
    Me.Hide
    Unload Me
End Sub

Private Sub Kirdyk_Click()
    End
End Sub
не запускается макрос, при запуске кода открывается окно выбора уже сохраненных макросов
 
Цитата
oragdezvuk написал:
то же самое( ругается на строчку
Либо вы используете значения, превышающие возможности переменных, либо происходит деление нуля на ноль.
не запускается макрос, при запуске кода открывается окно выбора уже сохраненных макросов
 
Замените все переменные типа «Integer» в «Long», а если не поможет, то в «Double».
не запускается макрос, при запуске кода открывается окно выбора уже сохраненных макросов
 
В процедуре «SolveLinearEquation» у вас есть вызов процедуры под названием «sub_gaus» (Call sub_gaus(n, A, F, X)), но ваша «гауссовская» процедура называется «gaus», а не «sub_gaus» - измените имя процедуры с «gaus» на «sub_gaus».
Макрос для суммирования чисел из таблицы, Добрый день! Помогите пожалуйста с написанием формулы.
 
У вас пробел в конце во фразе "ждем оригиналы" (=> "ждем оригиналы ") в столбце "D", а в формуле "ждем оригиналы" без пробела.
Преобразовать двумерную таблицу в один столбец., Как из массива данных сделать список из одного стрлбца
 
Код
Option Explicit

Sub k_odnomu()
    Dim a, b, c, i&, j&, r&
    
    Set a = Range("B2").CurrentRegion
        Set b = a.Columns(1): j = a.Columns.Count - 1
            Set c = a.Offset(0, 1).Resize(a.Rows.Count, j).Rows
                Range("G1").Value = Join(Application.Index(c(1).Value, 1, 0), vbNullString)
                For i = 2 To c.Count
                    r = Range("G" & Rows.Count).End(xlUp).Row + 1
                    Range("G" & r).Resize(j, 1).Value = b(1).Cells(i).Value
                    Range("H" & r).Resize(j, 1).Value = Application.Transpose(c(i).Value)
                Next
    c = Empty: b = Empty: a = Empty
End Sub
Определить верхнюю границу массива.
 
Цитата
НСС написал:
получить верхнюю границу массива
Одна из возможностей:
Код
Option Explicit

Sub aaa_2()
    Dim dL1, dH1, dL2, dH2, i&, j&, k&, q, r
    
    r = Array("A1:A30", "B1:B30", "C3")
    
    For i = LBound(r) To UBound(r)
        q = Range(r(i)).Value
        
        If IsArray(q) Then
            Debug.Print "Arr r#" & i, "rng = " & r(i)
            dL1 = LBound(q, 1): Debug.Print "Low indx of 1st dim " & dL1
            dH1 = UBound(q, 1): Debug.Print "Upr indx of 1st dim " & dH1
            dL2 = LBound(q, 2): Debug.Print "Low indx of 2nd dim " & dL2
            dH2 = UBound(q, 2): Debug.Print "Upr indx of 2nd dim " & dH2
            
            For k = dL1 To dH2
                For j = dL1 To dH1
                    Debug.Print "Elmt #(" & j & "," & k & ") = " & q(j, k)
                Next
            Next
            Debug.Print "---------"
        End If
    Next
End Sub
Это всегда будет двумерный массив.
Excel преобразует нумерацию №п.п. в десятичную дробь
 
Цитата
olege1983 написал:
к примеру связку "1.1" он сразу в ячейке ее сделает как 1,1
Поставьте апостроф в начале данного «числа» ("'" & "1.1"), на пример:
Код
Option Explicit

Sub aaa()
    Dim a, b, i&
    
    a = Array("1.1", "0.2", "0.3", "0.4", "0.9", "1.44", "5.25")
    ReDim b(UBound(a), 0)
    
    For i = 0 To UBound(a)
        b(i, 0) = "'" & a(i)
    Next
    
    Range("A1").Resize(i, 1).Value = b
End Sub
Написать формулу в новом столбце, в котором будет выдаваться текст «60+», если сотруднику на сегодняшний день больше 60 лет., В противном случае нужно оставлять ячейку пустой
 
Приведенные выше формулы (bigorq, DANIKOLA, andypetr) будут работать только в том случае, если разделителем системных дат является «.» или «/».
Если разделитель «-», не будут работать.
Не работает выделятор., Compile error in hidden module: frmSelector
 
Как там написано, надо разблокировать модули макросов (редактор vba ALT + F11 => Tools\VBAProject Properties => введите пароль) и проверить, где в коде появляется ошибка.
Как транспорировать данные
 
Код
Option Explicit

Sub aaa()
    Dim a, b, c, i&, j&, k&
    
    a = Sheets("Исходные данные").Range("A1").CurrentRegion.Value
    ReDim b(1 To ((UBound(a, 2) - 2) * (UBound(a, 1) - 1)) + 1, 1 To 4)
    c = Array("Артикул", "Дата", "Ключевое слово", "Позиция")
    k = 1
    
    For i = 1 To 4
        b(k, i) = c(i - 1)
    Next
    For j = 3 To UBound(a, 2)
        For i = 2 To UBound(a, 1)
            k = k + 1
            b(k, 1) = a(i, 1)
            b(k, 2) = a(1, j)
            b(k, 3) = a(i, 2)
            b(k, 4) = a(i, j)
        Next
    Next
    
    With Sheets("Исходные данные")
        With .Range("A1")
            .CurrentRegion.ClearContents
            .Resize(UBound(b, 1), 4).Value = b
        End With
    End With
End Sub
Как проверить не занята ли книга другим пользователем, VBA
 
Например, это может быть так (?):

1. Модуль "ThisWorkbook" файла "workbook.xlsm"
Код
Option Explicit

'Какой-то сетевой каталог для временных файлов
'Необходима консультация по теме с сетевым администратором
Const pthind As String = "Z:\TEMP\Indicators\ForXls\fleopn.txt"

Private Sub Workbook_Open()
    Dim n As Byte: n = FreeFile(0)
    Reset
    On Error Resume Next
    Open pthind For Output Access Write Lock Write As #n
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Reset
    On Error Resume Next
    Kill pthind
End Sub
2. Процедура «автоматического» открытия «workbook.xlsm» в другом файле
Код
Option Explicit

Const pthind As String = "Z:\TEMP\Indicators\ForXls\fleopn.txt"
Const pthwbk As String = "C:\path\workbook.xlsm"

Sub abc_xyz()
    Dim xlap As Object, xlwb As Object
    
    If Len(Dir(pthind, vbNormal)) > 0 Then
        On Error Resume Next
            Kill pthind
            If Err.Number <> 0 Then
                MsgBox "Запись запрещена, файл используется": Exit Sub
            End If
        On Error GoTo 0
    End If
    
    Set xlap = CreateObject("Excel.Application")
    xlap.Visible = True
    Set xlwb = xlap.Workbooks.Open(pthwbk)
    '... Какой-то код
    xlwb.Close True: Set xlwb = Nothing
    xlap.Quit: Set xlap = Nothing
End Sub
VBA. Как найти строку по нескольким критериям?, VBA
 
Цитата
написал:
оптимизировать
Код
Option Explicit

Sub xyz_0()
    Dim a, crt As String, i As Long, p
    
    With ThisWorkbook.Sheets("List1")
        a = .Range("A1:E" & .Range("D" & .Rows.Count).End(xlUp).Row).Value
        crt = Join(Application.Index(.Range("F3:H3").Value, 0), vbNullString)
        
        For i = 1 To UBound(a, 1)
            a(i, 5) = a(i, 1) & a(i, 2) & a(i, 3)
        Next
        
        p = Application.Match(crt, Application.Index(a, 0, 5), 0)
        If Not IsError(p) Then .Range("I3").Value = a(p, 4)
    End With
End Sub

Sub xyz_1()
    Dim a, crt As String, i As Long
    
    With ThisWorkbook.Sheets("List1")
        a = .Range("A1:D" & .Range("D" & .Rows.Count).End(xlUp).Row).Value
        crt = Join(Application.Index(.Range("F3:H3").Value, 0), vbNullString)
        
        For i = 1 To UBound(a, 1)
            If a(i, 1) & a(i, 2) & a(i, 3) = crt _
            Then .Range("I3").Value = a(i, 4): Exit For
        Next
    End With
End Sub
VBA RegEx макрос для .docx (или для строки в ячейке Excel), Замена значений в тексте
 
А может так ?
Код
Option Explicit

Sub abcdf()
    Dim i As Long, fnd As String, rplc As String, txtrng As Object
    
    Selection.HomeKey Unit:=wdStory
    
    Set txtrng = ActiveDocument.Range
    txtrng.Find.ClearFormatting
    txtrng.Find.Replacement.ClearFormatting
    
    Do While txtrng.Find.Execute(FindText:="ref\[*\]ref", MatchWildcards:=True)
        i = i + 1
        rplc = "[" & i & "]"
        fnd = ActiveDocument.Range(Start:=txtrng.Start, End:=txtrng.End).Text
        txtrng.Find.Execute FindText:=fnd, MatchWholeWord:=True, MatchWildcards:=False, _
                        Forward:=True, Wrap:=wdFindContinue, ReplaceWith:=rplc, _
                        Replace:=wdReplaceAll
    Loop
End Sub
Добавить в ячейку текст из активного (выбранного) TextBox, VBA
 
Вариант:
Код
Option Explicit

Private tbnme As String

Private Sub UserForm_Initialize()
    Dim i As Long
    
    For i = 1 To 10
        UserForm1.ListBox1.AddItem "Zapis' - " & i
    Next
End Sub

'Private Sub TextBox1_Enter()
'    tbnme = "TextBox1"
'End Sub

'Private Sub TextBox2_Enter()
'    tbnme = "TextBox2"
'End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    tbnme = "TextBox1"
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    tbnme = "TextBox2"
End Sub

Private Sub CommandButton1_Click()
    Dim txt As String
    
    If Len(tbnme) = 0 Then Exit Sub
    txt = Me.Controls(tbnme).Value
    
    MsgBox "Tekushchiy 'TextBox' eto: " & Chr(34) & tbnme & Chr(34) & vbNewLine & _
           "a tekst eto: '" & txt & "'"
End Sub
Преобразование дат из текстового формата в числовой
 
???
Код
ДАТА(ЗНАЧЕН(ЛЕВСИМВ($B1;4));ПОИСКПОЗ(ПРАВСИМВ($B1;ДЛСТР($B1)-НАЙТИ(" ";СЖПРОБЕЛЫ($B1);6));{"январь";"февраль";"март";"апрель";"май";"июнь";"июль";"август";"сентябрь";"октябрь";"ноябрь";"декабрь"};0);1)
???
Подставить в ячейку текст в зависимости от текста в другой ячейке
 
Русских названий функций не знаю полностью, но может быть то так ?

В "B1":

=ВПР(ЛЕВСИМВ($A1;2);$D$3:$E$5;2;0)

и скопируйте вниз.
Макрос скопировать значение только первой строки результата автофильтра
 
Цитата
  abutov написал:
скопировать значение только первой строки результата автофильтра
Код
Sub aaa()
    Dim rg As Range, frd As Range
    
    Set rg = Range("A1").CurrentRegion
    rg.AutoFilter Field:=2, Criteria1:="<0"
    On Error Resume Next
        With rg.Offset(1, 0).Resize(rg.Rows.Count - 1)
            Set frd = .SpecialCells(xlCellTypeVisible).Areas(1).Rows(1)
        End With
    On Error GoTo 0
    rg.AutoFilter
    If Not frd Is Nothing Then
        Range("D2:E2").Value = Array(Application.Min(frd), Application.Max(frd))
        Set frd = Nothing
    End If
    Set rg = Nothing
End Sub
Цикл For Each в обратном порядке, VBA
 
Можно тоже использовать свойство "Areas" объекта "Range":
Код
Sub xyz()
    Dim i&, rg As Range
    
    With ActiveSheet
        Set rg = .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
        
        For i = rg.Areas.Count To 1 Step -1
            'With rg.Areas(i).Range("A1")
            'With rg.Areas(i).Cells(1)
            With rg.Areas(i)
                .Select
                .Interior.ColorIndex = 9 - i
            End With
            Application.Wait (Now + TimeValue("00:00:02"))
        Next
        
        .Range("A1").CurrentRegion.Interior.ColorIndex = xlNone 'xlColorIndexNone
    End With
    
    Set rg = Nothing
End Sub
Макрос удаление символов в начале строки, Как удалить определенные символы в начале строки?
 
Цитата
написал:
ocet p , у меня на 1млн строк ("X123") вот так

на моей "машиночке" всё в три-четыре раза длиннее работает, она уже старинная - ваша это "быстрая машина"

Цитата
написал:
спасибо за науку!
рад, что привнес что-то в тему
спасибо за тесты
Макрос удаление символов в начале строки, Как удалить определенные символы в начале строки?
 
такой вариант:
Код
Function cipcip$(ByVal sval$, sdel$)
    Dim asdel&: asdel = AscW(sdel)
    Do While AscW(sval) = asdel
        sval = Right$(sval, Len(sval) - 1)
    Loop
    cipcip = sval
End Function
время перехода при обработке данных (1 миллион строк) в переменной массива:
"всасывание" данных в массив: 0,2 s
удаление символов: 1,4 s
ввод данных в лист: 5,4 s

запуск/вызов (?) функции (на основе одного символа - не подходит для "смешанных символов", таких как: Xa, Xx, и т. д.):
Код
Sub picpic()
    Dim t!: t = Timer
    Const strd$ = "X"
    Dim a, i&
    
    With ActiveSheet
        a = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).Value
    End With
        'Debug.Print Round(Timer - t, 3)
        For i = 1 To UBound(a, 1)
            a(i, 1) = cipcip(a(i, 1), strd)
        Next
        'Debug.Print Round(Timer - t, 3)
    With ActiveSheet
        .Range("B1:B" & i - 1).Value = a
    End With
    'Debug.Print Round(Timer - t, 3)
End Sub
Открыть последний файл в папке по маске не по дате сохранения
 
Может так ?
Код
Option Explicit

Sub IvanovIvanIvanovich()
    Const pth$ = "C:\Temp\Papka\"
    Const pttrn$ = "??.??.????_*.xlsx" ' 18.10.2022_IvanovIvanIvanovich.xlsx
    
    Dim d, cdte As Date, fle$, s, mdte&, mfle$
    
    cdte = Date
    mdte = 10000000
    fle = Dir(pth & pttrn, vbNormal)
    
    Do Until Len(fle) = 0
        s = Split(Split(fle, "_", 2, 0)(0), ".", 3)
        d = cdte - DateSerial(s(2), s(1), s(0))
        If Not IsError(d) Then
            If d < mdte Then mdte = d: mfle = fle
        End If
        fle = Dir()
    Loop
    
    If TypeName(ActiveSheet) = "Worksheet" Then
        ActiveSheet.Range("A2:B2").Value = Array(mdte, mfle)
    End If
End Sub
VBA Excel Добавление нумерации внутри ячейки с данными
 
А куда вы вводите свои данные сейчас и в каком порядке ?
В столбце А нет никакой нумерации.
Упрощение записи VBA, Упрощение записи VBA при наличии множества TextBox и ссылок на ячейки, размещенные по порядку номеров
 
Цитата
написал:
как можно упростить подобную запись
Цитата
написал:
можно так
А если нумерация для «TextBox» и «Range» не является непрерывной, вы можете как ниже:
Код
    Dim i As Long
    Dim ctrls, rgs
    
    With Me
        ctrls = Array(.TextBox1, .TextBox2, .TextBox3, .TextBox4, .TextBox5, .TextBox6, _
                      .TextBox7, .TextBox8, .TextBox9, .TextBox10, .TextBox11, .TextBox12, _
                      .TextBox13, .TextBox14, .TextBox15, .TextBox16, .TextBox17, .TextBox18, _
                      .TextBox19)
    End With
    
    rgs = Array("C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", "C11", _
                "C12", "C13", "C14", "C15", "C16", "C17", "C18", "C19", "C20")
    
    For i = LBound(ctrls) To UBound(ctrls)
        ctrls(i).Value = List.Range(rgs(i)).Value
    Next
Удаление строк с 0 значением в ячейках определенного столбца во всех листах., нужен макрос на удаление строк с 0 значение в ячейке во всех листах
 
Вариант:
Код
Option Explicit

Sub курочка_ряба()
    Dim ws As Object
    On Error Resume Next
    For Each ws In Worksheets
        With ws
            If .Name <> "Заказ" Then
            'If .Visible Then
                With .Range("A6:F42")
                    .AutoFilter Field:=6, Criteria1:="0"
                    With .Offset(1, 0).Resize(.Rows.Count - 1)
                        .SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
                    End With
                    If Err.Number <> 0 Then Err.Clear
                    .AutoFilter
                End With
            End If
        End With
    Next
End Sub
Формула VLOOKUP через VBA с искомой переменной, вместо фииксированной ячейки
 
Вы это имели в виду ?

Код
Option Explicit

Sub V_LOOK_UP()
    Const rngadrs = "$A$1:$B$34"
    Const shnme = "Source"
    
    Dim adrs As String, frmla As String
    
    adrs = Application.InputBox("Select a Cell", Type:=8).Address(0, 0)
    frmla = "=VLOOKUP(" & "$" & adrs & "," & shnme & "!" & rngadrs & ",2,0)"
    
    Range(adrs).Offset(0, 1).Formula = frmla
End Sub
Указать список значений для ComboBox, Как переделать 1|2|3|4|5 в Array("1", "2", "3", "4", "5", "6")
 
Цитата
Юрий написал:
Как переделать 1|2|3|4|5 в Array("1", "2", "3", "4", "5", "6")
Можно тоже таким образом:
Код
Option Explicit

Sub UserForm_Initialize()
    Dim strval As Variant
    
    strval = "1|2|3|4|5|6"
    
    strval = "{" & Replace(strval, "|", ",", 1, -1, 1) & "}"
    strval = Evaluate(strval)
    
    Me.ComboBox4.List() = strval
End Sub
Разбивка по строкам
 
Вариант, для размещения данных как на изображении:

Код
Option Explicit

Sub razbivka_po_strokam()
    Const dlm = ","
    
    Dim i&, ii&, j&, jj&, k&, n&
    Dim arr, splt, tbl
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
    With Range("A1").CurrentRegion
        arr = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Value
    End With
    
    ii = UBound(arr, 1): jj = UBound(arr, 2)
    For i = 1 To ii
        j = j + UBound(Split(arr(i, 7), dlm, -1, 0)) + 1
    Next
    ReDim tbl(1 To j, 1 To jj)
    jj = jj - 1
    
    For i = 1 To ii
        splt = Split(arr(i, 7), dlm, -1, 0)
        For n = 0 To UBound(splt)
            k = k + 1
            For j = 1 To jj
                tbl(k, j) = arr(i, j)
            Next
            tbl(k, j) = splt(n)
        Next
    Next
    
    arr = Empty: splt = Empty
    Range("A2").Resize(k, jj + 1).Value = tbl
    tbl = Empty
    
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Изменение связей с группой файлов за один раз
 
?
Но это не схема именования, описанная в шаге 1.
Что еще изменится ?
: )
Изменение связей с группой файлов за один раз
 
Цитата
Kiboiashi Kimomoro написал:
170 файлов формата *.xls типа: 01_2020_01_10.xls
Почему схема именования файлов - "01_2020_01_10.xls", а не "001_2020_01_10.xls" ?
Файлов 170, поэтому должно быть "001_" (до "170_") в префиксе, а не "01_".
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 15 След.
Наверх