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

Страницы: 1
Как изменить текст в строке итогов?
 
Здравствуйте. Как изменить текст в строке итогов в гугл таблице? Я в редакторе сводной таблицы активирую галочку  Показывать итог, и мне выдает строку со словом Итого (и дальше столбцы с итогами).  Но нужно, чтобы вместо Итого было слово Результат. Как это реализовать? Отредактировать текст в ячейке, как обычно, не получается.
Изменено: Мария А - 18.11.2023 09:39:44
Копирование ячеек из таблицы без табуляции
 
Здравствуйте. Есть сводная таблица (в приложенном файле это Лист3). По умолчанию все выбранные значения копируются с табуляцией:
Код
28.02.2023   1/2   1/1   
02.03.2023   1/1   1/   1/1
04.03.2023         1/   1/1

А нужно, чтобы они выборочно копировались (например, если строк в сводной таблицей 50, но выделены только строки 20, 30 и 40) и вставлялись в любое текстовое поле так:

Цитата

28.02 Клиент_1 1/2, Клиент_2 1/1
02.03 Клиент_1 1/1, Клиент_2 1/0, Клиент_3 1/1
04.03 Клиент_2 1/0, Клиент_3 1/1

Пробовала написать код по подобию того, который размещен на Листе1 - теперь копируется вот так:
Цитата
28.02 Клиент_1 1/1, Клиент_2 1/1,
02.03 Клиент_1 1/1, Клиент_2 1/, Клиент_3 1/1
04.03 Клиент_2 1/, Клиент_3 1/1

Есть две проблемы - лишние запятые в конце строк не нужны, и значения наподобие "1/0" отображаются как "1/". Как убрать лишнюю запятую в конце строк для решения первой проблемы, я так и не придумала... Для решения второй проблемы пробовала вставить фрагменты из кода, находящегося на Листе1, а именно "Проверяем, является ли значение после "/" числом" и "Проверяем, является ли вторая часть (после "/") числом". После этого перестали отображаться названия столбцов (Клиент_1, Клиент_2 и т.д.). Как это исправить?
Сам код Листа3:

Код
Sub CopyReport()
    Dim sText As String
    Dim rng As Range
    
    Set rng = Intersect(Selection, ActiveSheet.UsedRange)
    
    If Not rng Is Nothing Then
        sText = GetText(rng)
        CopyText sText ' Вывод в буфер обмена
        'SaveText sText ' Вывод в отдельный файл
        
        MsgBox "Отчет успешно скопирован!"
    Else
        MsgBox "Пожалуйста, выберите диапазон ячеек для копирования.", vbExclamation
    End If
End Sub

