Excel VBAの新機能で、試行錯誤とスタックオーバーフローで学習しています。私は解決策を探して数時間を費やしましたが(まだGoogle VBAの質問に最善を尽くしています...)、理解できるものは見つかりませんでした。Excel VBA - コピーされた数式を使用して名前付き範囲に挿入された新しい行のユーザーフォームデータを入力します。
私はもともと、特定の名前の範囲内の次の空の行にユーザーフォームのデータを入力するようにしましたが、今はもっと柔軟にする必要があることがわかりました。
Sheets("Budget Input").Range("ContractInputField")
は、この時点でA50:E50である。 F50:V50には、自分の範囲と同数の行を通す必要のある数式が含まれています。
ユーザーがユーザーフォームの「OK」をクリックすると、私が必要:
- (「ContractInputField」内の、範囲の最後のエントリの下および他の上記の既存の範囲内に挿入される新しい行既に行50にあるが、最初の "ok"で51に成長し、次に2番目の "ok"で51に成長する新しい行は、 OK "など)
- この新しい行に入力するユーザーフォームデータ
ここで私は私の元のアプローチのために持っていたコードは次のとおりです。
Private Sub cmdOK_Click()
Dim J As Long
Sheets("Budget Input").Activate
ActiveSheet.Range("ContractInputLine1").Activate
Do While IsEmpty(ActiveCell.Offset(J, 0)) = False
J = J + 1
Loop
ActiveCell.Offset(J, 0).Value = Me.txtContractorName.Value
ActiveCell.Offset(J, 1).Value = Me.txtContractPurpose.Value
ActiveCell.Offset(J, 2).Value = Me.txtFlatRate.Value
ActiveCell.Offset(J, 3).Value = Me.txtContractHourlyRate.Value
ActiveCell.Offset(J, 4).Value = Me.txtContractHours.Value
ActiveCell.Offset(J, 16).Value = Me.ContractYear2.Value
ActiveCell.Offset(J, 17).Value = Me.ContractYear3.Value
ActiveCell.Offset(J, 18).Value = Me.ContractYear4.Value
'Clear boxes before next round of entry
Dim ctl As Control
For Each ctl In Me.Controls
If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
ctl.Value = " "
ElseIf TypeName(ctl) = "CheckBox" Then
ctl.Value = False
End If
Next ctl
End Sub
私はどんな指導をしてみたいです!ありがとう!
これは私の目的にはうまく機能しました。本当にありがとうございました!今興味をそそられているのは、範囲の最後に空白の行を置かずに範囲に行を挿入する簡単な方法でしょうか? – Hummuston
@Hummuston - 私はプログラム的に範囲を設定することで多少の作業(つまりnone)を行っていませんが、おそらく** ActiveWorkbook.Names( "ContractInputField")と言って現在の範囲を**拡張することができます** RefersTo = "=" Budget '!$ A50:$ E "&(J + 1)'を入力してください。あなたの質問は、現在の範囲が1行だけであることを示しているので、**範囲を 'ActiveWorkbook.Names(" ContractInputField ")に置き換えることができます** RefersTo =" = '予算入力'!$ A "&( J + 1)& ":$ E"&(J + 1) 'となります。 – YowE3K