Это лучший способ сделать эту самую обобщающую форму и просто отлично работать для меня!
<div contenteditable="true" name="choice1" class="textfield" max="255"></div>
$('.textfield').on("keypress paste", function (e) {
if (this.innerHTML.length >= this.getAttribute("max")) {
e.preventDefault();
return false;
}
});
Проблема заключалась в диапазоне ty, который был F2: I2, в то время как он должен был быть F2: I
Sub test0()
Dim ws As Worksheet
Set ws = Sheets("Detail")
Dim lr As Long
lr = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row
Range("F:I").NumberFormat = "General"
Dim arr
arr = Array("MFR", "CUSTLINE#", "PRICE (DYP)", "DELIVERY")
ws.Range("F1:I1").Value = arr
Dim ty
ty = Array("=IF(H2=""NB"","""",AY2)", "=A2", "=IF(P2="""",""NB"",P2)", "=IF(BR2>(D2+AM2),""STOCK"",IF(AR2=""0 Weeks"","""",SUBSTITUTE(AR2,"" Weeks"","" WKS"")))")
ws.Range("F2:I2" & lr).Formula = ty
End Sub
Кажется, вам требуется максимальное число заполненных строк из любого столбца, упомянутого в качестве основных критериев в вашей формуле (ей).
Кроме того, если lr равно 99, то "F2:I2" & lr
становится F2:I299
.
Одноразовые вары редко бывают целесообразными или эффективными, если они не улучшают четкость кода. arr не сделал ничего из этого, но я бы сказал, что ty оправдано последним.
Sub test1()
Dim lr As Long, ty AS VARIANT
with workSheets("Detail")
lr = application.max(.cells(.rows.count, "H").end(xlup).row, _
.cells(.rows.count, "P").end(xlup).row, _
.cells(.rows.count, "AR").end(xlup).row, _
.cells(.rows.count, "BR").end(xlup).row)
.Range("F:I").NumberFormat = "General"
.Range("F1:I1").Value = Array("MFR", "CUSTLINE#", "PRICE (DYP)", "DELIVERY")
ty = Array("=IF(H2=""NB"", text(,), AY2)", "=A2", "=IF(P2= text(,), ""NB"", P2)", _
"=IF(BR2>(D2+AM2), ""STOCK"", " & _
"IF(AR2=""0 Weeks"", text(,), SUBSTITUTE(AR2, "" Weeks"", "" WKS"")))")
.Range("F2:I" & lr).Formula = ty
end with
End Sub