Private Sub SaveText(sText As String)
    ' Вывод в отдельный файл
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim sFull As String
    sFull = ThisWorkbook.FullName & ".txt"
    
    With fso.CreateTextFile(sFull, True)
        .WriteLine sText
        .Close
    End With
    
    Shell "explorer.exe """ & sFull & """", 1
End Sub

Private Function GetText(rr As Range) As String
    Dim arr As Variant
    Dim txt As String
    Dim yy As Long
    Dim xx As Long
    Dim ra As Range
    Dim isFirstDate As Boolean
    
    For Each ra In rr.Areas
        If ra.Cells.CountLarge = 1 Then
            ReDim arr(1 To 1, 1 To 1)
            arr(1, 1) = ra.value
        Else
            arr = ra.value
        End If
        
        isFirstDate = True
        For yy = 1 To UBound(arr, 1)
            If Not isFirstDate Then
                txt = txt & vbCrLf
            Else
                isFirstDate = False
            End If
            
            ' Проверяем, является ли область таблицей2
            If ra.Columns.Count > 1 Then
                ' Обработка Таблицы2
                Dim dateValue As Variant
                dateValue = arr(yy, 1)
                
                txt = txt & Format(dateValue, "dd.mm") ' Дата
                
                For xx = 2 To UBound(arr, 2)
                    Dim value As Variant
                    value = arr(yy, xx)
                    
                    If Not IsEmpty(value) Then
                        Dim crmValue As Variant
                        crmValue = ra.Cells(1, xx).Offset(-1).value
                        
                        txt = txt & " " & crmValue & " " & IIf(value = 0, "0", Replace(value, ".", "/"))
                        If xx < UBound(arr, 2) Then
                            txt = txt & ","
                        End If
                    End If
                Next xx
            End If
        Next yy
    Next ra
    
    GetText = Trim(txt)
End Function

Sub CopyText(Text As String)
    'VBA Macro using late binding to copy text to clipboard.
    'By Justin Kay, 8/15/2014
    Dim MSForms_DataObject As Object
    Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    MSForms_DataObject.SetText Text
    MSForms_DataObject.PutInClipboard
    Set MSForms_DataObject = Nothing
End Sub

Изменено: Мария А - 13.05.2023 00:16:59
Как переместить таблицу на другое место на листе?
 
Здравствуйте.
Есть документ с основной и сводной таблицами (в приложенном файле Лист1). Основная таблица находится на столбцах A, B, C, D, E. Сводная - на столбцах G, H. Хотела поменять их местами - переместить сводную на столбцы A, B, а основную переместить на столбцы E, F, G, H, I. В коде страницы и коде формы там, где указаны старые диапазоны, поменяла на соответствующие им новые. Название листа осталось прежним, названия таблиц тоже. Так у меня все макросы и формы посыпались. Форма то не видит названия столбцов, то заполняет ячейки вне таблицы, то выдает ошибки. Макросы с листа вообще перестали работать. Уже просто едет крыша...  Что я делаю не так?
Как копировать ячейки из таблицы без табуляции и одной строкой?
 
Здравствуйте.
Есть сводная таблица со столбцами "Клиент" и "Заказы" (в приложенном файле это таблица "Отчет за смену" на Листе1. Проблема: когда я пытаюсь скопировать эту таблицу в текстовое поле (например, в Блокнот), скопированное вставляется со знаками табуляции между значениями ячеек, и каждая строка сводной таблицы начинается с абзаца. Копируется и вставляется так:
Код
Клиент_1   1/2
Клиент_2   1/1
Клиент_3   1/1
Клиент_4   1/2
А нужно, чтобы копировалось и вставлялось в любое текстовое поле так:
Код
Клиент_1 1/2, Клиент_2 1/1, Клиент_3 1/1, Клиент_4 1/2
Возможно ли это реализовать?
Изменено: Мария А - 11.05.2023 15:22:49
Как объединить два итога в одном столбце сводной таблицы?
 
Здравствуйте!

Есть сводная таблица (в прикрепленном файле Лист3). Нужно, чтобы итоги для строк писались в одном столбце, а не в двух. Т.е. вместо столбцов "Итог Всего" и "Итог Допы" должен быть столбец "Результат", в котором будет написаны числа "Итог Всего / Итог Допы" за каждую дату и в общем. Например, за 28.02 в столбце "Результат" должно быть "3/3", за 02.03 - "3/2", за 04.03 - "6/4", и в итоговой строке - "12/9". Как это реализовать?

Пробовала создать такую меру - выбивает ошибку, что формула недопустима:
Код
=COUNTX('Таблица1';'Таблица1'[Доп. продажи])+"/"+COUNTX('Таблица1';'Таблица1'[Сумма])
Как создать в Эксель кнопки-стрелки для прокрутки таблицы влево-вправо?
 
Здравствуйте! Есть документ Эксель с таблицей, где очень много столбцов (которые просто не помещаются на одном экране). Есть ли возможность перемещаться в крайний правый и крайний левый столбец таблицы с помощью макросов? Количество столбцов непостоянно, т.к. это сводная таблица - в один день может быть 20 столбцов, в другой 50. На листе уже есть кнопки вверх-вниз со следующими макросами:
Код
Sub TableDown()

Application.SendKeys ("^{END}") 'перемещает в низ таблицы

End Sub
Sub TableUp()

Application.SendKeys ("^{HOME}") 'перемещает в верх таблицы

End Sub
Есть ли возможность подобным образом реализовать прокрутку в левый и правый края таблицы?
Изменено: Мария А - 23.03.2023 22:18:08
Как разрешить вводить в TextBox только числа больше 0, в противном случае - делать автозамену?
 
Здравствуйте!
Есть пользовательская форма для заполнения таблицы. Нужно, чтобы в TextBox5 (например), вводились только числа и только больше 0. TextBox5 позволяет заполнить ячейку в столбце таблицы E (столбец 5). При нажатии кнопки "Добавить" (CommandButton1) должна выполняться проверка TextBox5 и добавляться новая строка со значениями из других полей (TextBox1, 2, 3 и т.д.). Если в TextBox5 введено 0 (именно 0, а не 100/200/300 и пр.), то новая строка должна добавляться с пустой ячейкой в столбце 5 (т.е. вместо значения "0" должно быть ""). Как это реализовать?
Изменено: Мария А - 10.03.2023 17:28:28
Как объединить два значения в форме в гиперссылку?
 
Здравствуйте!
Есть пользовательская форма. В прикрепленном примере - Лист2. Нужно сделать так, чтобы в поле Ссылка нужно было вводить только ссылку, но в таблицу она добавлялась уже как гиперссылка с заданным именем. Например, если добавляем Клиента4 (TextBox2) и его ссылку www.example.com (TextBox3), в столбце Ссылка должна появиться гиперссылка с адресом www.example.com и именем "Клиент4 - рабочий сайт". Часть имени " - рабочий сайт" должна добавляться автоматически, она постоянная для всех клиентов. Я знаю, как это делать вручную в ячейках формулой ГИПЕРССЫЛКА или через ПКМ - "Ссылка". Но как сделать так, чтобы форма автоматически создавала такие гиперссылки?..

Пробовала добавить в код формы перед "End if" это - выбивает ошибку.
Код
With Worksheets
    .Hyperlinks.Add Anchor:=.Range("C:C"), _
    Address:=TextBox3.Value, _
    TextToDisplay:="TextBox2.Value - рабочий сайт"
End With
Изменено: Мария А - 05.03.2023 15:36:21
Как заставить таблицу при работе с формой заполняться в фоновом режиме?
 
Здравствуйте!
На двух листах есть две таблицы - Таблица1 и Таблица2. Каждая заполняется с помощью соответствующих пользовательских форм (кнопки для перехода на них есть на листах). Отличие таблиц в том, что в Таблице1 еще с помощью макроса происходит автоматическое заполнение даты при заполнении номера заказа. Код Листа1:
Код
'Макрос1 - автозаполнение Даты при добавлении информации в Номер заказа
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WorkRng As Range
    Dim Rng As Range
    Dim xOffsetColumn As Integer
    Application.ScreenUpdating = False
    Set WorkRng = Intersect(Лист1.Range("C:C"), Target)
    xOffsetColumn = -1
    If Not WorkRng Is Nothing Then
        Application.EnableEvents = False
        For Each Rng In WorkRng
            If Not VBA.IsEmpty(Rng.Value) Then
                Rng.Offset(0, xOffsetColumn).Value = VBA.Date
                Rng.Offset(0, xOffsetColumn).NumberFormat = "DD.MM.YYYY"
            Else
                Rng.Offset(0, xOffsetColumn).ClearContents
            End If
        Next
        Application.EnableEvents = True
    End If
End Sub

'Макрос2 - показ пользовательской формы
Sub UserFormShow()
    UserForm1.Show
End Sub

'Макрос3 - автоматическая вставка максимальной даты в фильтр СводнойТаблицы1 (находится рядом на том же листе)
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim oTbl As ListObject, maxdate As Date
    Set oTbl = ThisWorkbook.Worksheets("Лист1").ListObjects("Таблица1")
    maxdate = Application.Max(oTbl.ListColumns("Дата").Range)
    Application.EnableEvents = False
    Target.PivotFields("[Таблица1].[Дата].[Дата]").ClearAllFilters
    Target.PivotFields("[Таблица1].[Дата].[Дата]").CurrentPageName = "[Таблица1].[Дата].&[" & Format(maxdate, "YYYY-MM-DD") & "T00:00:00]"
    Application.EnableEvents = True
End Sub

На Листе2 - только Макрос2 для UserForm2

Проблема - Таблица1 не заполняется одновременно с добавлением информации в Форму1. Когда заполняю Таблицу2 через Форму2, я вижу, как одновременно  с заполнением полей в форме заполняются и ячейки в таблице. В случае с Таблицей1 я могу, как и там, добавить несколько записей подряд, но в Таблице1 они отображаются только после выхода из Формы1. Вопрос: можно ли сделать так, чтобы Таблица1 заполнялась постепенно при добавлении информации в каждую ячейку, как Таблица2? И при этом не затрагивалась работа Макроса3

Изменено: Мария А - 04.03.2023 12:29:17
Как заполнить значениями ComboBox в форме?
 
Здравствуйте!
Есть основная форма, с помощью которой заполняется "умная таблица" со списком заказов (Таблица1). К полю Клиент хотелось бы сделать не текстовое поле, а выпадающий список (т.к. есть несколько основных клиентов). Не получается его заполнить.
Пробовала вносить клиентов в текстовое поле справа (AddItem Me.TextBox.Value). Получилось. Но при закрытии формы комбобокс очищается и снова становится пустым. Мне же нужно, чтобы созданный список сохранялся
Пробовала создать на другой странице вторую таблицу со списком Клиентов, чтобы задать в качестве списка значений диапазон. И для ее заполнения сделала еще одну форму по подобию основной (должна была запускаться по уже невостребованной кнопке "Добавить клиента"). Но, судя по ошибкам, я или неправильно оформляю команду Combobox.List, или где-то не там ее добавляю. На Combobox.List = Range ("Лист2!Таблица2[Клиент]") VBA ругается, на попытку сунуть это где-нибудь рядом с Textbox - тоже. Удалось только сделать вызов второй формы по кнопке, но после моих колупаний это тоже перестало работать.
Как реализовать вставку значений в комбобокс и их сохранение даже после закрытия формы?
Изменено: Мария А - 03.03.2023 19:46:01
Как обеспечить работу макроса при заполнении формы?
 
Здравствуйте!
Есть "умная таблица" в Экселе с заголовками и макросами.
Столбец А - "№ п/п". Заполняется автоматически формулой =СТРОКА()-1 при добавлении новой строки.
Столбец  B - "Дата". Дата оформления заказа. Заполняется автоматически с помощью  макроса, когда в соседней ячейке в столбце C появляется хоть какой-то  текст. Формат ДД.ММ.ГГГГ
Столбец С - "Номер заказа". Пишется вручную.
Столбец D - "Сумма". Пишется вручную.
Столбец  E - "Доп. продажи". Пишется вручную. В зависимости от того, была  доп.продажа или нет, в ячейку ставится или сумма доп.продажи, или она  остается пустой.
Столбец F - "Клиент". Пишется вручную.
Столбец B заполняется с помощью макроса, как только в соседнюю ячейку в столбце C вносятся данные (номер заказа).
На рабочем листе (лист "Осн. таблица") - два макроса (первый на выставление в соседней сводной таблице максимальной найденной даты, второй на заполнение столбца B)
Проблема:  когда я пытаюсь заполнять таблицу с помощью простой формы (вызываемой с  помощью кнопки на Панели быстрого доступа), дата в форме должна  писаться вручную. Если ее пропустить, при сохранении записи в строке  таблицы на месте даты остается пустая ячейка. Чтобы там появилась дата,  надо отредактировать вручную ячейку C ("Номер заказа"). Как сделать так,  чтобы второй макрос работал и при заполнении таблицы с помощью  формы? Хоть простой, хоть пользовательской.
Данные  с помощью формы должны вноситься именно в основную таблицу, а не в  сводную. Сводная таблица обновляется сама ежеминутно. Т.е. нужно, чтобы  форма сама вносила № п/п (это она и так делает) и дату заполнения  (макрос это пишет при ручном заполнении ячеек, но надо бы, чтобы он  участвовал еще и в заполнении ячеек через форму). Чтобы в форму  оставалось ввести суммы и имя клиента. Сводные таблицы форма вообще не  должна затрагивать - те сами потом возьмут из основной таблицы все, что  им потребуется.
Изменено: Мария А - 02.03.2023 11:09:16
Страницы: 1
Loading...