У меня проблема, когда мои элементы списка содержат больше элементов / строк при вставке данных списка в таблицу Excel.Первый набор данных для местоположения 1 всегда работает отлично и вставляет все так, как должен, но иногда местоположение 2 будет работать, если я возьму с собой достаточно функции.Я не могу ничего получить после второго местоположения, чтобы правильно вставить значения, и оно всегда портит и вставляет строки в неправильные места или портит формулу суммы в конце раздела location.
Есть ли способ вставить строки со случайной переменной listcount?На данный момент я настроил его так: если в списке больше 15 элементов, ему нужно вставить число x после списка, а затем проделать то же самое для остальной части листа для каждого местоположения.
Private Sub testbtn_Click()
Dim excelApp As Excel.Application
Dim targetWB As Workbook
Dim targetRange As Range
Set excelApp = New Excel.Application
Dim fName As String
Dim xcelObj As Object
Set xcelObj = CreateObject("Scripting.FileSystemObject")
fName = ("Test - " & Format(Date, "mm-dd-yyyy"))
If FileExists(ThisWorkbook.Path & "\" & "template.xlsm") = False Then Exit Sub
If FileExists(ThisWorkbook.Path & "\" & fName & ".xlsm") = False Then
xcelObj.CopyFile ThisWorkbook.Path & "\template.xlsm", ThisWorkbook.Path & "\" & fName & ".xlsm"
End If
Set targetWB = excelApp.Workbooks.Open(ThisWorkbook.Path & "\" & fName & ".xlsm")
Dim n As Integer
L = lb1.List
n = (UBound(L) + 1) - 15
Call Sheet_AddLBRangeTest(targetWB, 1, 30, dtp.lb1, dtp.lb2, "A16", "B16")
Call Sheet_AddLBRangeTest(targetWB, 1, 51 + n, dtp.lb1, dtp.lb2, "A" & 37 + n, "B" & 37 + n)
Call Sheet_AddLBRangeTest(targetWB, 1, 72 + n + 7, dtp.lb1, dtp.lb2, "A" & 58 + n + 7, "B" & 58 + n + 7)
Call Sheet_AddLBRangeTest(targetWB, 1, 93 + n + 14, dtp.lb1, dtp.lb2, "A" & 79 + n + 14, "B" & 79 + n + 14)
Call Sheet_AddLBRangeTest(targetWB, 1, 114 + n + 21, dtp.lb1, dtp.lb2, "A" & 100 + n + 21, "B" & 100 + n + 21)
'Call Sheet_AddLBRange(targetWB, 1, dtp.lb1, dtp.lb2, "D16", "F16")
targetWB.Close (True)
excelApp.Quit
End Sub
'это функция из моего модуля', чтобы проверить, существует ли файл
Function FileExists(sFullPath As String) As Boolean
Dim fOBJ As Object
Set fOBJ = CreateObject("scripting.filesystemobject")
FileExists = fOBJ.FileExists(sFullPath)
End Function
'функция для добавления списков к листу Excel
Public Sub Sheet_AddLBRangeTest(Wb As Workbook, SN As Integer, RN As Integer, lb1 As MSForms.listbox, lb2 As MSForms.listbox, Cell1 As String, Cell2 As String)
Dim L As Variant
Dim L2 As Variant
Dim n As Integer
L = lb1.List
L2 = lb2.List
If lb1.ListCount = 0 Then
Wb.Sheets(SN).Range(Cell1).Resize(1, 1).Value = 0
Else
If UBound(L) + 1 > 15 Then
n = (UBound(L) + 1) - 15
Wb.Sheets(SN).Rows(RN).Resize(n).Insert
End If
Wb.Sheets(SN).Range(Cell1).Resize(UBound(L) + 1, 1).Value = L
End If
If lb2.ListCount = 0 Then
Wb.Sheets(SN).Range(Cell2).Resize(1, 1).Value = 0
Else
Wb.Sheets(SN).Range(Cell2).Resize(UBound(L2) + 1, 1).Value = L2
End If
End Sub
Thisснимок экрана моего файла шаблона Excel
Мессенджер здесь