Здравствуйте. Два листа книги защищены от внесения изменений вручную, но не для макросов. Использованный код.
Код
Private Sub Workbook_Open()
Dim Arr, sSh
Arr = Array("Лист1", "Лист2")
For Each sSh In Arr
Protect_for_User_Non_for_VBA Me.Sheets(sSh)
Next
End Sub
Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet)
wsSh.Protect Password:="1111", AllowFiltering:=True, UserInterfaceOnly:=True
End Sub
Все работало замечательно, но в какой-то момент стало выдавать ошибку (см. фото). В код изменения не вносились. Может кто сталкивался с таким?
Здравствуйте. Помогите разобраться с ошибкой в пути куда должен попасть переименованный файл. В начале создаем папку (успешно). Например получим папку с именем "100"
Код
Dim nFolder As Object
Set nFolder = CreateObject("Scripting.FileSystemObject")
With nFolder
.CreateFolder ("D:\" & Cells(iLastRow, 1))
For i = 1 To 1
Next
End With
Далее переименовываем файл (успешно)
Код
Dim objFSO As Object, objFile As Object
Dim sFileName12 As String, sNewFileName12 As String
sFileName12 = UserForm1.TextBox12.Text
sNewFileName12 = iLastRow - 2 & "KP.pdf"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(sFileName12) = False Then
MsgBox "Такого файла не существует", vbCritical, "Внимание"
Exit Sub
End If
Set objFile = objFSO.GetFile(sFileName12)
objFile.Name = sNewFileName12
MsgBox "Файл переименован", vbInformation, "Сообщение"
Далее перемещаем переименованный файл в ранее созданную папку (ругается на путь)
Код
Dim sNewFolderName12 As String
sFileName12 = "D:\" & sNewFileName12
sNewFolderName12 = nFolder ' адрес куда перемещать - см. фото ошибки (во вложении)
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(sFileName12) = False Then
MsgBox "Такого файла не существует", vbCritical, "Внимание"
Exit Sub
End If
Set objFile = objFSO.GetFile(sFileName12)
objFile.Move sNewFolderName12
MsgBox "Файл перемещен", vbInformation, "Сообщение"
Если вместо nFolder прописать прямой путь "D:\100\" то все работает.
Здравствуйте. Помогите доработать код для сравнения дат содержащихся в ячейках 5-го столбца каждой строки с актуальной датой. Если дата в какой либо ячейке старше актуальной, то строка содержащая такую ячейку выделятся.
Код
Private Sub Workbook_Open()
Dim iLastRow As Long
Dim i As Integer
With Sheet("Пример")
iLastRow = .Cells(Rows.Count, 5).End(xlDown).Row
For i = 3 To iLastRow
If .Cells(i, 5).Value <= Date Then
.Range("A" & i & ":G" & i).Interior.Color = RGB(255, 225, 225)
End If
End With
End Sub
Здравствуйте. В форме есть 2 текст бокса. В первый вписывается Название, во второе попадает путь к файлу (выбирается по нажатию кнопки справа текст бокса).
Как сделать что бы при нажатии кнопки Добавить в ячейку попадал текст из первого текст бокса и являлся бы гиперссылкой из второго.
Сейчас код такой:
Код
Private Sub CommandButton1_Click()
With Worksheets("Лист1")
i = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(i, 1) = UserForm1.TextBox1.Value
.Cells(i, 2) = UserForm1.TextBox2.Value
End With
'Очистка формы для дальнейшего ввода данных
Me.TextBox1 = ""
Me.TextBox1.BackColor = &H80000005
Me.TextBox2 = ""
Me.TextBox2.BackColor = &H80000005
End Sub
Private Sub UserForm_Initialize()
With TextBox2 'кнопка для доп информации
.DropButtonStyle = fmDropButtonStyleReduce 'вид кнопки
.ShowDropButtonWhen = fmShowDropButtonWhenAlways 'показывать кнопку
End With
End Sub
Private Sub TextBox2_DropButtonClick()
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "PDF files", "*.pdf*"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
If .Show = 0 Then Exit Sub
TextBox2 = .SelectedItems(1)
End With
End Sub
Здравствуйте. Прошу помощи завершить решение. При двойном клике любой ячейки в строке выводится диалог MsgBox. При нажатии "Да" в ячейку F этой же строки записать любое значение (текст). Например. Если клик по В4, то записать в F4. Если клик по Е10, то записать в F10 и т.д.
Здравствуйте. Пожалуйста, объясните мне почему при заданной ширине UserForm = 100 при вставке в нее TextBox шириной 100 и отступом слева 0, почему этот TextBox не помещается в UserForm? Где прочесть как правильно отсчитывать координаты, учитывать или нет толщину рамки окна формы и где тогда ее узнать? Спасибо.
Здравствуйте. В данной теме описан способ смены пароля текущей учетной записи пользователя Windows со следующим кодом:
Код
Dim WshNetwork As Object, sCompName As String, oUser As Object, sName
Set WshNetwork = CreateObject("WScript.Network")
sCompName = WshNetwork.ComputerName 'получаем имя компа
sName = WshNetwork.UserName 'получаем имя текущего пользователя
On Error Resume Next
'sName - имя пользователя на компьюторе
Set oUser = WshNetwork.GetObject("WinNT://" & sCompName & "/" & sName)
oUser.ChangePassword PassOld, "2584"
'ввод нового пароля
oUser.SetInfo
Как (если возможно) его исправить под возможность сверить введенное значение в textbox1 с текущим паролем учетной записи пользователя Windows? Критика принимается. Помощь приветствуется. Спасибо.
Здравствуйте. При открытии формы"Полное Имя пользователя" ПК должно заносится в textbox1. Данный код работает на windowsXP с office2010, windows7 с office2019. На windows11 c office2021 и windows11 с office2010 не работает. При открытии формы выпадает ошибка (см. фото). Хочу понять это проблема в коде или в настройках моего ПК. Мне кажется в коде, но как ее исправить?
Код
Private Sub UserForm_Initialize()
Dim CO_, GO_, DN_
Set CO_ = CreateObject("ADSystemInfo")
Set GO_ = GetObject("LDAP://" & CO_.UserName)
DN_ = GO_.DisplayName
UserForm1.TextBox1 = DN_
End Sub
Здравствуйте. Есть две формы. В первой: TextBox1 с DropButton. Во второй: ListBox1 с перечнем позиций. При нажатии TextBox1_DropButton открывается форма 2 и при этом случайным образом выбирается или одна позиция или несколько, иногда ничего не выбирается. Это всегда рандомно. Из ListBox1 выбранные позиции вставляются в TextBox1. Почему это происходит и как это исправить?
Здравствуйте. Просьба помочь с решением задачи. В textbox1 имеется например значение "текст; ". Как по нажатию кнопки commandbutton1 удалить последние символы если это ";" или " " (пробел)? Спасибо.
Здравствуйте. Прошу откликнуться кто поможет делом а не советом. В userform1 в textbox1 нужно вставить выбранные значения (одно или несколько) из listbox1, который в свою очередь находится в userform2. Спасибо.
Здравствуйте. С помощью функции "СУММЕСЛИМН" ищу Сумму всех заказов (столбец "В") по условию 1 "Посредник" (столбец "С") и при условии 2 и 3 (столбец "А") в диапазоне дат (начальная и финишная дата указываются в ячейках F2 и F3 соответственно).
Здравствуйте. Возможно ли при запуске книги определять версию excel и если она 2007 или более ранняя выводить сообщение и автоматически закрывать книгу? По возможности с примером рабочего кода.
Здравствуйте. Есть форма ввода данных в таблицу. Как перед добавлением проверить введены ли уже эти данные в таблицу? Проверка на все поля кроме (CheckBox1, TextBox4, TextBox5). В случае полного совпадения вывести сообщение, форму не закрывать, данные не добавлять в таблицу, выделить строку с найденными значениями. Спасибо.
Изменено: comment.imho - 19.02.2022 14:17:13(Снят пароль с листа)
Здравствуйте. Подскажите как изменить статичный диапазон значений для сводной таблицы, как в приведенном коде, на динамичный: Лист1! столбцы 1:12 до последней заполненной строки
Код
Sub Сводная()
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Лист1!R2C1:R21C12", Version:=7).CreatePivotTable TableDestination:= _
"Лист2!R1C1", TableName:="Пример", DefaultVersion:=7
End Sub
А в таком варианте выдает ошибку (см. фото)
Код
Sub Сводная()
iST = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Лист1!R1C1:R" & iST & "C12", Version:=7).CreatePivotTable TableDestination:= _
"Лист2!R1C1", TableName:="Пример", DefaultVersion:=7
End Sub
Здравствуйте. С помощью формы через TextBox1 и TextBox2 вносятся числовые значения. В TextBox2 значения вводятся только через запятую (не более 2 знаков после запятой). В таблице они определяются как текст. Как сделать что бы формат этих значений стал числовым? Это нужно для дальнейшей обработки через сводную таблицу (сумма значений).
Здравствуйте. В форме есть множество TextBox'ов через которые вводятся значения в таблицу. Если TextBox не заполнен то выводится сообщение и подсвечивается пустой TextBox. Код подсветки довольно громоздкий. Как его можно упростить?
Скрытый текст
Код
If Me.TextBox1 = "" Then
MsgBox CreateObject("WScript.Network").UserName & vbCrLf & vbCrLf & "введите число 1", 0, "Сообщение"
Me.TextBox1.BackColor = &HC0FFFF
PauseTime = 0.12
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &H80000005
PauseTime = 0.1
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &HC0FFFF
PauseTime = 0.12
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &H80000005
PauseTime = 0.1
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &HC0FFFF
PauseTime = 0.12
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &H80000005
PauseTime = 0.1
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &HC0FFFF
PauseTime = 0.12
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &H80000005
PauseTime = 0.1
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Me.TextBox1.BackColor = &HC0FFFF
TextBox1.SetFocus
Exit Sub
End If
Sub Сравнить()
LR = Worksheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row + 1
For i = 3 To Worksheets("Лист1").Cells(Rows.Count, 8).End(xlUp).Row
E = True
For j = 2 To Worksheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
If Worksheets("Лист2").Cells(j, 1).Value = Worksheets("Лист1").Cells(i, 8).Value Then E = False: Exit For
Next j
If E Then Worksheets("Лист2").Cells(LR, 1).Value = Worksheets("Лист1").Cells(i, 8).Value: LR = LR + 1
Next i
End Sub
Код сравнивает столбец 1 на "Лист2" со столбцом 8 на "Лист1". При уникальном значении в ячейке столбца 8 "Лист1" значение копируется в столбец 1 "Лист2" в последнюю незанятую строку. Вопрос. Как при таких же условиях для найденной уникальной ячейки столбца 8 "Лист1" копировать и соседние ячейки (столбцов 9 и 10) и вставлять их на "Лист2" в последнюю незанятую строку?
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsNumeric(Chr$(KeyAscii)) Then
KeyAscii = 0
Else
t = Me.TextBox2
If t Like "##" Or t Like "##.##" Then t = t & "."
Me.TextBox2 = t
End If
End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Local Error Resume Next
t = Me.TextBox2
If KeyCode = 8 And (Right(t, 1) = "." Or Right(t, 1) = " ") Then t = Left$(t, Len(t) - 2): KeyCode = 0
If KeyCode <> 8 And KeyCode <> Asc(vbTab) And Len(t) >= 10 Then KeyCode = 0
Me.TextBox2 = t
End Sub
Как доработать код чтобы для маски "##.##.####" в первую часть можно было вписать число от 01 до 31, во вторую: 01 - 12, в третью: 2000 - текущий год?
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Справочник! A2:A1000"
With UserForm1.ComboBox2
.AddItem "1"
.AddItem "2"
.AddItem "3"
.AddItem "4"
End With
End Sub
Как для ComboBox1 задать диапазон с А2 до последней занятой строки?
Есть таблица учета договоров с колонками: тип контрагента, УНП контрагента, название контрагента. Данные в таблицу вносятся через форму используя combobox для каждого из этих трех параметров.
Как сделать так что бы при вводе в форму УНП контрагента при наличии его в таблице автоматически подставлялись два других его значения (тип и название) в соответствующие поля формы?
Поле для ввода даты в форме создано как текстовое поле (TextBox2). Можно ли в это поле встроить маску даты (дд.мм.гггг) для удобства ввода. DatePicker не интересен. Он не у всех сейчас есть, да и ввод даты с клавиатуры мне предпочтительнее.
Здравствуйте. Создан журнал учета договоров. Заполнение данных происходит через форму. Можно ли запретить редактирование таблицы напрямую (ввод данных в ячейки, удаление - в идеале любые изменения на листе), но при этом оставить возможность внесения новых данных через форму? Я особо не разбираюсь в VBA, потому прошу внести изменения сразу в файл, если не сложно. Спасибо.
Здравствуйте. Есть таблица с 7-ю столбцами. Задача сравнить строки по 6-ти столбцам и при полном совпадении объединить их, при этом суммировать значения 7-ого столбца. Как такое воплотить? (желательно без сторонних дополнений). Спасибо.