Код VBA Excel 2016 для флажка в пользовательской форме1 для указания данных, которые необходимо перенести на другой лист (та же рабочая книга) - PullRequest
0 голосов
/ 07 ноября 2018

рабочая тетрадь

profitloss

UserForm

новая опция пользовательской формы

Пользователь @Lambik очень помог мне в достижении функциональности в этой книге. Успешно удалось получить данные из пользовательской формы1 на листе января 2019 года и в то же время перенести на лист прибыли. То, о чем я не думал, было то, что в прибылях и убытках все поля не могут быть скопированы и вставлены.

Я попытался добавить новую метку и новое текстовое поле в пользовательскую форму и заставить его работать, изучая код, предоставленный @Lambik, но была другая ошибка, не ошибка, это больше похоже на повторение, если я сохраняю отредактированную версию userform1 (Я удалил его, кстати, очень непрактично), тогда, даже если дополнительные поля «не» заполнены в пользовательской форме1, остальные записи все равно попадают в профит потерь, то есть вручную удаляются все записи, которых там не должно быть. Так я думал долго и трудно, и единственным, что я могу думать о том, чтобы добавить флажок на UserForm1 и когда флажок щелкнул только тогда первые два поля из UserForm1 которые коментарий и аренда идут в profitloss вместе с соответствующим месяцем, выбранным из Combobox1. Я думаю, я думаю, что это правильная логика. Если кто-нибудь может помочь с кодом VBA, как этого добиться, используя флажок, я был бы очень признателен. Я прикрепил ссылки на скриншоты рабочей книги, строки столбцов прибыльности, старый userform1 (работает как шарм, спасибо @Lambik) и новый отредактированный userform1 с дополнительной меткой и флажком, чтобы данные копировались на прибыль и убыток лист вместе с текущим выбранным месяцем.

Код, с которым работает userform1,

Private Sub ComboBox1_Change()

Dim SheetName As String
Dim ws As Worksheet
Dim LastRow As Long

SheetName = ComboBox1.Value
Set ws = Sheets(SheetName)

 LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
 Label8.Caption = "         Balance is: " & ws.Cells(LastRow, 7).Value


Private Sub CommandButton1_Click()

Dim dcc As Long
Dim abc As Worksheet, pfl As Worksheet

 Set abc = ThisWorkbook.Worksheets(Me.ComboBox1.Value)
 Set pfl = Sheets("ProfitLoss")

With abc

dcc = .Range("A" & Rows.Count).End(xlUp).Row

.Cells(dcc + 1, 1).Value = Date
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value (comment/source)
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value (rent)
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value

End With

With pfl
dcc = .Range("A" & Rows.Count).End(xlUp).Row

.Cells(dcc + 1, 1).Value = Date
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value (comment/source)
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value (In)
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value 
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value
End With

TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""


End Sub

Добавлен флажок для userform1 - флажок1, и я поместил (комментарий / источник) (аренда) в коде выше, чтобы определить, какие строки необходимо перенести. Если возможно, тогда, когда флажок установлен, то есть запись войдет в январь 2019 года, а также в отчет о прибылях и убытках, тогда эта запись будет автоматически выделена и изменит цвет, скажем, на зеленый? или любой в этом отношении. просто выделиться, если userform1 не используется, а пользователь просто смотрит на лист. Я ценю вашу помощь в достижении этого. Заранее спасибо.

Приветствие.

P.S. От userform1 только комментарий и арендная плата должны быть добавлены на лист прибыли, когда флажок установлен и ничего больше.

1 Ответ

0 голосов
/ 07 ноября 2018

ОК, я не эксперт, и мне помогла @FreeMan, который не торопился в объяснении и предоставлении кода. Я не возьму в этом кредит. Выкладывая это там, чтобы любой другой с подобной проблемой мог извлечь выгоду из этого. Я хорошо и искренне благодарен всем, кто пытался помочь с этим и другими вопросами и кодом VBA здесь.

Вот оно:

Private Sub CommandButton1_Click()

  Dim dcc As Long
  Dim abc As Worksheet, pfl As Worksheet

  Set abc = ThisWorkbook.Worksheets(Me.ComboBox1.Value)
  Set pfl = Sheets("ProfitLoss")

With abc
dcc = .Range("A" & Rows.count).End(xlUp).row
.Cells(dcc + 1, 1).Value = Date
.Cells(dcc + 1, 2).Value = Me.TextBox1.Value
.Cells(dcc + 1, 3).Value = Me.TextBox2.Value
.Cells(dcc + 1, 4).Value = Me.TextBox3.Value
.Cells(dcc + 1, 5).Value = Me.TextBox4.Value
.Cells(dcc + 1, 6).Value = Me.TextBox5.Value

End With


If CheckBox1.Value Then 'this is a shorter way of writing the conditional
With pfl
  dcc = .Range("A" & Rows.count).End(xlUp).row
  .Cells(dcc + 1, 1).Value = Date
  .Cells(dcc + 1, 2).Value = Me.TextBox1.Value
  .Cells(dcc + 1, 3).Value = Me.TextBox2.Value
  .Cells(dcc + 1, 4).Value = Me.TextBox3.Value
  .Cells(dcc + 1, 5).Value = Me.TextBox4.Value
  .Cells(dcc + 1, 6).Value = Me.TextBox5.Value
 End With
End If

 TextBox1.text = ""
 TextBox2.text = ""
 TextBox3.text = ""
 TextBox4.text = ""
 TextBox5.text = ""

End Sub

Надеюсь, это кому-нибудь поможет. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...