Когда я пытаюсь использовать набор записей в Access VBA для заполнения текстового поля в таблице, он удаляет все разрывы строк из данных - PullRequest
0 голосов
/ 01 апреля 2020

Я пробовал ряд методов для введения сложного возврата, включая chr (10) и chr (13), vbnewline, vbcr, vblf, vblfcr

Это прекрасно работает, если я вставляю в текстовое поле на форма, но не тогда, когда я использую набор записей для записи данных непосредственно в таблицу

Вот пример строки, которую я пытаюсь записать, включая сложные возвраты:


МОНТАЖНЫЕ СТАНЦИИ МФК DENNIS

УРОВЕНЬ КОНКУРСА ПЛАНА ЧАСТИЧНОГО ЭТАЖА

RTI-ECL801_A2004_Rev06


После записи в таблицу данные выглядят так, что данные не возвращаются показано:


ЕСЛИ C НЕМЕЖЕВЫЕ СТАНЦИИ МОНТАЖ ДЕННИСА ЧАСТИЧНЫЙ УРОВЕНЬ КОНТУРНОГО ПЛАНА RTI-ECL801_A2004_Rev06


после большого количества экспериментов это похоже на символы для жесткого возврата встроены в текст, но он не отображается правильно в таблице. Когда я вырезаю и вставляю текст в другое приложение (например, в Excel или блокноте), оно отображается с показанными жесткими возвратами, но доступная форма не отображается с жесткими возвратами. Я сбит с толку и провел большую часть сегодняшнего дня, пытаясь понять, что должно быть простой операцией. Вот некоторые выдержки из кода

'set sheet in Excel
xl.Worksheets("Drawings").Activate
...
'open recordset 
rstData.Open "Drawings", CurrentProject.Connection, adOpenDynamic, 
adLockOptimistic
...
'write data from Excel cell into table field
rstData.AddNew
rstData.Fields("Drawing") = PreserveHardReturns(Trim(xl.Range(drawingCol & currRow)))
Public Function PreserveHardReturns(inputString As String) As String
    Dim stringParts() As String
    Dim i As Long

    stringParts = Split(inputString, vbCrLf)

    i = LBound(stringParts)
    PreserveHardReturns = ""

    While i < UBound(stringParts) + 1
        If i = UBound(stringParts) Then
            PreserveHardReturns = PreserveHardReturns & _
                        stringParts(i)
        Else
            PreserveHardReturns = PreserveHardReturns & _
                        stringParts(i) & vbNewLine
        End If
        i = i + 1
    Wend

End Function

1 Ответ

0 голосов
/ 02 апреля 2020

Я создал лист с многострочными ячейками, используя Alt + Enter.

Этот простой код сохраняет многострочную структуру в таблице Access при импорте данных Excel с помощью метода AddNew набора записей.

Sub test()
Dim xl As Excel.Application, wb As Excel.Workbook, ws As Excel.Worksheet
Dim rs As DAO.Recordset
Set xl = CreateObject("Excel.Application")
Set wb = xl.Workbooks.Open("C:\Users\Owner\June\MyStuff\Condos.xlsx")
Set ws = wb.Worksheets("Sheet1")
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Condos")
rs.AddNew
rs!Unit = Replace(ws.Range("D2"), Chr(10), vbCrLf)
rs.Update
wb.Close False
xl.Quit
End Sub

Итак, в вашем коде рассмотрим:

rstData.Fields("Drawing") = Replace(Trim(xl.Range(drawingCol & currRow)), Chr(10), vbCrLf)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...