Сохранение лидирующего нуля при копировании и вставке - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть код ниже, который копирует и вставляет данные с одного листа на другой.

Если вам нужна дополнительная информация: Смещение строки копирования как части L oop

Основная проблема, которую я имею, заключается в сохранении начального нуля для размеров после разделения на отдельные строки.

    COL_SIZE in "SS21 Master Sheet"= 06|612|1218|1824 
    Column "AH" in "Buysheet" is = 6
                                   612
                                   1218
                                   1824

Как я могу установить столбец AH как текст, чтобы он сохранял ноль (06)? Я попробовал несколько вариантов, но ни один из них не работает в данный момент.

Private Sub Workbook_Open()

Sheets("BUYSHEET").Cells.Clear


  Const COL_SIZE As String = "AO" 'This is the column with all the sizes listed in the mini master

  Dim wb1 As Workbook, wsSource As Worksheet
  Set wb1 = Workbooks.Open("U:\Design\KIDS\SS21 Kids Miniscale (Master) .xlsm") ' This is the file path to your mini master.
  Dim wb2 As Workbook, wsTarget As Worksheet
  Set wb2 = ThisWorkbook
  Dim iLastRow As Long, iTarget As Long, iRow As Long
  Dim rngSource As Range, ar As Variant, i As Integer

  Set wsSource = wb1.Sheets("SS21 Master Sheet") ' This is the name of your manster tab
  Set wsTarget = wb2.Sheets("BUYSHEET") 'this ths the name of your buysheet tab


  iLastRow = wsSource.Range("A" & Rows.Count).End(xlUp).Row
  iTarget = wsTarget.Range("A" & Rows.Count).End(xlUp).Row

  With wsSource
  For iRow = 1 To iLastRow
     Set rngSource = Intersect(.Rows(iRow).EntireRow, .Range("A:C, E:Y, Z:AF, AH:AI, AO:AO")) 'This columns you want to pull though to the buysheet tab (if one column must still be range eg, AO:AO)
     If iRow = 1 Then
        rngSource.Copy wsTarget.Range("A1")
        iTarget = iTarget + 1
     Else
       ar = Split(.Range(COL_SIZE & iRow), "|")
       For i = 0 To UBound(ar)
           rngSource.Copy wsTarget.Cells(iTarget, 1)
           wsTarget.Range("AH" & iTarget).Value = ar(i) 'AI is the column the sizes will populate in - We want this to replace the size list
           iTarget = iTarget + 1
       Next
     End If
    Next

  MsgBox "Completed"
  End With

1 Ответ

0 голосов
/ 19 февраля 2020

Хорошо, я вижу, что происходит сейчас.

wsTarget.Range("AH" & iTarget).Value = ar(i)

Если это пишет 06, тогда Excel будет рассматривать это как число и делать его 6.

Вы можете «отформатировать как текст», например, за до вы пишете значение:

With wsTarget.Range("AH" & iTarget)
    .NumberFormat = "@"
    .Value = ar(i)
End With

Или вы можете просто поставить префикс перед апострофом / цитата:

wsTarget.Range("AH" & iTarget).Value = "'" & ar(i)

Либо будет делать то, что вы хотите.

...